隨著併發增長,1GB 記憶體伺服器出現卡頓、甚至每日死機。本文記錄實戰優化歷程:調整核心參數、關閉非必要日誌、優化索引、監控關鍵狀態值,最終穩定服務。
依記憶體選官方範本:my-medium.cnf (128-256MB)、my-large.cnf (512MB-1GB)。複製至 /etc/my.cnf 後重點調整三大參數:
| 參數 | 適用引擎 | 監控指標 | 經驗值 |
|---|---|---|---|
key_buffer_size | MyISAM | Key_reads / Key_read_requests | < 0.1% (1:1000 更佳) |
query_cache_size | 通用 | Qcache_hits / (Qcache_hits+Qcache_inserts) | 高寫入建議關閉 (MySQL 8.0 已移除) |
table_cache / table_open_cache | 通用 | Open_tables / Opened_tables | >= 85% |
key_buffer_size = 128M
Key_read_requests = 650,759,289
Key_reads = 79,112
-- 未命中率 = 0.012% (優)
Open_tables = 256
Opened_tables = 9,046
-- 20 天內 Opened_tables 增長極慢,table_cache=256 足夠
log-bin 節省 I/O。警告:關閉後無法 PITR,需加強邏輯備份。long_query_time=10 (或 1-2 秒),log-queries-not-using-indexes 開啟。[mysqld]
sort_buffer_size = 1M
max_connections = 120
wait_timeout = 120
interactive_timeout = 120
back_log = 100
read_buffer_size = 1M
thread_cache = 32
thread_concurrency = 4 # 建議 CPU 核心數 x 2
參數說明:
back_log:TCP 監聽隊列,高併發突發時避免連線拒絕,受 OS somaxconn 限制。thread_concurrency:Solaris 專用,Linux 忽略。EXPLAIN 找出 type=ALL、Using filesort、Using temporary。ANALYZE TABLE 更新統計資訊,避免優化器誤判。pt-index-usage / sys.schema_unused_indexes。推薦使用 phpMyAdmin 「狀態」頁面,圖形化呈現上述關鍵指標趨勢,適合快速巡檢。
SHOW GLOBAL STATUS。