首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

高併發 MySQL 核心參數調優實戰:從 back_log 到 thread_cache 的完整配置指南

     編輯:MySQL 資料庫相關知識

調優前提:硬體基線

測試環境:雙核 CPU、2GB 記憶體、SCSI 磁碟、日均 20 萬 PV。參數值需根據實際硬體(特別是記憶體)線性縮放。

核心參數詳細配置與原理

參數預設值調優值作用與調優邏輯
back_log 50 500 TCP 連接請求隊列長度。出現大量 unauthenticated user 時調大。受 OS somaxconn 限制(Linux 需同步調大 /proc/sys/net/core/somaxconn)。
interactive_timeout 28800 (8h) 7200 (2h) 互動式連線空閒斷開時間。縮短可釋放 Sleep 連線,減少佔用。
wait_timeout 28800 7200 非互動式連線空閒斷開。應用連線池需配合 validationQuery 或 testOnBorrow。
key_buffer_size 8 MB 400 MB MyISAM 索引塊快取。InnoDB 不用此參數。設為實體記憶體 25-30%,但留足 OS/InnoDB 空間。
max_connections 100 1024 最大並發連線。伴隨增加 open_files_limit (65535)。監控 Threads_connected / Max_used_connections。
read_buffer_size (record_buffer) 128 KB 16 MB 全表掃描/排序時每線程順序讀緩衝。大表報表查詢受益。總佔用 = 值 × max_connections,謹慎設大。
sort_buffer_size 2 MB 16 MB 每線程排序緩衡。ORDER BY/GROUP BY 無索引時用到。同樣乘以連線數,建議 2-8 MB 通常足夠。
table_open_cache (table_cache) 64 512 表緩存數量。監控 Opened_tables 增長快則調大。每表佔 2 個檔案描述符。
thread_cache_size 0 80 線程緩存池。減少頻繁創建/銷毀線程開銷。對比 Connections vs Threads_created,命中率 > 95% 為佳。
innodb_buffer_pool_size 128 MB 1.2 GB InnoDB 最關鍵參數。設為實體記憶體 60-80%(專用 DB 伺服器)。包含數據、索引、自適應哈希、鎖資訊等。
innodb_log_file_size 48 MB 256 MB Redo Log 大小。大則減少 checkpoint 頻率、提升寫入效能。修改需停服務、刪舊 logfile、重啟。
innodb_flush_log_at_trx_commit 1 1 (生產) / 2 (高寫入可接受秒級丟失) 1 = 完全 ACID,每提交刷盤。2 = 刷 OS 快取,效能大增但掉電丟 1 秒數據。

配置生效方式

# 修改 /etc/my.cnf (Linux) 或 my.ini (Windows)
[mysqld]
back_log = 500
key_buffer_size = 400M
innodb_buffer_pool_size = 1200M
# ... 其他參數

# 重啟生效
systemctl restart mysqld

部分參數支援動態調整:SET GLOBAL sort_buffer_size = 16777216;(僅影響新連線)。

監控驗證指標

-- 連線壓力
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW GLOBAL STATUS LIKE 'Aborted_connects';

-- 緩存命中
SHOW GLOBAL STATUS LIKE 'Key_read%';        -- MyISAM
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%'; -- InnoDB

-- 線程複用
SHOW GLOBAL STATUS LIKE 'Threads_created';
SHOW GLOBAL STATUS LIKE 'Connections';

避坑原則

  1. 單一變更、觀察效果:不要一次改十個參數。
  2. 以業務指標為準:QPS、RT、錯誤率,而非參數本身。
  3. 預留 OS 記憶體:InnoDB + MyISAM + 連線緩衝 + OS < 物理記憶體 90%。
  4. Swap 嚴禁:vm.swappiness = 1,寧可 OOM Killer 也不 Swap。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved