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

MySQL 效能調優十大關鍵參數深度解析:max_connections、buffer、cache、timeout 全攻略

     編輯:MySQL 資料庫相關知識

參數調整原則

  • 修改 /etc/my.cnf [mysqld] 區段,重啟生效。
  • 「動態參數」可 SET GLOBAL 即時生效,但重啟失效,必須寫入配置檔。
  • 根據硬體(特別是記憶體)與負載特徵調整,切勿盲目複製。

十大關鍵參數詳細解析

參數預設值建議值作用與調優指引
max_connections151 (5.7+)500~3000最大同時連線數。過大消耗記憶體(每連線 ~256KB+),配合 thread_cache_size、back_log。監控 Max_used_connections。
innodb_buffer_pool_size128M物理記憶體 60~70%InnoDB 核心快取(資料+索引+鎖+插入緩衝)。單一最重要參數。專用 DB 服務器可設 70-80%。
key_buffer_size8MMyISAM 為主:1~4G
InnoDB 為主:16~64M
MyISAM 索引快取。純 InnoDB 環境僅需給系統表、臨時表保留少量。
sort_buffer_size256K2M~8M每 Session 排序快取(ORDER BY/GROUP BY/DISTINCT)。過大導致 OOM,建議 Session 級動態調大:SET SESSION sort_buffer_size=8M。
read_buffer_size128K1M~4M全表掃描序列讀取快取。大表全掃描時調大。
read_rnd_buffer_size256K1M~4M排序後隨機讀取快取(ORDER BY 滿足索引時)。
join_buffer_size256K2M~8M無索引 JOIN 全表掃描快取。優先加索引,不足時調大。
table_open_cache2000 (5.7+)5000~20000表快取數(含 .frm/.ibd)。監控 Opened_tables 成長快則調大。受限於 open_files_limit。
thread_cache_size自動 (5.7+)100~500線程快取,減少創建銷毀開銷。監控 Threads_created / Connections 比率。
query_cache_size0 (5.7+ 預設關閉)0 (建議關閉)查詢快取在高併發寫入下鎖爭用嚴重,5.7 廢棄,8.0 移除。改用 Redis/應用層快取。

連線與超時參數

參數預設建議說明
wait_timeout28800 (8h)3600~7200非互動連線空閒斷開。應用層連線池需設 validationQuery、testWhileIdle 配合。
interactive_timeout288003600~7200互動客戶端(mysql 命令列)空閒斷開。
max_allowed_packet4M/64M64M~512M單封包最大值,防大 SQL/BLOB 截斷。
back_log80500~1000TCP 連線請求隊列,突發連線時緩衝。

InnoDB 專屬核心參數(補充)

innodb_log_file_size = 256M        # Redo log 大小,大 = 寫入快、恢復慢
innodb_flush_log_at_trx_commit = 1 # 1=最安全, 2=折衷, 0=最快但可能丟 1 秒
innodb_file_per_table = ON         # 獨立表空間,支援 DROP TABLE 回收空間
innodb_io_capacity = 2000          # SSD 可設 5000-10000
innodb_read_io_threads = 8
innodb_write_io_threads = 8

監控驗證指標

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';      -- 物理讀,應極低
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests'; -- 邏輯讀
-- 命中率 = 1 - reads/requests > 99.9%

SHOW GLOBAL STATUS LIKE 'Sort_merge_passes';             -- 磁碟排序次數,>0 調大 sort_buffer
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables';       -- 磁碟臨時表,>0 調大 tmp_table_size/max_heap_table_size
SHOW GLOBAL STATUS LIKE 'Table_locks_waited';            -- 表鎖等待,MyISAM 關注

配置範本(16GB 記憶體專用 DB)

[mysqld]
innodb_buffer_pool_size = 10G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_io_capacity = 5000
max_connections = 1000
thread_cache_size = 200
table_open_cache = 10000
open_files_limit = 65535
sort_buffer_size = 4M
read_buffer_size = 2M
join_buffer_size = 4M
max_allowed_packet = 64M
wait_timeout = 3600
interactive_timeout = 3600
slow_query_log = 1
long_query_time = 0.5

參數調優是系統工程,以監控指標為羅盤,小步快跑、持續迭代。

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