На моем сервере (ubuntu 12.04) mysqld начал показывать странные скачки производительности процессора. Я записал некоторые из них в качестве образца:
Значение после тройного дефиса «---» - это использование процессора (за которым следует использование памяти), как сообщает top. Обратите внимание, например, на 3 больших всплеска в 21:31:33 и 21:37:33 (178%!) И 21:40:25. В это время у клиентов возникают проблемы с подключением к серверу.
Вы знаете, что могло вызвать это?
Я сделал несколько вещей;
Перезагрузить весь сервер: То же самое потом
Включите общий журнал, чтобы просматривать запросы в режиме реального времени: Я сделал оценку количества запросов, когда загрузка процессора резко возрастает, а когда нет. Сумма такая же. Но когда посетителей немного, интервал между скачками кажется более длинным (не уверен на 100%, но после беглого обзора так кажется).
Ран mysqltuner:
-------- Performance Metrics -------------------------------------------------
[--] Up for: 1h 5m 28s (50K q [12.899 qps], 25K conn, TX: 22M, RX: 6M)
[--] Reads / Writes: 98% / 2%
[--] Total buffers: 208.0M global + 2.7M per thread (400 max threads)
[OK] Maximum possible memory usage: 1.3G (64% of installed RAM)
[OK] Slow queries: 0% (0/50K)
[OK] Highest usage of available connections: 9% (37/400)
[OK] Key buffer size / total MyISAM indexes: 16.0M/100.0K
[OK] Query cache efficiency: 94.0% (23K cached / 25K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1K sorts)
[OK] Temporary tables created on disk: 19% (54 on disk / 272 total)
[OK] Thread cache hit rate: 99% (37 created / 25K connections)
[OK] Table cache hit rate: 36% (77 open / 213 opened)
[OK] Open file limit used: 1% (50/4K)
[OK] Table locks acquired immediately: 100% (1K immediate / 1K locks)
[OK] InnoDB data size / buffer pool: 27.0M/128.0M
Обратите внимание, что он работал вскоре после перезапуска mysql, но я запускал его раньше и показал то же самое.
Проверенные проблемы ввода-вывода: Очень-очень низкий во время скачков ЦП и между скачками.
Проверено полный список процессов: В основном пусто, как во время скачков ЦП, так и между ними.
Мой файл конфигурации mysql: http://pastebin.com/k5qpVVLR
Другое серверное программное обеспечение: На сайте работают Apache и PHP. Эти и другие процессы не показывают никаких изменений во время скачков процессора mysql. Я проверил соответствующий код php, и кажется, что соединения обрабатываются нормально. Соответствующий материал из моего php.ini (пробовал также с постоянством включения и выключения):
pdo_mysql.cache_size = 2000
mysql.cache_size = 2000
mysql.max_links = -1
Я читал об оптимизации таблиц, но общая идея кажется, что innodb этого не требует, также мои таблицы не такие большие (~ 30K строк).
Я в недоумении, буду признателен за любые указатели. Я надеюсь, что у некоторых из вас был подобный опыт.
Большое спасибо.
Почему вы думаете, что эти шипы странные? Это может быть просто mysql, работающий с обычными запросами. Что вам нужно сделать, так это проанализировать, какие запросы занимают больше всего времени, и сопоставить это со временем увеличения ЦП. Вам следует начать с включения медленного ведения журнала запросов и просмотра запросов, которые занимают больше всего времени. Как только они будут обнаружены, вы можете начать думать о том, насколько жизнеспособно сделать их более эффективными.