у нас есть выделенный сервер, на котором работает только 1 домен (Wordpress) с 500 пользователями в минуту и очень часто возникают тайм-ауты. Характеристики сервера: Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz (12 core(s)) 64GB RAM 2 x 200GB SSD Raid 0 ОС: Debian 9.6, Plesk Onyx 17.8, MariaDB 10, PHP-FPM 7.2
Мы только что настроили некоторые параметры БД, но тайм-ауты/перерывы все еще есть. Загрузка ЦП MariaDB составляет 200%, PHP-FPM — 50% ЦП на экземпляр. Может ли кто-нибудь помочь?
Вот my.cnf
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam_recover_options = BACKUP
max_connections = 200
#table_cache = 64
#thread_concurrency = 10
#query_cache_limit = 1M
#query_cache_size = 16M
skip-name-resolve = 1
table_cache = 8192
table_definition_cache = 8192
table_open_cache = 16384
sort_buffer_size = 16M
query_cache_limit = 24M
query_cache_size = 256M
join_buffer_size = 10M
tmp_table_size = 512M
max_heap_table_size = 512M
innodb_buffer_pool_size = 24G
innodb_buffer_pool_instances = 8
innodb_flush_method = O_DSYNC
innodb_flush_log_at_trx_commit = 0
innodb_lru_scan_depth = 256
решение1
Некоторые из ваших вариантов настройки опасны. Большинство из них ужасно контрпродуктивны. Оставьте следующее и удалите остальное:
innodb_buffer_pool_size=24G
skip_name_resolve=1
Затем установите:
slow_log=1
long_query_time=0
Соберите несколько часов медленного журнала и пропустите его через mysqldumpslow или pt-query-digest, а затем исправьте запросы, которые потребляют большую часть ресурсов вашего ЦП, с помощью лучшей индексации или более эффективной переподключения.
решение2
Более подробный анализ см. здесь: http://mysql.rjweb.org/doc.php/mysql_analysis#tuning
Off hand: query_cache_size = 256M
слишком высок, что приводит к активности ЦП, чтобы держать его очищенным. Вбольшинствослучаях лучше отключить кэширование запросов.
WordPress? Вот еще один совет, но он подразумевает изменение таблиц там: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta
Мои предложения по настройке slowlog:
log_output = FILE
slow_query_log = ON
slow_query_log_file = (fullpath to some file)
long_query_time = 1
log_slow_admin_statements = ON
log_queries_not_using_indexes = OFF
http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog