Как понять, почему mysql ест очень много CPU? Здравствуйте.
Недавно переехали на новый сервер, сервис начал рости и при относительно небольшом увеличении количества онлайна сервис начал заметно подтормаживать. Загрузка страницы занимает 20-30 секунд, что не есть хорошо.
top показывает, что mysql ест больше всего памяти, практически всю. Использовал mysqltuner, всё стало хорошо, но спустя 2-3 дня снова начались проблемы.
Прикладываю конфиг my.cnf, графики munin'a и советы mysqltuner'a.
Mysql: Ver 8.42 Distrib 5.5.44, for debian-linux-gnu on x86_64
Дополню вопрос любыми сведениями, которые необходимы.
Надеюсь на помощь и развёрнутый ответ, дабы знать что и как следует делать правильно.
Munin: socpult.ru/_munin/Munin.html
Конфиг: # The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
wait_timeout = 30
interactive_timeout = 30
tmp_table-size = 200M
max_heap_table_size = 200M
#skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer = 256M
key_buffer_size = 10M
max_allowed_packet = 8M
thread_stack = 192K
thread_cache_size = 16
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
max_connections = 1200
open_files_limit = 4000
character-set-server = utf8
table_cache = 2048
read_buffer_size = 64K
read_rnd_buffer_size = 2M
sort_buffer_size = 8M
thread_concurrency = 10
#
# * Query Cache Configuration
#
query_cache_limit = 400M
query_cache_size = 300M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
general_log_file = /var/log/mysql/mysql.log
general_log = 8
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# Here you can see queries with especially long duration
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
innodb_buffer_pool_size = 50GB
innodb_additional_mem_pool_size = 20485760
innodb_thread_concurrency = 6
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 32M
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
[mysqldump]
quick
quote-names
max_allowed_packet = 16M

21 Авг 2019 в 06:54
179 +1
0
Ответы
1

Для понимания причины высокой загрузки CPU mysql, можно рассмотреть несколько аспектов.

Объем данных: Основная причина - это возможно большой объем данных в вашей базе данных, что приводит к тому, что mysql тратит много ресурсов на обработку запросов и операций с данными. Если у вас большая база данных, то рекомендуется разбить её на отдельные таблицы и использовать индексы для ускорения запросов.

Неправильные настройки my.cnf: Параметры в конфигурационном файле my.cnf могут быть установлены неоптимально, что также может привести к высокому потреблению ресурсов CPU. Рекомендуется пройти настройку параметров mysql с помощью утилиты mysqltuner, которая может предложить оптимальные настройки для вашего сервера.

Запросы: Высокая загрузка CPU может быть вызвана плохо оптимизированными запросами к базе данных. Проверьте, какие запросы выполняются наиболее долго и оптимизируйте их, добавив индексы или пересмотрев структуру таблиц.

Использование InnoDB: Если у вас большой объем данных, то использование InnoDB может быть большой нагрузкой на CPU из-за его дополнительной функциональности и сложности. Попробуйте настроить параметры InnoDB в соответствии с рекомендациями производителя.

Мониторинг: Постоянно мониторируйте загрузку сервера и mysql с помощью инструментов мониторинга, чтобы оперативно реагировать на увеличение нагрузки и находить причины проблем.

Обратите внимание на параметры wait_timeout и interactive_timeout, которые могут быть слишком низкими и приводить к необходимости часто переподключаться к базе данных, что влечет увеличение нагрузки CPU.

Также следует протестировать и оптимизировать работу вашего веб-приложения, чтобы избежать избыточных запросов к базе данных.

Рекомендую проработать каждый из указанных аспектов и поочередно провести оптимизацию, чтобы выявить причину и уменьшить нагрузку на CPU mysql.

20 Апр в 13:11
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир