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

MySQL постепенно замедляется до перезагрузки сервера

Производительность страниц на моем сайте, которые обращаются к моей базе данных mysql, со временем замедляется, пока я не перезагружу сервер. (Статические страницы не затрагиваются.) Сам перезапуск mysqld не помогает, но помогает перезагрузка всего сервера. Я пробовал различные настройки производительности MySQL и включал кеширование, но ни один из них не помог.

Сначала это очень быстро, но через несколько дней становится намного медленнее, и в конечном итоге становится невыносимо медленным. Любые операции mysql, которые я запускаю из командной строки, совершенно нормальны, включая подключение к mysql, подключение к базе данных и выполнение запросов. Журнал медленных запросов не показывает ничего аномального. Но любая страница на моем сайте, которая связана с mysql, работает очень медленно.

Если я перезагружу свой сервер, все снова будет работать быстро, пока снова не замедлится.

my.cnf:

max_connections = 500
query_cache_size = 10M
tmp_table_size = 16M
max_heap_table_size = 16M
thread_cache_size = 4
innodb_buffer_pool_size = 7G
symbolic-links=0

наверху, сервер на 3 дня:

вверху, сервер работает через 5 минут после перезагрузки:

Какие шаги я должен предпринять, чтобы изолировать и решить эту проблему?

Похоже, вы плохо меняете местами.

Ваша проблема может заключаться в двойной буферизации. Попробуйте добавить это в свой my.cnf (и, очевидно, перезапустите сервер mysql):

innodb_flush_method = O_DIRECT

И уменьшите объем подкачки на уровне ОС, например:

echo 0 > /proc/sys/vm/swappiness

Вы находитесь в 76% системном ожидании, скорее всего, из-за интенсивной замены.

  1. использовать mysqltuner.pl чтобы узнать, какие переменные влияют на использование памяти
  2. нажмите "m", когда наверху, чтобы увидеть, что съело память
  3. использовать free -m чтобы узнать, сколько кешируется
  4. использовать iotop чтобы увидеть, кто ест IO

Похоже, виновником был процесс межсетевого экрана OSSEC - он потреблял слишком много ресурсов ЦП и тормозил все. Когда это было перенастроено, все снова пошло гладко.

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

Взгляните на характеристики вашей системы через 3 дня - ваша система и использование памяти увеличены, а бесплатное пользование ограничено. Поскольку ваши запросы командной строки работают нормально без задержек, но ваши веб-страницы работают медленно, у вас есть утечка памяти, которая остается открытой, вероятно, в пространстве памяти вашего веб-сервера (поскольку командная строка работает нормально, ее нет в mySQL).

Марк H