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

MySQL 啟動參數詳細說明與優化調優指南

     編輯:MySQL 資料庫相關知識

連線與網路參數

參數說明建議值
back_logTCP 監聽隊列長度,短期大量連線衝擊時緩衝預設 80,高併發調大至 500-1000,受 OS somaxconn 限制
connect_timeout握手階段等待封包秒數10-30
max_connections最大並發連線數按業務評估,配合 open_files_limit
max_connect_errors主機連線錯誤閾值,超過封鎖,FLUSH HOSTS 解封10000+
net_buffer_length通訊緩衝區初始大小,自動擴展至 max_allowed_packet16KB-64KB,極少記憶體環境調小
max_allowed_packet單封包最大值,含 BLOB/長 SQL16M-64M (應用層同步設定)

超時參數

參數說明建議值
wait_timeout非互動連線空閒斷開秒數60-300 (應用層連線池回收前)
interactive_timeout互動客戶端 (mysql CLI) 空閒斷開28800 (8小時)
delayed_insert_timeoutINSERT DELAYED 執行緒等待秒數300

緩衝區與記憶體參數 (全域)

參數用途建議
key_buffer_sizeMyISAM 索引塊緩存純 MyISAM 30-40% 記憶體,混合 16-32MB
table_cache所有線程共享的打開表快取百表 1024,千表 5000+,關聯 open_files_limit
thread_cache_size線程快取,減少建銷開銷16-64,觀察 Threads_created
query_cache_size查詢結果快取 (5.7 棄用)唯讀密集 32-512M,寫入頻繁關閉

緩衝區參數 (會話級,按需分配)

參數用途建議
sort_buffer_sizeORDER BY/GROUP BY 排序256K-2M,複雜排序適當加大
read_buffer_size / read_rnd_buffer_size全表掃描/隨機讀取128K-256K
join_buffer_size無索引 JOIN (全表掃描關聯)256K-1M,優先加索引避免用到
tmp_table_size / max_heap_table_size內部臨時表 (HEAP) 最大值,超過轉 MyISAM 磁碟表16M-64M,GROUP BY/DISTINCT 大結果集調大
myisam_sort_buffer_sizeREPAIR TABLE / ALTER TABLE 索引重建8M-64M

InnoDB 專用參數 (關鍵見 74921)

  • innodb_buffer_pool_size
  • innodb_log_file_size / innodb_log_files_in_group
  • innodb_flush_log_at_trx_commit
  • innodb_flush_method = O_DIRECT
  • innodb_file_per_table = ON
  • innodb_io_capacity (SSD 5000-20000)

啟動參數生效方式

  1. 配置文件 my.cnf [mysqld] 區塊 → 重啟服務 (永久)
  2. 命令列 mysqld --key_buffer_size=32M --table_cache=128 → 僅當前實例
  3. 運行時動態:SET GLOBAL sort_buffer_size=4M (部分參數支援)

驗證參數生效

mysqld --key_buffer_size=32M --help | grep key_buffer_size
SHOW GLOBAL VARIABLES LIKE 'key_buffer_size';

不同硬體配置範例

# 大記憶體、多表、中等併發
safe_mysqld -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M

# 少記憶體、大量連線
safe_mysqld -O key_buffer=512K -O sort_buffer=100K -O record_buffer=100K

# 極少資源嵌入式
safe_mysqld -O key_buffer=512K -O sort_buffer=16K -O table_cache=32 -O record_buffer=8K -O net_buffer=1K

調優原則

  1. 先調全域核心參數 (Buffer Pool、Log、快取)
  2. 再調會話級參數,針對具體慢查詢
  3. 每次單一變更,觀測指標 (QPS、延遲、鎖等待、磁碟 IO)
  4. 善用 mysqld --help --verbose 查看當前編譯預設值與範圍
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved