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

Linux 高負載下 MySQL 徹底優化實戰:關鍵參數調優、狀態監控與架構優化

     編輯:MySQL 資料庫相關知識

優化前現狀

1GB 內存服務器,高併發訪問導致頻繁死機/卡頓。MySQL 伸縮性強,合理配置可在有限內存下榨取最大性能。

配置文件選擇與生效

  • 模板:/usr/local/mysql/share/mysql/my-{huge,large,medium,small}.cnf
  • 生產生效:複製為 /etc/my.cnf 並修改
  • 查看當前運行值:mysqladmin variables extended-status -u root -p

三大核心參數深度調優

1. key_buffer_size(MyISAM 專屬)

  • 作用:索引塊緩存,決定索引讀取速度
  • 監控指標:Key_read_requests / Key_reads 比率
  • 健康標準:≥ 1:100,理想 1:1000+
  • 案例:128MB 設置,請求 6.5億,讀盤 7.9萬,比 1:8000 極佳
  • 估算法:統計所有 MyISAM 表索引大小之和(案例約 125MB)

2. query_cache_size(查詢緩存,8.0 已移除)

  • 原理:缓存 SELECT 文本+結果,區分大小寫,手冊稱最高提效 238%
  • 關鍵狀態:
    • Qcache_hits:命中數,大說明重複查詢多,宜增大緩存
    • Qcache_lowmem_prunes:因內存不足清理數,大說明緩存不夠
    • Qcache_free_blocks:碎片塊數,大說明碎片化嚴重
    • Qcache_not_cached:未緩存查詢數(含 SQL_NO_CACHE、非確定性函數等)
  • 案例:32MB 設置,命中 7900 萬,低內存清理 61 萬,空閒 18MB,碎片塊 5328 → 建議增至 64-128MB
  • query_cache_type=1(ON),SQL_NO_CACHE 可單條禁用

3. table_cache(表緩存,5.1+ 更名 table_open_cache)

  • 作用:打開表文件描述符緩存,避免頻繁 open/close
  • 監控:Open_tables == table_cache 且 Opened_tables 持續增長 → 需增大
  • 案例:256 設置,運行 20 天 Opened_tables 僅 9046 → 無需再增大(若 6 小時達此值則需調整)
  • 上限受限於系統 ulimit -n,盲目增大導致「Too many open files」
  • 1GB 內存機器建議 128-256

其他關鍵參數設置


# 關閉二進制日志(非主庫/無需 PITR/無主從)
# log-bin

# 慢查詢日志(定位問題 SQL)
log_slow_queries = /var/log/mysql/slow.log
long_query_time = 10
log-queries-not-using-indexes

# 連接與線程
max_connections = 120           # 並發上限,超限自動拒絕保護服務器
wait_timeout = 120              # 閒置連接超時釋放
interactive_timeout = 120
back_log = 100                  # TCP 監聽隊列長度,爆發連接緩衝
thread_cache_size = 32          # 緩存線程,案例 20 天僅創建 400 線程(前每天上千)
thread_concurrency = 4          # CPU 核心數 x2(舊版參數,新版無效)

# 會話級緩衝(默認通常足夠,大查詢會話級動態調大)
sort_buffer_size = 1M
read_buffer_size = 1M

# 引擎精簡
skip-innodb                     # 不用 InnoDB 時關閉,節省內存/CPU

參數詳解補充

back_log
監聽隊列長度,受 OS somaxconn 限制,僅應對極短時間連接風暴。
thread_cache_size
緩存空閒線程對象,顯著減少 Threads_created 增長,高併發短連接場景必調。
thread_concurrency
舊版參數(LinuxThreads 時代),NPTL 下無效,保留兼容。
skip-innodb
純 MyISAM 部署可關閉 InnoDB 節省資源,5.5+ 默認 InnoDB 需 default-storage-engine=MyISAM 配合。

優化方法論總結

  1. 基線測量:記錄調優前關鍵指標(QPS、延遲、內存、連接數、慢查詢數)
  2. 單變量調整:每次調一個參數,觀察負載測試/生產流量下的變化
  3. 狀態驅動:以 SHOW GLOBAL STATUS 計數器為依據,而非經驗拍腦袋
  4. 業務優先:優化慢查詢、加索引、分表分庫收益遠超參數微調
  5. 持續迭代:業務增長/變化需定期複盤配置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved