Я унаследовал 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. Смотреть Вот для условий, которые приводят к временным таблицам.