SQLIO 模拟随机或者顺序的方式来测试磁盘IO的性能
SQLIO
功能:磁盤IO壓力測試工具,SQLIO主要是模擬隨機或者順序的方式來測試磁盤IO的性能。
SQLIO Disk Subsystem Benchmark Tool工具下載地址:
http://www.microsoft.com/en-us/download/details.aspx?id=20163
RAID存儲技術在SQL Server服務器上已經被廣泛使用,對于存儲介質,有很多層面的硬件和固件,以及存儲管理軟件配置。如果設置不恰當,同樣的硬件最后的效能會差別很大。
?
微軟提供了一個工具叫SQLIO.exe,專門用作數據庫硬盤壓力測試。工具安裝好后,主要用到的是兩個文件。
1. Param.txt。
-----------------------------內容范例----------------------------
#c:\testfile.dat 2 0x00 100
d:\testfile.dat 4 0x00 1024
-----------------------------------------------------------------------
每行的格式及其參數的含義如下。
l <Path to test file>: 測試用的文件和它的完整路徑。
l <Number of threads (per test file)>: 測試同時使用多少個線程進行。建議和CPU數目一致。
l <Mask>: 始終使用0x0。
l <Size of test file in MB>: 測試文件的大小,最好是SAN(或RAID Controller)的讀寫緩存大小的2到4倍,A5機器一般是512MB,這里可以用1024MB。
如果某行要注釋掉,就在最前面加一個#號。
所以上面范例的意思是,在D盤的根目錄下,用4個線程,一個1024MB的文件來做壓力測試。
?
2. SQLIO.exe。
也就是主測試文件。它有很多參數,具體含義如下表:
選項 | 說明 |
-o | 測試文件會在磁盤上產生的隊列長度(Disk Queue Length)。一般來說,這個值越高,單位時間磁盤的吞吐量就越大。但是有些磁盤會在Queue Length太大的情況下出問題。常用的有8、32和64 |
-LS | 記錄磁盤反應時間,這是一個推薦使用的選項 |
-k | 指定是讀還是寫(R或W) |
-s | 測試持續多少秒。一般至少5到10分鐘。 |
-b | 每次I/O請求的大小。 |
-f | I/O的種類,是隨機(’random’)還是連續(’sequential’)的。 |
-F | 參數文件的名字,默認就是param.txt |
由于測試需要覆蓋不同的I/O類型,所以可以用下面這樣的批處理文件來做一套測試
見附件testIO.bat
這里輸入timeout命令的完整路徑,是因為若裝有cygwin,會因為環境變量Path的優先級而導致找到的timeout命令不是Windows下的該命令,而導致命令失敗。
運行的時候在命令行下運行:
testIO.bat > out.txt
結果會輸出在相同目錄下的out.txt文件里。每一行命令都會有它的輸出。
在做隨機讀和隨機寫的時候,Disk Transfers/sec的數量不會因為每個Transfer(每次I/O)的大小不同而有明顯的變化,Avg. Disk sec/Transfer也差不多。所以每完成一次I/O,花的時間都差不多,Transfer越大,那么Disk Bytes/sec也就越高。但是整體性能,還是比不上做連續讀、寫的時候。
在做連續讀和寫的時候,由于數據是連續的,所以不管每次做的I/O多大,最終的Disk Bytes/sec值相差不大。
當做的事情不一樣的時候,磁盤的吞吐量會有很大的差異。在和硬盤供應商討論磁盤性能的時候,也要要求他們提供磁盤在不同I/O行為下的能力值,而不是某個最佳值。
對于out.txt的輸出結果,IOs/sec相當于磁盤的IOPs,MB/s相當于磁盤數據的吞吐量。Latency相當于磁盤的反應時間。
見附件out.txt
?
針對SQLIO的輸出結果有一個非常好用的分析工具(SQLIO Analyzer),將SQLIO的結果保存到txt文件,用shell命令篩選出相關數據,如: ?
grep “IOs/sec” out.txt | awk ‘{print $2}’ ? ?
然后導入分析工具,可以出現下面的圖表結果。
見附件sqlio_analyzer_results.xls
?
工具地址:http://tools.davidklee.net/sqlio.aspx
總結
以上是生活随笔為你收集整理的SQLIO 模拟随机或者顺序的方式来测试磁盘IO的性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MSSQL WITH (NOLOCK)
- 下一篇: SpringMVC+Hibernate