MariaDB と PHP-FPM の CPU 負荷が高い

MariaDB と PHP-FPM の CPU 負荷が高い

弊社の専用サーバーでは、1 つのドメイン (Wordpress) のみを 1 分あたり 500 人のユーザーで実行しており、タイムアウトが頻繁に発生します。サーバー仕様: Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz (12 コア)、64GB RAM、2 x 200GB SSD、Raid 0、OS: Debian 9.6、Plesk Onyx 17.8、MariaDB 10、PHP-FPM 7.2

DB 設定をいくつか調整しましたが、タイムアウトや中断がまだ発生します。MariaDB の CPU 使用率は 200%、PHP-FPM はインスタンスあたり 50% の CPU です。誰か助けてくれませんか?

my.cnf は次のとおりです
。key_buffer_size = 16M
、max_allowed_pa​​cket = 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 に通して、インデックスを改善したり、クエリをより効率的に再配線したりして、CPU の大部分を消費しているクエリを修正します。

答え2

より詳細な分析については、以下を参照してください。 http://mysql.rjweb.org/doc.php/mysql_analysis#チューニング

オフハンド: query_cache_size = 256M高すぎるため、CPUアクティビティが発生し、パージが維持されます。ほとんどこのような場合は、クエリ キャッシュをオフにするのが最適です。

WordPress ですか? ここに別のヒントがありますが、テーブルの変更が必要です: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

スローログの設定に関する私の提案:

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

関連情報