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