我們有一台專用伺服器,僅運行 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、PHPFPM 7.
我們剛剛調整了一些資料庫設置,但仍然存在超時/中斷。 MariaDB CPU 使用率為 200%,PHP-FPM 每個實例 50% CPU 有人可以幫忙嗎?
這是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
跳過名稱解析 = 1
table_cache = 8192
table_definition_cache = 8192
table_open_cache = 16384
sort_buffer_size = 16M
_ache_bache_yquem_pache_x 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_深度 = 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
Off hand: 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