我们有一台专用服务器,仅运行 1 个域 (Wordpress),每分钟有 500 个用户,并且经常超时。服务器规格:Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz(12 核)64GB RAM 2 x 200GB SSD Raid 0 操作系统:Debian 9.6、Plesk Onyx 17.8、MariaDB 10、PHP-FPM 7.2
我们刚刚调整了一些数据库设置,但仍然有超时/中断。MariaDB CPU 使用率为 200%,PHP-FPM 每个实例 CPU 使用率为 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 中,然后通过更好的索引或更有效地重新连接来修复占用大部分 CPU 的查询。
答案2
更详细的分析请见: http://mysql.rjweb.org/doc.php/mysql_analysis#tuning
一方面: query_cache_size = 256M
太高,导致 CPU 活动保持清除状态。在最多情况下,最好关闭查询缓存。
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