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

MySQL 排序狀態監控:Sort_merge_passes 解讀與 Sort_buffer_size 調優指南

     編輯:MySQL 資料庫相關知識

核心狀態變數

mysql> SHOW GLOBAL STATUS LIKE 'sort%';
+-------------------+------------+
| Variable_name     | Value      |
+-------------------+------------+
| Sort_merge_passes | 29         |
| Sort_range        | 37432840   |
| Sort_rows         | 9178691532 |
| Sort_scan         | 1860569    |
+-------------------+------------+

變數含義

  • Sort_merge_passes:排序過程中需將記憶體中暫存結果寫入磁碟臨時檔再合併的次數。數值越大代表排序越常落盤,效能越差。
  • Sort_range:使用索引範圍掃描進行排序的次數。
  • Sort_rows:總共排序的行數。
  • Sort_scan:全表掃描排序的次數(無索引可用)。

排序運作機制

  1. 嘗試在記憶體(大小由 `sort_buffer_size` 控制)中完成排序。
  2. 記憶體不足時,將部分排序結果寫入臨時檔(磁碟)。
  3. 全讀取完畢後,對臨時檔進行歸併排序(每次歸併增加 2 次 Sort_merge_passes)。

調優策略

參數建議風險
sort_buffer_size適度調大(如 2M→4M→8M),觀察 Sort_merge_passes 下降過大導致連線記憶體暴增,OOM 風險
read_rnd_buffer_size配合調大,加速歸併排序讀取同樣佔用連線記憶體
索引優化為 ORDER BY 欄位建立索引,避免 Sort_scan無風險,收益最大
避免 SELECT *只取需要欄位,減少排序行寬度無風險

監控儀表板建議

將 `Sort_merge_passes / Uptime` 納入監控告警,持續上升時觸發排查(可能是新上線慢查詢、參數誤調、資料量暴增)。

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