首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 調優基礎(四):Linux 磁碟 I/O 子系統深度解析與優化

     編輯:MySQL 綜合教學

MySQL 調優基礎(四):Linux 磁碟 I/O 子系統深度解析與優化

1. I/O 處理四層架構

Linux I/O 子系統架構圖

  1. 檔案系統快取層: 資料經 Page Cache,修改後由 pdflush 依 vm.dirty_background_ratio/vm.dirty_ratio 刷回磁碟。Bio 結構合併相鄰 Block 優化寫入
  2. Block Layer(I/O 排程器): 所有進程 I/O 請求在此排隊調度,關鍵調優點
    • Anticipatory:適合單碟桌面系統
    • CFQ(預設):完全公平排隊,**極不適合資料庫**(DB 進程只能獲得公平份額)
    • Deadline:依截止時間調度,近即時響應,吞吐佳,**資料庫磁碟首選**
    • NOOP:單純 FIFO,不合併相鄰 I/O,**SSD 專用**(隨機/順序無差異,省 CPU)
  3. 磁碟驅動層: 順序讀易成帶寬瓶頸
  4. 實體磁碟: 隨機讀易成瓶頸,優化靠 RAID 或上 SSD

2. I/O 排程器查看與修改

# 臨時修改(立即生效,重啟失效)
cat /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler

# 永久修改(需重啟)
# 編輯 /boot/grub/menu.lst,kernel 行加入 elevator=deadline
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

3. I/O 瓶頸偵測工具實戰

iostat 核心指標

iostat -d -m -x 2 3
# -d: 僅磁碟  -m: MB單位  -x: 擴展統計  2 3: 每2秒取樣3次

iostat 輸出範例

欄位含義異常閾值參考
tps每秒 I/O 請求數視磁碟規格而定
r/s, w/s每秒讀/寫次數—
rMB/s, wMB/s每秒讀/寫 MB 數接近磁碟頂規
await平均 I/O 響應時間(ms),含佇列+服務> 10ms 偏高,> 20ms 嚴重
avgqu-sz平均 I/O 佇列長度持續 > 10 疑似瓶頸
%util裝置忙碌百分比接近 100% 表示飽和(多磁碟 RAID 除外)

同時觀察 CPU %iowait 高企、avgqu-sz 大、await 高、%util 高,綜合判斷磁碟瓶頸。

vmstat / sar -b / iotop 輔助分析

  • vmstat 2:bi(讀入 Block/s)、bo(寫出 Block/s)
  • sar -b 2 3:tps/rtps/wtps/bread/s/bwrtn/s
  • iotop:類 top 介面,依 I/O 排序,**快速定位佔用 I/O 最高的進程/執行緒**
    • 左右鍵切換排序欄位
    • p 切換進程/執行緒檢視
    • r 反轉排序
    • iotop -k -u mysql 專看 mysql 用戶

iotop 監控 mysqld

4. 實例分析與優化策略

案例:tps ~400、rMB/s ~5、wMB/s ~1、await < 5ms、%util > 80% → 響應正常但已繁忙。

四大優化方向

  1. 選對 I/O 排程器: SSD 用 NOOP,HDD 用 Deadline
  2. 架構層面: Master-Slave 讀寫分離分散 I/O 壓力
  3. 記憶體: 增加 RAM 擴大 Page Cache,減少物理 I/O
  4. 檔案系統: 掛載加 noatime,nodiratime,選用 XFS 提升 TPS
核心原則: 優化前必須搞清是隨機 I/O 多(上 RAID/SSD)還是順序 I/O 多(換更快控制器/帶寬),對症下藥。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved