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

时间: 2024-10-12 06:12:27

SQLIO 模拟随机或者顺序的方式来测试磁盘IO的性能的相关文章

使用SQLIO测试磁盘性能

SQLIO 是一个用于测试存储系统能力的命令行工具,用以获取存储系统相关的性能指标,以判断系统的 I/O 处理能力. 在微软的网站可以下载 SQLIO 的安装包,安装后目录中会出现如下文件: EULA.rtf – End-user license agreement that covers sqlio usage. param.txt – Configuration options that identify the target drives, test file names, and spe

磁盘IO单线程顺序写时最快的,如果多线程写,磁盘的磁头要不断重新寻址,所以写入速度反而会慢

(1) 读写最好还是不要多线程,硬盘读写的速度有限,单线程时已经满负荷了,多线程又会增加线程之间的切换,会增加时间. 如果想增加读写速度,应该增加硬盘,做raid (2)首先是硬盘的写入是串行的,CPU的计算才是并行的,如果你偏重计算那么多线程能提高,要不怎么叫做并行计算呢: 如果侧重存储,除非数据量达到足以体现优势的程度,否则加上线程之间切换的损耗当然会效率更加地下. (3)这个是按照算法来说的,目前来说大多数的算法都是很快的,瓶颈都在磁盘的IO上,我们针对大多数的算法都进行过测试,基本一半以

模拟mysql&keepalived 主主备份故障切换测试

模拟mysql&keepalived 主主备份故障切换 模拟mysql&keepalived 主主备份故障切换测试

转载:测试用例的书写方式及测试模板

测试用例的书写方式及测试模板大全 一个优秀的测试用例,应该包含以下信息: 1 ) 软件或项目的名称 2 ) 软件或项目的版本(内部版本号) 3 ) 功能模块名 4 ) 测试用例的简单描述,即该用例执行的目的或方法 5 ) 测试用例的参考信息(便于跟踪和参考) 6 ) 本测试用例与其他测试用例间的依赖关系 7 ) 本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限 8 ) 用例的编号( ID ),如可以是 软件名称简写 - 功能块简写 -NO. . 9 ) 步骤号.操作步骤描述.

Android一组WebView的随机,顺序,倒序加载

写了个应用,实现了一组WebView的顺序,倒序,和随机加载.之中使用了延时,为什么要使用呢?请看下图: package com.zms.csdngo; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; i

SpringMVC 模拟 PUT 提交和 DELETE 方式的提交

步骤 1:在 web.xml 中配置 HiddenHttpMethodFilter 过滤器 <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping>

全局唯一随机邀请码实现方式

背景 日常的网站开发中,会遇到网站的促销活动,就有涉及到邀请好礼的功能 成功邀请好友,则获取相应奖励,这时候,就有邀请码的需求 邀请码要求每个用户唯一 方法一. 可根据用户的uid生成邀请码 方法二. 邀请码可根据某个初始化id生成,用户主动请求,生成code,绑定uid 方法二,这种方式,需额外记录uid和code关系 方法一,根据uid生成,也可根据code反推出uid,不用额外查询,比较方便 实现 记录方法一的实现 由长数字转换为特定长度的code,首先需确定code的字符范围 可转换为

VC模拟鼠标的两种方式(SendMessage、mouse_event)

鼠标模拟的常用方案,包括发送鼠标事件消息和使用mouse_event系统函数,发送鼠标消息的例子如下: pWnd->SendMessage(WM_RBUTTONDOWN,0,(y<<16)|x); 这种方法不需要窗体在前端,甚至最小化也可以使用,但是此方法并不是在所有场合有效,特别是对于不响应鼠标消息的程序更是如此.在这种情况下,可以尝试使用mouse_event函数.首先给出mouse_event函数的原型: VOID mouse_event(           DWORD dwFl

python多进程并行执行和顺序执行的时间测试

#_*_coding:utf-8_*_ import time from  multiprocessing import Pool from threading import Thread def func1(fn):     time.sleep(1)     return fn * fn if __name__ == "__main__":     a = [1,2,3,4,5,6]     print "顺序执行的方式开始..."     s = time.t