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

mysqld заставляет машину зависать с высоким iowait

Я унаследовал LAMP-сервер под управлением centos, который время от времени зависает в случайном порядке, несмотря на низкий веб-трафик.

Я установил Server Density, чтобы отслеживать, что происходит, и обнаружил, что во время зависания происходит следующее:

На мой нетренированный взгляд кажется, что mysqld периодически выполняет чистку и блокирует весь сервер, пока выполняет дисковый ввод-вывод (что довольно медленно, поскольку это виртуальная машина).

Как мне изменить конфигурацию mysqld, чтобы предотвратить это?

Количество "временных дисковых таблиц" mysql упало с 140 000 до 0.

Эти временные таблицы создаются приложением (например, «СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ ....») или же они создаются базой данных (используются при воссоздании индексов / сортировке больших наборов данных).

Настройка конфигурации для обеспечения большей сортировки в памяти / большего количества потоков должна помочь (как вы это делаете, зависит от того, в каком движке реализованы таблицы). mysqltuner.pl следует делать разумные предложения.

Но вы получите гораздо больше пользы от настройки ваших запросов.

1) убедитесь, что ни один из ваших кодов не отключает / не включает индексы для очень больших таблиц (это повышает производительность при первоначальном заполнении таблицы и может улучшить время обработки при добавлении строк в таблицу - но за счет потери параллелизма).

2) Использование этот сценарий чтобы исключить буквальные значения из запросов в журнале медленных запросов, а затем установить приоритеты на основе запросов с наибольшим совокупным временем обработки.

Бегать: mysqladmin -u root -p ext -ri 30 | grep Created_tmp_disk

Первый запуск покажет вам, сколько временных таблиц на диске было создано с момента последнего перезапуска MySQL. Затем он сообщит вам, сколько из них создано в 30-секундном временном окне (пока вы не выйдете из него с помощью Control-C).

Если значение велико и продолжает увеличиваться, вы можете поместить MySQL tmpdir на RAM-диск, чтобы уменьшить высокий iowait.

Еще лучше было бы оптимизировать ваши запросы, как предлагает symcbean. Смотреть Вот для условий, которые приводят к временным таблицам.