| 參數 | 作用 | 調優建議 |
|---|---|---|
back_log | TCP 連接請求隊列長度 | 高併發連接場景調大(如 512),受 OS somaxconn 限制 |
join_buffer_size | 全表掃描 Join 緩衝 | 優先加索引;無法加索引時每 Join 分配,會話級,慎設大(256K-2M) |
key_buffer_size | MyISAM 索引緩存 | 專用 MyISAM 實例設物理內存 25%,InnoDB 為主則設小(32M) |
sort_buffer_size | 排序緩衝 | 會話級,ORDER BY/GROUP BY 多設 2M-8M |
read_rnd_buffer_size | 排序後按序讀取緩衝 | 會話級,大查詢時會話級調大(1M-4M) |
interactive_timeout/wait_timeout | 空閒連接超時 | 應用池配合設 300-600 秒,避免連接泄漏 |
max_allowed_packet | 單包/字符串最大長度 | 含大 BLOB/長文本必須調大(64M-1G),協議上限 1G |
query_cache_size | 查詢緩存總量 | 5.7 設 0 關閉;8.0 已移除 |
table_open_cache | 表緩存數量 | max_connections * 平均每連接表數,典型 2048-8192 |
thread_cache_size | 線程緩存 | 32-128,觀察 Threads_created 趨勢 |
| 參數 | 建議值 | 說明 |
|---|---|---|
innodb_buffer_pool_size | 物理內存 70-80% | 數據+索引熱點全在這,InnoDB 性能核心 |
innodb_log_file_size | 256M-1G | 大寫入場景調大,恢復時間變長,總大小 < 512G |
innodb_log_buffer_size | 16M-64M | 大事務/Blob 多調大,每秒刷盤一次 |
innodb_flush_log_at_trx_commit | 2 (推薦) / 1 | 1=最安全(每提交刷盤);2=寫 OS Cache(每秒刷盤),性能提升 2-10 倍,僅 OS Crash 丟 1 秒 |
innodb_file_per_table | ON | 獨立表空間,支持 OPTIMIZE TABLE 回收空間 |
innodb_read_io_threads/write_io_threads | 4-16 | 高 IOPS 設備(NVMe)可調大 |
-- 檢查碎片
SELECT TABLE_NAME, Data_free/1024/1024 AS Frag_MB
FROM information_schema.TABLES
WHERE TABLE_SCHEMA='mydb' AND Data_free > 100*1024*1024;
-- 整理(InnoDB 重建表)
OPTIMIZE TABLE tbl_name;
-- 等效於
ALTER TABLE tbl_name ENGINE=InnoDB;
觸發場景:大量 DELETE/UPDATE 導致頁分裂、空洞;Data_free 超過表大小 10% 時建議整理。
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = ON
mysqldumpslow -s t -t 20 slow.log 定位 Top SQLEXPLAIN SELECT ... 檢查 type、key、rows、ExtraWHERE/JOIN/ORDER BY 列idx_name(name(10))-- 1. 創建專用緩存池
SET GLOBAL hot_index_pool = 20*1024*1024; -- 20 MB
-- my.cnf 永久:hot_index_pool=20M
-- 2. 綁定表索引到池
CACHE INDEX wp_posts IN hot_index_pool;
-- 3. 預熱載入
LOAD INDEX INTO CACHE wp_posts;
適用於:核心業務表、只讀報表表、啟動後需秒級響應的場景。
# /etc/fstab
/dev/sda6 /var ext4 defaults,noatime 0 2
# 立即生效
mount -o remount,noatime /var
消除每次讀取觸發的 inode 寫入,SSD/HDD 均有收益。
SHOW STATUS LIKE 'Qcache%';
Qcache_free_blocks:碎片塊數,FLUSH QUERY CACHE 整理Qcache_lowmem_prunes:因內存不足淘汰次數,持續增長 → 擴容或關閉Qcache_not_cached:不可緩存查詢(含 NOW()、RAND()、非 SELECT)Qcache_free_blocks / Qcache_total_blocks > 20% 需整理(query_cache_size - Qcache_free_memory) / query_cache_size 25%-80% 區間健康SHOW GLOBAL STATUS/VARIABLES 導出快照sysbench oltp_read_write 模擬真實負載/etc/my.cnf,滾動重啟生效