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

MySQL 性能調優:my.cnf 核心參數詳解與最佳實踐配置

     編輯:MySQL 資料庫相關知識

十大核心參數深度解析

參數作用預設值調優建議
max_connections最大同時連線數100視業務併發調整,典型 500-2000;過大導致記憶體耗盡
key_buffer_sizeMyISAM 索引塊快取8MB專用 MyISAM 庫設為物理記憶體 20-30%;InnoDB 為主則適度縮小
table_open_cache表快取數量64配合 open_files_limit,典型 1024-4096
sort_buffer_size排序緩衝區(每連線)2MB4-16MB;過大導致高併發時記憶體暴增
read_buffer_size順序掃描緩衝區(每連線)128KB1-4MB;全表掃描多的業務可適度增大
read_rnd_buffer_size隨機讀緩衝區(每連線)256KB4-16MB;ORDER BY、GROUP BY 多時增大
join_buffer_size關聯查詢緩衝區(每連線)128KB2-8MB;大表 Join 且無索引時關鍵
thread_cache_size執行緒快取數量0-1050-200;減少頻繁創建/銷毀執行緒開銷
query_cache_size查詢快取大小0(關閉)5.7 建議關閉(有鎖爭用);8.0 已移除。唯讀多讀少寫場景可開 64-256MB
innodb_buffer_pool_sizeInnoDB 緩衝池(核心)128MB專用 DB 伺服器設為物理記憶體 70-80%,單最關鍵參數

InnoDB 專屬核心參數

參數建議值說明
innodb_log_file_size256MB-1GB紅寫日誌檔案大小,總量建議為 Buffer Pool 25-50%
innodb_log_buffer_size8-64MB日誌緩衝,大事務場景增大
innodb_flush_log_at_trx_commit11=最高安全(每提交刷盤);2=折衷(每秒刷盤);0=最高效(風險丟 1 秒資料)
innodb_flush_methodO_DIRECT避免雙重快取,Linux 下推薦
innodb_file_per_tableON獨立表空間,便於管理與回收空間
innodb_io_capacity2000-10000SSD 設高、HDD 設低,影響背景刷頁/合併速度
innodb_read_io_threads / innodb_write_io_threads4-16IO 執行緒數,高併發 IO 場景增大

兩套參考配置模板

方案 A:2GB 記憶體、多站點、抗壓型(高可用)

[mysqld]
# 連線與執行緒
max_connections=1024
thread_cache_size=120
back_log=500

# 快取與緩衝
table_open_cache=1024
key_buffer_size=256M
query_cache_size=64M
query_cache_type=0  # 5.7 建議關閉

# 讀寫緩衝
read_buffer_size=4M
read_rnd_buffer_size=16M
sort_buffer_size=32M
join_buffer_size=8M

# InnoDB 核心
innodb_buffer_pool_size=1536M  # 75%
innodb_log_file_size=256M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_io_capacity=2000
innodb_read_io_threads=8
innodb_write_io_threads=8

# 日誌與安全
slow_query_log=1
slow_query_log_file=slow.log
long_query_time=2
log-error=error.log
skip-name-resolve
expire_logs_days=7
max_binlog_size=100M

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

方案 B:通用平衡型(4-8GB 記憶體)

[mysqld]
max_connections=1000
thread_cache_size=100
table_open_cache=512
key_buffer_size=128M
tmp_table_size=128M
read_buffer_size=4M
read_rnd_buffer_size=16M
sort_buffer_size=32M
join_buffer_size=8M

innodb_buffer_pool_size=3G
innodb_log_file_size=512M
innodb_log_buffer_size=16M
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1
innodb_flush_method=O_DIRECT

slow_query_log=1
long_query_time=1
skip-name-resolve
character-set-server=utf8mb4

調優核心原則

  1. 測量優於猜測:用 SHOW GLOBAL STATUS、sys.schema、Performance Schema 觀察實際指標
  2. 單一變更:每次調整一個參數,觀察負載測試結果
  3. 記憶體預算:全域快取 + (每連線緩衝 × max_connections) ≤ 物理記憶體 85%
  4. 業務導向:讀多寫少調快取,寫多調 Redo Log/Flush 策略,Join 多調 Join Buffer
  5. 版本感知:5.7 關閉 Query Cache,8.0 移除 Query Cache、調整預設值

監控關鍵指標

-- 連線使用率
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW VARIABLES LIKE 'max_connections';

-- InnoDB 緩衝池命中率
SHOW ENGINE INNODB STATUS\G
-- 關注 Buffer pool hit rate,目標 > 99%

-- 慢查詢分析
SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;

-- 表快取命中
SHOW GLOBAL STATUS LIKE 'Open_tables';
SHOW GLOBAL STATUS LIKE 'Opened_tables';
-- Opened_tables / Uptime 過高需增大 table_open_cache

參數調優是持續迭代過程,無「萬能配置」,只有「適合當前業務與硬體的配置」。建議建立變更記錄與基準測試流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved