Назад | Перейти на главную страницу

Запрос заставляет сервер mysql уйти

У нас есть приложение, которое развернуто на более чем 50 веб-сайтах. На этих сайтах мы заметили странное поведение, теперь мы отследили это по одному конкретному запросу. Изредка, обычно один или два раза в день, один из наших сценариев отладки сообщает

2006 : MySQL server has gone away

Я знаю, что есть ряд причин, по которым эта ошибка может быть вызвана, но самое странное то, что каждый раз, когда она возникает, это происходит из того же запущенного SQL-запроса. В этом запросе нет ничего странного или сложного, он выглядит так:

SELECT `advert_only` FROM `products` WHERE `id` = '6197'

Этот запрос должен выполняться десятки тысяч раз в день для различных идентификаторов продукта, поэтому он точно не будет терпеть неудачу каждый раз. Он случайно не работает на кажущихся случайными сайтах на наших 4 серверах. По-видимому, нет ничего общего, мы заметили одну небольшую вещь: иногда это происходит при загрузке 2 или 3 страниц подряд для 1 конкретного человека, поскольку мы также отслеживаем IP-адрес человека, с которым это произошло.

Это на серверах CentOS 5 с MySQL 5.0.81

Черт побери мою низкую репутацию! Я не могу разместить вопрос / комментарий выше. Мне очень жаль, что это не ответ, но, надеюсь, это может привести вас в правильном направлении.

Вы обновляете таблицу товаров? Вы видите корреляцию? Можете ли вы запустить SELECT без блокировок, читая незафиксированные строки?

Если вам не нужно ограничивать запросы зафиксированными данными, вы должны включить этот оператор перед выбором, чтобы избежать проблем с блокировкой:

set transaction isolation level READ UNCOMMITTED;

Кроме того, на случай, если сообщение «Ушел» связано с производительностью, есть ли у вас индекс в столбце «id»?

Думаю, ошибка лишь отчасти связана с этим запросом. Может быть, таблица продуктов слишком большая и произойдет тайм-аут (??). Может, стоит проверить, не фрагментированы ли индексы.

См. Эту ссылку для возможных причин: http://dev.mysql.com/doc/refman/5.1/en/gone-away.html См. Эту ссылку для дефрагментации: http://dev.mysql.com/doc/refman/5.1/en/innodb-file-defragmenting.html

Я ожидаю, что он выйдет из строя или у вас возникла проблема с сетью между вашим сервером приложений и сервером mysql.

Если сервер дает сбой, вы увидите много сообщений в журнале. Вы что-нибудь видите в журнале?

Если вы используете 32-битный компьютер, сбой, вероятно, вызван нехваткой адресного пространства, поскольку вы не учли адресное пространство при настройке. Не настраивайте его так, чтобы используемая виртуальная память превышала 2 ГБ, иначе у вас проблемы.

Не запускайте 32-битный MySQL, если можете этого избежать.