Microsoft SQLIO:磁盘性能测试和基准测试工具
在任何IT基础架构中,数据库都是至关重要的随需应变资源。
数据库管理员和开发人员为不同的应用程序部署任务关键型数据库。
但是,保留数据库的底层磁盘驱动器在数据库系统的整体性能中也起着重要作用。
一些数据库的读操作比写重,有些数据库的写操作比读重。
尽管配置良好的RAID磁盘阵列非常适合这些操作,但建议在将分区/磁盘驱动器提供给操作系统后测试分区/磁盘驱动器的性能。
性能基准测试结果对于做出有关数据库部署的决策非常有帮助。
我们已经在Linux中进行了IO性能基准测试。
在本教程中,我们将讨论市场上最好的工具之一(由Microsoft本身提供),以测试读/写性能。
它就是SQLIO。
不要被它的名字分散注意力,它与SQL无关,Microsoft可能以这种方式命名它,表明它可以用来测试使用MSSQL的磁盘性能。
如何下载SQLIO?
Microsoft的官方声称,此工具是在没有任何形式的支持的情况下提供的。
不用担心支持,正确使用该工具效果会很好。
我们可以从其官方的以下链接下载SQLIO。
如何安装SQLIO?
安装SQLIO很简单,因为在安装任何Microsoft提供的.msi文件时,我们只需按照常规步骤即可。
只需按照屏幕上的步骤进行操作即可(所有步骤均不言自明)。
安装程序会在以下位置默认安装工具。
但是,它在安装过程中是可变的。
我在下面显示了已安装目录的Windows CMD目录列表(C:\Program Files \ SQLIO)
Directory of C:\Program Files\SQLIO 03/04/2013 05:26 PM <DIR> . 03/04/2013 05:26 PM <DIR> .. 01/21/2004 05:12 PM 35,287 EULA.rtf 11/10/2003 10:17 AM 53 param.txt 11/10/2003 10:17 AM 22,614 readme.txt 10/19/2001 04:03 PM 179,252 sqlio.exe 03/04/2013 05:26 PM 8,388,608 testfile.dat 01/21/2004 06:05 PM 90,357 Using SQLIO.rtf 6 File(s) 8,716,171 bytes 2 Dir(s) 12,715,286,528 bytes free C:\Program Files\SQLIO>
在进行SQLIO测试之前要记住一些注意事项
顺序读/写:就磁盘的读写性能而言,我们需要了解什么是顺序读和写。
在顺序读取中,数据是从有序或者相邻的块中顺序读取的,换句话说,块是一个接一个地读取的。
这种读取或者写入非常快,因为控制器磁头不需要从一个块到另一个块的快速移动(因为所有块都顺序排列或者一个接一个地说)。
同样适用于写入。
随机读取/写入:该名称表明从磁盘读取的块是随机的。
这意味着从这里到那里读取块。
与顺序相比,这当然会很慢。
SAN/iSCSI控制器中的缓存:几乎所有SAN和iSCSI控制器都采用缓存作为一种机制,以更快地访问高使用率的数据。
实际上,它缓存了最近使用的块,因此不需要时间来再次访问它。
这种缓存可能会阻止我们在进行性能测试时获得准确的结果。
克服此问题的最佳方法是使用一个非常大的文件进行读取和写入,该文件大于缓存。
什么是SQLIO中的param.txt?
该文件是一个选项,用于指定其中进行测试。
它还指定了文件等的大小。
让我们看看我们获得的默认param.txt中的内容。
文件位置为C:\Program Files \ SQLIO \ param.txt(因为在我们的情况下,其安装在默认路径中)
c:\testfile.dat 2 0x0 100 #d:\testfile.dat 2 0x0 100
让我们了解文件的内容。
第一个条目是测试文件的位置(SQLIO创建指定大小的测试文件以对其进行测试。
)
C:\testfile.dat:意味着示例文件将被命名为testfile.dat并将位于C驱动器中。
这意味着我们将测试C驱动器的性能。
“ 2”:指示执行读/写测试的线程数。
第三个选项“ 0x0”指定相似性掩码
第四个选项“ 100”以MB为单位指定测试文件的大小。
保留这个档案
因此,如果要使用大型测试文件测试“ D”驱动器的性能(如之前使用大型文件所述,该文件大于控制器的缓存大小,将产生更准确的结果。
),请使用5gb的测试文件。
因此,我们的param.txt文件将如下所示。
d:\testfile.dat 2 0x0 5000 #d:\testfile.dat 2 0x0 100
使用SQLIO的示例顺序测试
首先让我们先使用sqlio进行顺序写测试,然后查看输出。
C:\Program Files\SQLIO>sqlio.exe -kW -s5 -fsequential -o4 -b64 -Fparam.txt sqlio v1.5.SG parameter file used: param.txt file c:\testfile.dat with 2 threads (0-1) using mask 0x0 (0) 2 threads writing for 5 secs to file c:\testfile.dat using 64KB sequential IOs enabling multiple I/Os per thread with 4 outstanding size of file c:\testfile.dat needs to be: 104857600 bytes current file size: 0 bytes need to expand by: 104857600 bytes expanding c:\testfile.dat ... done. using specified size: 100 MB for file: c:\testfile.dat initialization done CUMULATIVE DATA: throughput metrics: IOs/sec: 1509.48 MBs/sec: 94.34
让我们了解一下我在上面的SQLIO命令中使用的选项。
-k指定要执行的操作类型,W代表写入,R代表读取。
-S指定测试将运行的秒数。
-f指定要在测试文件上执行的读取或者写入操作的类型
-o指定每个线程的I/O请求。
-b指定将用于执行测试的块大小。
-F指定参数文件(在本例中为param.txt)
从上面的输出中,要考虑的两个最重要的输出是每秒I/O和MB/sec。
如果使用-s参数增加测试的持续时间,则输出将不同。
让我们看一些基于线程和CPU内核检测磁盘IO性能的高级方法。
C:\Program Files\SQLIO>sqlio.exe -dD -BH -kW -fsequential -t2 -o1 -s40 -b64 testfile.dat sqlio v1.5.SG 2 threads writing for 40 secs to file D:testfile.dat using 64KB sequential IOs enabling multiple I/Os per thread with 1 outstanding buffering set to use hardware disk cache (but not file cache) using current size: 12905 MB for file: D:testfile.dat initialization done CUMULATIVE DATA: throughput metrics: IOs/sec: 1161.05 MBs/sec: 72.56
在上一个测试中,我们看到我们创建了一个5gb大小的testfile.dat。
在上面显示的测试中,我们将使用此文件进行带有一些更多线程选项的后续顺序写测试。
-d指定要测试的驱动器
-B指定要使用的缓冲。
“ H”表示要使用的硬件缓冲区。
-t指定测试期间要使用的线程数。
在本例中,我们使用了两个线程,每个线程一次执行1个I/O请求(用-o表示)
为了进行完整的压力测试,我建议增加线程数量,直到达到我们拥有的CPU核心数量。
因此,如果我们有8核CPU,则通过将线程数加倍直至达到8个线程来测试驱动器,然后分析输出。
将以下命令放入测试的文本文件中,然后作为批处理脚本运行。
sqlio.exe -dD -BH -kW -fsequential -t2 -o1 -s40 -b64 testfile.dat sqlio.exe -dD -BH -kW -fsequential -t4 -o1 -s40 -b64 testfile.dat sqlio.exe -dD -BH -kW -fsequential -t6 -o1 -s40 -b64 testfile.dat sqlio.exe -dD -BH -kW -fsequential -t8 -o1 -s40 -b64 testfile.dat
同样,对于读取测试,我们可以将以下命令放在文本文件中,以测试随机/顺序读取性能。
sqlio.exe -dD -BH -kR -fsequential -t2 -o1 -s40 -b64 testfile.dat sqlio.exe -dD -BH -kR -fsequential -t4 -o1 -s40 -b64 testfile.dat sqlio.exe -dD -BH -kR -fsequential -t6 -o1 -s40 -b64 testfile.dat sqlio.exe -dD -BH -kR -fsequential -t8 -o1 -s40 -b64 testfile.dat