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

MySQL 配置文件 my.cnf 核心參數深度解析與性能優化實戰

     編輯:MySQL 資料庫相關知識

硬件基線(本文調優基準)

  • CPU:2 × 4 核 Intel Xeon 2.0 GHz(8 邏輯核心,含超線程)
  • 內存:4 GB DDR
  • 磁盤:SCSI 146 GB
  • 業務:論壇,在線 5000~13000,高併發讀寫

核心參數配置與解析

基礎與網絡

[mysqld]
port = 3306
server_id = 1
socket = /tmp/mysql.sock
skip-name-resolve          # 禁用 DNS 解析,加速連接,授權需用 IP
back_log = 500             # 監聽隊列長度,防連接風暴

內存分配核心區(總量 ≤ 物理內存 70-80%)

參數配置值計算邏輯與說明
key_buffer_size384MMyISAM 索引緩存。InnoDB 主場景可降至 64M。監控 Key_reads/Key_read_requests < 1%
innodb_buffer_pool_size2GInnoDB 核心,建議物理內存 50-70%。本機 4G 留 1G 給 OS/其他
innodb_log_buffer_size16M事務日志緩存,大事務場景調大
sort_buffer_size4M每連接獨佔!100 連接 = 400M。不可盲目調大
read_buffer_size4M每連接獨佔,全表掃描時使用
join_buffer_size8M每連接獨佔,無索引 JOIN 時使用
tmp_table_size256M內存臨時表上限,超過轉磁盤。配合 max_heap_table_size
max_heap_table_size256M用戶創建 MEMORY 表上限

併發與連接控制

max_connections = 1000           # 最大連接數,配合應用連接池
thread_cache_size = 64           # 線程緩存,降低創建銷毀開銷
thread_concurrency = 8           # 邏輯 CPU 核心數 × 2 (8核=16? 實測 8 最優)
wait_timeout = 10                # 空閒連接超時釋放,防泄漏
max_connect_errors = 10000000    # 防暴力破解封禁

查詢緩存(5.7 廢用,8.0 移除)

query_cache_size = 64M
query_cache_type = 1
# 監控:Qcache_lowmem_prunes 大→緩存不足;Qcache_hits 小→命中率低可關閉

InnoDB 核心調優

innodb_flush_log_at_trx_commit = 1    # 雙1模式,最安全
sync_binlog = 1                       # Binlog 同步刷盤
innodb_file_per_table = 1             # 獨立表空間,便於管理
innodb_read_io_threads = 8            # 讀 IO 線程
innodb_write_io_threads = 8           # 寫 IO 線程
innodb_io_capacity = 2000             # SSD 可調 5000-10000
innodb_lock_wait_timeout = 50         # 鎖等待超時

慢查詢與審計


slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1                   # 1 秒閾值
log_queries_not_using_indexes = 1     # 記錄無索引查詢
# log_output = FILE                   # 5.7+ 支持 TABLE

狀態監控指標對照表

指標健康閾值異常調優方向
Key_reads / Key_read_requests< 1%增大 key_buffer_size
Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests< 1%增大 innodb_buffer_pool_size
Created_tmp_disk_tables / Created_tmp_tables< 10%增大 tmp_table_size / 優化 SQL 避免臨時表
Threads_created / Connections< 5%增大 thread_cache_size
Table_locks_waited / Table_locks_immediate< 1%優化索引/遷移 InnoDB/調整 concurrent_insert
Handler_read_rnd_next / Com_select< 1000全表掃描嚴重,加索引/改 SQL

優化避坑原則

  1. 一參一調:單次變更一個參數,觀察負載測試對比
  2. 內存總量紅線:所有 buffer 總和 ≤ 物理內存 80%,預留 OS 緩存空間
  3. 每連接參數慎重:sort/read/join_buffer × max_connections 可能超內存
  4. 業務驅動調優:針對慢查詢 TOP 10 優化 SQL/索引,效果遠超參數微調
  5. 版本差異:5.7 移除 query_cache,8.0 移除 query_cache 及部分舊參數

配置文件分層管理

/etc/my.cnf                    # 全局實例級
/usr/local/mysql/etc/my.cnf    # 實例級(多實例部署)
~/.my.cnf                      # 用戶級客戶端默認

參數調優是科學實驗:建立基線 → 單變量假設 → 壓測驗證 → 監控確認 → 固化配置。以上參數為 4G 內存高併發論壇實戰驗證值,不同硬件/業務需按公式重新計算。

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