Как узнать почему MySQL нагружает процессор?

Уже несколько дней мучаюсь с настройкой mysql. Не могу добиться стабильной работы. Сервер 8 ядер и 32 Гб оперативной памяти.
Сначало база просто медленно обрабатывала запросы. Несколько дней выставлял параметры по рекомендации mysqltuner. Теперь же на любых настройках mysql большую часть времени mysql нагружает процессор на полную. LA в среднем держится на уровен 17 15 14. Опреативная память при этом занята не более чем на половину. Несколько простых сайтов на wordpress, но в большинстве шаблонов есть самописные sql запросы. Object cache и плагины кэширования почему-то работают не очень: либо не кэшируют вообще, либо кэш живет очень мало при любых настройках. Все таблицы InnoDB.
Частые ошибки из логов:
  • upstream timed out (110: Connection timed out) while reading response header from upstream
  • recv() failed (104: Connection reset by peer) while reading response header from upstream
  • Lock wait timeout exceeded - выставил lock_wait_timeout = 20
  • Waiting for table metadata lock - в my.cnf выставил autocommit = 0

Таймауты в nginx, php-fpm, mysql задраны до небес.
Были еще ошибки, но я их не записал.
В slow log куча запросов без индексов, но если выполнять их в консоли, то большинство из них выполняется менее чем за 0.01 сек.

Сейчас в show processlist стало появлятся много запросов со статусом "Copying to tmp table". Буду еще поднимать параметры кэша и буферов.

UPD: На данный момент перенес всю базу в оперативку, т.к. её объем позволяет. Работает заметно шустрее, но все равно есть несколько висящих запросов в статусе "Copying to tmp table", хотя я поднял параметры типа tmp_table_size, max_heap_table_size и некоторые дргуие буферы сортирововк и join'ов в 2 раза.

UPD: не помогло. Нагрузка поднялась, но меньше чем было. LA скачет от 3 до 14 по первому значению. Опять пошли 504 Gateway Time-out из-за базы.
  • Вопрос задан
  • 1258 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
В slow log куча запросов без индексов

MySQL нагружает процессор

Собственно.

С консоли - запускайте через SELECT SQL_NO_CACHE. Скорей всего у вас query cache активен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы