/etc/my.cnf [mysqld] 區段,重啟生效。SET GLOBAL 即時生效,但重啟失效,必須寫入配置檔。| 參數 | 預設值 | 建議值 | 作用與調優指引 |
|---|---|---|---|
| max_connections | 151 (5.7+) | 500~3000 | 最大同時連線數。過大消耗記憶體(每連線 ~256KB+),配合 thread_cache_size、back_log。監控 Max_used_connections。 |
| innodb_buffer_pool_size | 128M | 物理記憶體 60~70% | InnoDB 核心快取(資料+索引+鎖+插入緩衝)。單一最重要參數。專用 DB 服務器可設 70-80%。 |
| key_buffer_size | 8M | MyISAM 為主:1~4G InnoDB 為主:16~64M | MyISAM 索引快取。純 InnoDB 環境僅需給系統表、臨時表保留少量。 |
| sort_buffer_size | 256K | 2M~8M | 每 Session 排序快取(ORDER BY/GROUP BY/DISTINCT)。過大導致 OOM,建議 Session 級動態調大:SET SESSION sort_buffer_size=8M。 |
| read_buffer_size | 128K | 1M~4M | 全表掃描序列讀取快取。大表全掃描時調大。 |
| read_rnd_buffer_size | 256K | 1M~4M | 排序後隨機讀取快取(ORDER BY 滿足索引時)。 |
| join_buffer_size | 256K | 2M~8M | 無索引 JOIN 全表掃描快取。優先加索引,不足時調大。 |
| table_open_cache | 2000 (5.7+) | 5000~20000 | 表快取數(含 .frm/.ibd)。監控 Opened_tables 成長快則調大。受限於 open_files_limit。 |
| thread_cache_size | 自動 (5.7+) | 100~500 | 線程快取,減少創建銷毀開銷。監控 Threads_created / Connections 比率。 |
| query_cache_size | 0 (5.7+ 預設關閉) | 0 (建議關閉) | 查詢快取在高併發寫入下鎖爭用嚴重,5.7 廢棄,8.0 移除。改用 Redis/應用層快取。 |
| 參數 | 預設 | 建議 | 說明 |
|---|---|---|---|
wait_timeout | 28800 (8h) | 3600~7200 | 非互動連線空閒斷開。應用層連線池需設 validationQuery、testWhileIdle 配合。 |
interactive_timeout | 28800 | 3600~7200 | 互動客戶端(mysql 命令列)空閒斷開。 |
max_allowed_packet | 4M/64M | 64M~512M | 單封包最大值,防大 SQL/BLOB 截斷。 |
back_log | 80 | 500~1000 | TCP 連線請求隊列,突發連線時緩衝。 |
innodb_log_file_size = 256M # Redo log 大小,大 = 寫入快、恢復慢
innodb_flush_log_at_trx_commit = 1 # 1=最安全, 2=折衷, 0=最快但可能丟 1 秒
innodb_file_per_table = ON # 獨立表空間,支援 DROP TABLE 回收空間
innodb_io_capacity = 2000 # SSD 可設 5000-10000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads'; -- 物理讀,應極低
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests'; -- 邏輯讀
-- 命中率 = 1 - reads/requests > 99.9%
SHOW GLOBAL STATUS LIKE 'Sort_merge_passes'; -- 磁碟排序次數,>0 調大 sort_buffer
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables'; -- 磁碟臨時表,>0 調大 tmp_table_size/max_heap_table_size
SHOW GLOBAL STATUS LIKE 'Table_locks_waited'; -- 表鎖等待,MyISAM 關注
[mysqld]
innodb_buffer_pool_size = 10G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_io_capacity = 5000
max_connections = 1000
thread_cache_size = 200
table_open_cache = 10000
open_files_limit = 65535
sort_buffer_size = 4M
read_buffer_size = 2M
join_buffer_size = 4M
max_allowed_packet = 64M
wait_timeout = 3600
interactive_timeout = 3600
slow_query_log = 1
long_query_time = 0.5
參數調優是系統工程,以監控指標為羅盤,小步快跑、持續迭代。