Mysql Высокая загрузка процессора

У меня есть выделенный сервер с 48 ядрами, 128 ГБ оперативной памяти, 2 nvme с RAID. У меня довольно большой сайт на WordPress. с 5 ГБ базы данных MySQL. Одновременная посещаемость сайта составляет от 200 до 700 пользователей. Сервер всегда показывает, что MySQL вызывает нехватку памяти и CPU htop screenshot . Я пробовал много улучшений для уменьшения нагрузки, но не нашел удовлетворительного решения. Я обнаружил, что MySQL всегда потребляет диск на 100%, как показано на верхнем рисунке на снимке экрана . Я попытался подписаться на mysqltuner.pl, и это его результат mysqltuner results и это содержимое my.cnf:

tmp_table_size = 10G
query_cache_type=1
query_cache_size = 65M
query_cache_limit=256K
query_cache_min_res_unit = 2k
innodb_buffer_pool_size = 7409M
innodb_buffer_pool_instances=8
join_buffer_size = 256M
sort_buffer_size = 256M
read_buffer_size = 256M
read_rnd_buffer_size = 256M
innodb_log_file_size = 256M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_allowed_packet=268435456
open_files_limit=40000
innodb_file_per_table=1

Спасибо за продвинутый

0
задан 20 March 2021 в 09:04
1 ответ
tmp_table_size = 10G

НЕТ! Если 13 пользователей одновременно выполняют очень большой запрос, это может привести к переполнению оперативной памяти! Предлагаю снизить это только на 1% ОЗУ. Скажем только 500М.

Итак, как это приводит к высокому количеству операций ввода-вывода? Непослушный запрос сначала заполнит 10 ГБ, а затем, если ему нужно больше места, он запишет его на диск.

Самый простой способ сделать такой запрос - это JOIN две большие таблицы без предложения ON .

Общая помощь (для ЦП и, возможно, ввода-вывода) заключается в улучшении индексов на postmeta: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

1
ответ дан 24 April 2021 в 01:41

Теги

Похожие вопросы