Недавно мы столкнулись с серьезной проблемой производительности на нашем сервере MySQL. Сервер приложений и сервер базы данных разделены. На стороне сервера базы данных средняя нагрузка мгновенно увеличивается. Загрузка процессора тоже остается высокой (около 200%).
средняя нагрузка: 16,91, 21,48, 30,91
В конце приложения мы вручную закрыли соединения с базой данных, где бы они ни открывались вручную. my.cnf также немного настроен с использованием следующих параметров:
innodb_buffer_pool_size = 4G
query_cache_type = 1
wait_timeout = 1800
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 32
query_cache_limit = 5M
query_cache_size = 640M
query_cache_type = 1
Но все равно видимых улучшений нет. Использование сервера по-прежнему очень велико. Что могло пойти не так с конфигурацией? Как поддерживать среднюю нагрузку на сервер в норме (или хотя бы близкой к норме)?
Чтобы решить эту проблему, вам (или кому-то от вашего имени) потребуется собрать некоторые данные о вашей системе и проанализировать их с помощью Научный метод (или процесс, который вы предпочитаете).
Вы можете собирать данные с помощью системных инструментов, таких как sar, free, iostat, vmstat и т. Д.
Установите мониторинг для сбора и отслеживания данных 1,2
Чтение ваших журналов также часто бывает полезным.
Теперь, когда у вас есть представление о том, как работает ваша система, вы можете начать задавать вопросы, проводить испытания и анализировать результаты.
Моя средняя загрузка необычно высока.1
Итак, теперь мы знаем, какую реальную проблему решаем, и у нас есть направление. Давайте соберем некоторую информацию, которая поможет нам найти решение.
Проанализируйте собранную информацию. Что на самом деле происходит в системе, когда служба перестает отвечать? Каково состояние ресурсов системы?
Примите соответствующие меры для исправления. Надеюсь, что происходит довольно очевидно, у вас заканчивается память и выходит OOM killer, ваша активность подкачки слишком высока, ваша очередь выполнения слишком длинная, вы привязаны к iobound и т. Д. Если это не очевидно, то вы ' Возможно, вы собираете неверные данные - вы знаете, что делать, вернитесь к пункту 2.
Следите за тем, что делают изменения, внесенные в 4..
Исправили ли изменения проблему? Это лучше? Это хуже? Нет разницы? Куда вы пойдете дальше, зависит от того, что вы найдете. Возможно, вам придется вернуться к 2. и собрать более подходящие данные или 3. повторно проанализировать, какие данные у вас есть, или 4. потому что вы определили ряд потенциальных решений.
Задокументируйте свои выводы и внесенные изменения.