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