Производительность страниц на моем сайте, которые обращаются к моей базе данных 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% системном ожидании, скорее всего, из-за интенсивной замены.
mysqltuner.pl
чтобы узнать, какие переменные влияют на использование памятиfree -m
чтобы узнать, сколько кешируетсяiotop
чтобы увидеть, кто ест IOПохоже, виновником был процесс межсетевого экрана OSSEC - он потреблял слишком много ресурсов ЦП и тормозил все. Когда это было перенастроено, все снова пошло гладко.
На своих веб-страницах вы закрываете соединение с базой данных и освобождаете память, которую вы использовали? Если нет, то должно быть.
Взгляните на характеристики вашей системы через 3 дня - ваша система и использование памяти увеличены, а бесплатное пользование ограничено. Поскольку ваши запросы командной строки работают нормально без задержек, но ваши веб-страницы работают медленно, у вас есть утечка памяти, которая остается открытой, вероятно, в пространстве памяти вашего веб-сервера (поскольку командная строка работает нормально, ее нет в mySQL).
Марк H