InnoDB 核心參數
[mysqld]
# 內部記憶體池 (資料字典、鎖資訊)
innodb_additional_mem_pool_size = 16M
# 緩衝池:建議實體記憶體 70-80%
innodb_buffer_pool_size = 12G
# 表空間檔案路徑與大小
innodb_data_file_path = ibdata1:18M;ibdata2:1000M:autoextend
# 檔案 I/O 執行緒
innodb_file_io_threads = 4
# 並發執行緒數 (0=不限制,建議 2x CPU 核心)
innodb_thread_concurrency = 16
# Redo Log 檔案大小
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
# Log Buffer
innodb_log_buffer_size = 8M
# 提交刷盤策略:2=高效能 (僅寫 OS cache,每秒 fsync)
innodb_flush_log_at_trx_commit = 2
# 直接 I/O 繞過 OS cache
innodb_flush_method = O_DIRECT
# 髒頁比例上限
innodb_max_dirty_pages_pct = 90
# 鎖等待超時
innodb_lock_wait_timeout = 120
連線與執行緒快取
# 依實體記憶體:1G=8, 2G=16, 3G=32, >3G=64
thread_cache_size = 64
# 並發數 (建議 2x CPU 核心)
thread_concurrency = 8
查詢快取 (MySQL 5.7 以前)
query_cache_size = 256M
query_cache_limit = 2M
索引與讀取緩衝區
key_buffer_size = 128M
read_buffer_size = 4M
read_rnd_buffer_size = 16M
Binlog 管理
expire_logs_days = 10
binlog_format = MIXED
調優原則
- 先調
innodb_buffer_pool_size 最大化命中率。
innodb_flush_log_at_trx_commit=2 搭配 O_DIRECT 兼顧效能與相對安全。
- 監控
Key_reads/Key_read_requests < 0.01,調整 key_buffer_size。
- 慢查詢配合
long_query_time=1 + EXPLAIN 針對性加索引。
- 參數變更後必須重啟或動態生效驗證 (
SET GLOBAL 或 SHOW VARIABLES)。