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

你可能感兴趣的:(磁盘IO,压力测试,磁盘性能,SQLIO)