日訪 20 萬+ 站點,默認參數必成瓶頸。本文系統講解核心變量含義、調優原則,提供三類內存配置模板。
mysqld --help | grep -A1 'Possible variables'
mysqladmin variables
緩存/長度/棧大小單位:字節,支持 K/M 後綴(16M = 16MB)。
| 變量 | 默認 | 作用 | 調優建議 |
|---|---|---|---|
| back_log | 50 | 連接請求隊列長度 | 高併發調大至 200-500,受 OS 限制 |
| key_buffer_size | 8MB | MyISAM 索引緩存 | 4GB 內存建議 256-384M |
| max_allowed_packet | 1MB | 單包最大長度 | 存大 BLOB 必增至 16M+ |
| max_connections | 100 | 最大連接數 | 應用連接池峰值 + 余量 |
| sort_buffer_size | 2MB | 排序緩存(每連接) | 4GB 內存建議 4-8M |
| read_buffer_size | 128KB | 順序掃描緩存(每連接) | 4GB 內存建議 2-4M |
| table_cache | 64 | 表描述符緩存 | 1GB 內存建議 256-512 |
| thread_cache_size | 0 | 線程緩存數量 | 按內存 8/16/32/64 |
| query_cache_size | 0 | 查詢結果緩存 | 讀密集建議 32-64M |
| tmp_table_size | 1MB | 內存臨時表上限 | 複雜 GROUP BY 建議 64-256M |
| innodb_buffer_pool_size | 8MB | InnoDB 數據索引緩存 | 核心 物理內存 60-80% |
| innodb_flush_log_at_trx_commit | 1 | 事務日志刷盤策略 | 1=最安全,2=高性能,0=最高風險 |
key_buffer_size = 256M
table_cache = 256
sort_buffer_size = 4M
read_buffer_size = 1M
thread_cache_size = 64
query_cache_size = 64M
key_buffer_size = 512K
sort_buffer_size = 100K
read_buffer_size = 100K
table_cache = 32
net_buffer_length = 1K
key_buffer_size = 512K
sort_buffer_size = 16K
table_cache = 32
read_buffer_size = 8K
net_buffer_length = 1K
mysqld -O key_buffer=32m --help # --help 必須最後,輸出含實際生效值
SHOW GLOBAL STATUS 核心指標 24h+