DB運行產生太多的磁盤IO的話,性能肯定會受到影響。可以借助zabbix這樣的工具進行磁 盤IO的監測,或 者自己動手都可以。
我們可以從proc/diskstats中直接獲取信息:
7 3 loop3 0 0 0 0 0 0 0 0 0 0 0 7 4 loop4 0 0 0 0 0 0 0 0 0 0 0 7 5 loop5 0 0 0 0 0 0 0 0 0 0 0 7 6 loop6 0 0 0 0 0 0 0 0 0 0 0 7 7 loop7 0 0 0 0 0 0 0 0 0 0 0 ..... 8 0 sda 16140 67741 1740112 1453724 16858 18744 1043336 390704 0 173612 1844580 8 1 sda1 176 138 1468 1160 0 0 0 0 0 1160 1160 8 2 sda2 164 486 1300 1556 0 0 0 0 0 1556 1556
sda為整個硬盤的統計信息
sda1為第一個分區的統計信息
sda2為第 二個分區的統計 信息。
信息依次為:
1、major 主設備號
2、minor 磁盤次設備號
3、name 磁盤的設備名
4、rio 讀請求總數
5、rmerge 合並的讀請 求總數
6 、rset 讀扇區總數
7、讀數據花費的時間,單位ms
8、wio寫請求總數
9、wmerge 合並 的寫請求總數
10、wset 寫扇區總數
11、寫數據花費的時間
12、現在 正在進行的IO數 等於IO隊列中請求數
13、系統真正花費在IO上的時間,減去重復等待時間
14 、系統花費在IO 上花費的時間。
要計算某塊磁盤的IOPS的話,只需要將第4列和第8列的值相加。
監控代碼 :
#!/bin/bash uprio=0 upwio=0 while true do rio=$(grep '\bsda\b' /proc/diskstats | awk '{print $4}') wio=$(grep '\bsda\b' /proc/diskstats | awk '{print $8}') Real_rio=$[ $rio - $uprio ] Real_wio=$[ $wio - $upwio ] Iops=$[$Real_rio + $Real_wio] echo "Iops:$Iops Read : $Real_rio Write: $Real_wio" uprio=$rio upwio=$wio sleep 1 done
監控輸出:
Iops:35373 Read : 16792 Write: 18581 Iops:9 Read : 0 Write: 9 Iops:0 Read : 0 Write: 0 Iops:0 Read : 0 Write: 0 Iops:0 Read : 0 Write: 0 Iops:5 Read : 0 Write: 5 Iops:43 Read : 0 Write: 43
對於DB服務器 可以考慮將日志文件和數據文件放到不同的磁盤,這樣就可以分別 監控 日志和 數 據的IOPS。這個可以參考:http://keeland.org/?p=45
對於DB所使用的磁盤,我們還 應該監測其IO利 用率,可以通過IOSTAT 進行。
返回欄目頁:http://www.bianceng.cn/OS/Linux/