mysqld --key_buffer_size=256M[mysqld]段:持久化首選SET GLOBAL/SESSION var=val(即時生效,重啟失效)命名規範:下劃線_與連字符-等價(key_buffer_size = key-buffer-size)。舊版SET VARIABLE/-O語法已棄用。
| 維度 | GLOBAL | SESSION |
|---|---|---|
| 設置語法 | SET GLOBAL var=val; / SET @@GLOBAL.var=val |
SET SESSION var=val; / SET @@SESSION.var=val (默認) |
| 權限要求 | SUPER / SYSTEM_VARIABLES_ADMIN |
無特殊權限 |
| 影響範圍 | 新建連接繼承新值 | 僅當前連接 |
| 持久性 | 運行時有效,重啟失效 | 斷開連接失效 |
| 查看命令 | SHOW GLOBAL VARIABLES [LIKE 'pat'] |
SHOW SESSION VARIABLES [LIKE 'pat'] |
新連接初始化會話變量時複製當前全局值,之後兩者獨立。批量設置:SET SESSION var1=val1, var2=val2;
open_files_limit、系統ulimit -n同步調大,防「Too many connections」與「Can't open files」雙重限制somaxconn配合table_cache):表緩存數。監控Opened_tables增長快則調大(如4000),每佔用一個文件描述符0關閉,避免鎖競爭| 參數 | 推薦值 | 調優邏輯 |
|---|---|---|
| innodb_buffer_pool_size | 物理內存60-80% | 數據+索引+鎖+自適應哈希核心緩存,越大命中率越高,減少隨機IO |
| innodb_buffer_pool_instances | 1-8 (每實例≥1GB) | 減少全局鎖競爭,大內存多核必調 |
| innodb_log_file_size | 512M-2G | 大日志減少checkpoint頻率,平滑寫入峰值;總大小log_file_size * log_files_in_group < 4GB (舊版限制) |
| innodb_log_files_in_group | 2-4 | 循環寫入組數 |
| innodb_flush_log_at_trx_commit | 1 (金融級) / 2 (高性能) | 1=每提交刷盤最安全;2=刷OS緩存,OS crash可能丟1秒數據 |
| innodb_flush_method | O_DIRECT | 繞過OS雙重緩存,配合RAID卡BBWC最優 |
| innodb_file_per_table | ON | 獨立表空間,支持Online DDL、表級備份、空間回收 |
| innodb_io_capacity | SSD: 5000-20000 / HDD: 200-500 | 告知InnoDB底盤IOPS能力,控制背景刷頁、合併變更緩存速率 |
SET GLOBAL驗證效果/etc/my.cnfmysqld --help --verbose對比默認值審計配置漂移# 關鍵狀態變量監控
SHOW GLOBAL STATUS LIKE 'Threads_connected'; # 當前連接數
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads'; # 物理讀次數
SHOW GLOBAL STATUS LIKE 'Innodb_log_waits'; # 日志寫入等待
SHOW GLOBAL STATUS LIKE 'Table_open_cache_misses'; # 表緩存未命中
建立「參數-指標-閾值」映射表,實現數據驅動的持續調優。