enterprise_refresh_index Спящая связь MySQL


8

Временами индексатор, который запускается cron, кажется, застревает на MySQL, поскольку можно увидеть спящие соединения. Индексатор работает несколько часов, а на самом деле он вообще не работает. Я искал это, но я не мог найти ничего похожего. Кто-нибудь, кто может пролить свет? Возможно конфигурация сервера или ошибка Magento?

Ответы:


0

Вы используете постоянные соединения? Сколько у вас спящих соединений? Какое максимальное количество соединений ваш БД-сервер настроен для разрешения?

Чтобы проверить, сколько соединений сна вы только что запустили:

show full processlist;

Чтобы увидеть запуск max_connections:

show variables like 'max_connections';

Я думаю, что спящие соединения не являются проблемой, mysqld будет тайм-аут спящих соединений на основе 2 значений:

интерактивное время ожидания

Оба - 28800 секунд (8 часов) по умолчанию.

Вы можете установить эти параметры в my.cnf (расположение этого файла отличается в разных ОС и БД, percona, mysql и т. Д.)

Также посмотрите этот ответ от администраторов базы данных: https://dba.stackexchange.com/a/1559, и если вы хотите узнать больше о том, как отладить происхождение спящих соединений, проверьте эту отличную статью: https: // www. percona.com/blog/2007/02/08/debugging-sleeping-connections-with-mysql/

«Если ваши соединения постоянны (открываются через mysql_pconnect), вы можете уменьшить эти цифры до чего-то разумного, например, 600 (10 минут) или даже 60 (1 минута). Или, если ваше приложение работает нормально, вы можете оставить значение по умолчанию. Это вам решать."

Попробуйте запустить индексатор из консоли, чтобы увидеть, выводит ли он какую-либо ошибку:

php shell/indexer info # this will output the list of indexes then
php shell/indexer --reindex {index_name}

К сожалению, мы все еще получаем эту проблему. Я запускаю команду show full process, и она отображает очень длинные операторы SQL с перечисленными идентификаторами сущностей.
user1240207

0

настройте свой MySQL-сервер, установив более короткое время ожидания wait_timeoutиinteractive_timeout

mysql> показывать переменные like "%timeout%";

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600  |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)

Установить с:

set global wait_timeout=3;
set global interactive_timeout=3;

(а также укажите в файле конфигурации время перезагрузки вашего сервера)

Но вы лечите симптомы вместо основной причины - почему связи открыты? Если сценарий PHP закончен, они не должны закрыться? Убедитесь, что ваш веб-сервер не использует пулы соединений ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.