MariaDB e alta carga de CPU do PHP-FPM
temos um servidor dedicado rodando apenas 1 domínio (Wordpress) com 500 usuários por minuto e muitas vezes temos timeouts. Especificações do servidor: Intel (R) Xeon (R) CPU E5-1650 v3 @ 3,50 GHz (12 core (s)) 64 GB de RAM 2 x 200 GB SSD Raid 0 SO: Debian 9.6, Plesk Onyx 17.8, MariaDB 10, PHP-FPM 7.2
Acabamos de ajustar algumas configurações do banco de dados, mas ainda temos os tempos limite / intervalos. MariaDB CPU Usage é 200%, PHP-FPM 50% CPU per Instance Alguém pode ajudar?
Aqui está o 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
Ir-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
Respostas
Algumas de suas opções de ajuste são perigosas. A maioria é terrivelmente contraproducente. Deixe o seguinte e remova o resto:
innodb_buffer_pool_size=24G
skip_name_resolve=1
Em seguida, defina:
slow_log=1
long_query_time=0
Capture algumas horas de log lento e coloque-o em mysqldumpslow ou pt-query-digest, e corrija as consultas que estão consumindo a maior parte de sua CPU, através de uma melhor indexação ou religando-as com mais eficiência.
Para uma análise mais detalhada, consulte: http://mysql.rjweb.org/doc.php/mysql_analysis#tuning
Off hand: query_cache_size = 256Mestá muito alto, levando à atividade da CPU para mantê-lo limpo. Na maioria dos casos, é melhor desligar o cache de consulta.
WordPress? Aqui está outra dica, mas envolve a troca de tabelas:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta
Minhas sugestões sobre como configurar o 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