使用 SQLIOSim 实用工具模拟SQL Server子系统上的活动

本文介绍如何使用 SQLIOSim 实用工具对磁盘子系统执行压力测试,以模拟SQL Server活动。

原始产品版本:  SQL Server
原始 KB 编号:   231619

摘要

对于 Microsoft SQL Server 2005,SQLIOSim 作为单独的下载程序包交付。 从 SQL Server 2008 开始,SQLIOSim 包含在 SQL Server产品安装中。 在安装SQL Server,SQLIOSim 工具将找到该 SQLIOSim 工具,该文件夹SQL Server BINN。 建议使用这些工具的这些更新版本来模拟磁盘子系统上的 IO 活动。

SQLIOSim 实用工具取代了 SQLIOStress 实用工具。 SQLIOStress 实用工具以前称为 SQL70IOStress 实用工具。

本文还包含 SQLIOSim 实用工具的下载信息。

简介

本文介绍 SQLIOSim 工具。 可以使用此工具在磁盘子系统上执行可靠性和完整性测试。 这些测试模拟用户执行读取、写入、检查点、备份、排序和Microsoft SQL Server。 但是,如果您必须执行基准测试并确定存储系统的 I/O 容量,则应该使用 Diskspd 工具。

概述

SQLIOSim 实用工具已从 SQLIOStress 实用工具升级。 SQLIOSim 实用工具可以更准确地模拟数据库的 I/O Microsoft SQL Server。

有关 I/O 模式SQL Server,请参阅第 2 章SQL Server I/O 基础知识

备注

为了帮助维护适当的数据完整性和安全性,我们建议您先对 I/O 子系统执行压力测试,然后再将SQL Server硬件上。 SQLIOSim 实用工具模拟读取模式、写入模式和问题识别技术SQL Server。 为了执行这些任务,SQLIOSim 实用工具模拟系统的用户活动和SQL Server活动。 SQLIOSim 实用工具独立于引擎执行此SQL Server模拟。

SQLIOSim 实用工具不保证或保证数据安全性或完整性。 该实用工具旨在提供系统环境的基准测试。 SQLIOSim 实用工具可能会暴露潜在的数据完整性问题。

有关日志记录和数据存储详细信息,请参阅扩展数据可靠性的日志记录和数据存储算法SQL Server。

下载包包含两个可执行文件,即 SQLIOSim.com 和 SQLIOSim.exe。 这两个可执行文件都提供相同的模拟功能。 SQLIOSim.com 是一个命令行工具,可以配置为无需用户交互即可运行。 为此,可以使用命令行参数、配置文件或这两种方法的组合。 SQLIOSim.exe是一个不接受命令行参数的图形应用程序。 但是,SQLIOSim.exe从配置文件加载默认配置数据。

SQLIOSim.com 命令行参数

SQLIOSim.com 接受有限数量的命令行参数来控制基本行为。 SQLIOSim 实用工具的配置文件提供高级行为控制。 当命令行参数和配置文件选项重叠时,命令行参数优先。

参数 备注
-cfg 文件 替代Sqliosim.cfg.ini配置文件。 如果 SQLIOSim 实用工具找不到该文件,则返回错误。
-save 文件 将生成的配置保存到配置文件中。 可以使用此选项创建初始配置文件。
-log file 指定错误日志文件和错误日志文件路径。 默认文件名为 Sqliosim.log.xml。
-dir dir 设置创建 (.mdf) 文件以及 (.ldf) 文件的位置。 可以多次运行此命令。 在大多数情况下,此位置是驱动器根目录或卷装入点。 此位置可以是长路径或 UNC 路径。
-d 设置主运行持续时间。 此值不包括准备阶段和验证阶段。
-size MB 以 MB 为单位设置数据文件的初始 (MB) 。 文件可增长为初始大小的两倍。 数据的大小日志文件数据文件大小的一半。 但是,日志文件大小不能大于 50 MB。

SQLIOSim 配置文件

可以从以下支持团队的 github 存储库SQL Server各种测试的示例配置文件

不需要使用配置文件。 如果不使用配置文件,则除数据文件位置和配置文件位置之外的所有参数日志文件默认值。 必须使用下列方法之一来指定数据文件位置和日志文件位置:

  • 在命令行管理文件中使用 SQLIOSim.com 参数。
  • 运行 文件后, 请使用"文件和配置"SQLIOSim.exe文件。
  • 使用配置文件的"文件 x" 部分。

备注

  • 如果参数的名称指示参数为比率或百分比,则参数值用百分比或比率表示,除以 0.01。 例如,参数的值为 CacheHitRatio 10%。 此值表示为 1000,因为 10 除以 0.01 等于 1000。 百分比参数的最大值是 10000
  • 如果参数类型为数字,并且您将非数值值分配给参数,则 SQLIOSim 实用程序将参数设置 为 0。
  • 如果参数类型为 ,则您可以分配给参数的有效值为 Boolean true 和 false。 此外,这些值区分大小写。 SQLIOSim 实用工具将忽略任何无效值。
  • 如果一对参数指示最小值和最大值,则最小值不能大于最大值。 例如,参数的值 MinIOChainLength 不能大于参数 MaxIOChainLength 的值。
  • 如果参数指示页数,则 SQLIOSim 实用工具将针对 SQLIOSim 实用程序处理的文件检查分配给参数的值。 SQLIOSim 实用工具执行此检查以确保页面数不超过文件大小。

CONFIG 部分

SQLIOSim 实用工具采用在 SQLIOSim 配置文件的 CONFIG 部分中指定的值,以建立全局测试行为。

参数 默认值 描述 注释
ErrorFile sqliosim.log.xml XML 类型名称日志文件
CPUCount 计算机上 CPU 的数量 要创建的逻辑 CPU 数 最大值为 64 个 CPU。
相关性 0 要应用于逻辑 CPU 的物理 CPU 相关性掩码 相关性掩码应位于活动 CPU 掩码内。 值
0 表示将使用所有可用的 CPU。
MaxMemoryMB SQLIOSim 实用工具启动时可用的物理内存 缓冲区池的大小(以 MB 为单位) 该值不能超过计算机的物理内存总量。
StopOnError true 发生第一个错误时停止模拟
TestCycles 1 要执行的完整测试周期数 值 0 表示无限数量的测试周期。
TestCycleDuration 300 测试周期的持续时间(以秒数表示,不包括该周期结束时的审核阶段)
CacheHitRatio 1000 SQLIOSim 实用工具从磁盘读取时模拟的缓存命中率
MaxOutstandingIO 0 允许进程范围内的最大未完成 I/O 操作数 该值不能超过 140000。 值 0 表示最多允许大约 140,000 个 I/O 操作。 这是实用工具的限制。
TargetIODuration 100 限制所针对的 I/O 操作持续时间(以毫秒为单位) 如果平均 I/O 持续时间超过目标 I/O 持续时间,则 SQLIOSim 实用工具将限制未完成的 I/O 操作数,以减少负载并缩短 I/O 完成时间。
AllowIOBursts true 允许关闭对发布多个 I/O 请求进行限制 I/O 突发在初始更新、初始检查点和测试周期结束时的最终检查点通过期间启用。 MaxOutstandingIO 参数仍然受到支持。 你可以预期长 I/O 警告。
NoBuffering true 使用FILE_FLAG_NO_BUFFERING选项 SQL Server == true FILE_FLAG_NO_BUFFERING打开数据库文件。 某些实用程序和服务(如 Analysis Services)FILE_FLAG_NO_BUFFERING == false。 若要完全测试服务器,请针对每个设置执行一个测试。
WriteThrough true 使用FILE_FLAG_WRITE_THROUGH选项 SQL Server == true FILE_FLAG_WRITE_THROUGH打开数据库文件。 但是,某些实用程序和服务使用 FILE_FLAG_WRITE_THROUGH == false 打开数据库文件。 例如,SQL Server Analysis Services使用 FILE_FLAG_WRITE_THROUGH == false 打开数据库文件。 若要完全测试服务器,请针对每个设置执行一个测试。
ScatterGather true 使用 ReadScatter/WriteGather API 如果此参数设置为 true,NoBuffering 参数也将设置为 true。

SQL Server大部分 I/O 请求使用散点图/收集 I/Os。
ForceReadAhead true 执行读取前操作,即使数据已读取 SQLIOSim 实用工具会执行读取命令,即使数据页已位于缓冲区池中。

Microsoft SQL Server支持已成功地使用 true 设置来公开 I/O 问题。
DeleteFilesAtStartup true 如果文件存在,则启动时删除文件 文件可能包含多个数据流。 文件中仅截断 File x FileName 条目中指定的流。 如果指定了默认流,则删除所有流。
DeleteFilesAtShutdown false 测试完成后删除文件 文件可能包含多个数据流。 文件中仅截断在 File x FileName 条目中指定的数据流。 如果指定了默认数据流,SQLIOSim 实用程序将删除所有数据流。
StampFiles false 通过标记零来展开文件 如果文件很大,此过程可能需要很长时间。 如果此参数设置为 false,SQLIOSim 实用程序会通过设置有效的数据标记来扩展文件。

SQL Server 2005 对数据文件使用即时文件初始化功能。 如果数据文件是一个日志文件,或者未启用即时文件初始化,SQL Server执行零标记。 2000 SQL Server版本SQL Server始终执行零标记。

应在测试期间切换 StampFiles 参数的值,以确保即时文件初始化和零标记均正常运行。

Filex 部分

SQLIOSim 实用工具旨在支持多个文件测试。 "文件 x" 部分表示为测试中每个文件的 [File1]、[File2]。

参数 默认值 描述 注释
FileName 无默认值 文件名和路径 FileName 参数可以是长路径或 UNC 路径。 它还可以包含辅助流名称和类型。 例如 ,FileName 参数可以设置为 file.mdf:stream2。

注意 在 SQL Server 2005 中,DBCC 操作使用流。 我们建议您执行流测试。
InitialSize 无默认值 初始大小(以 MB 为单位) 如果现有文件大于为 InitialSize 参数指定的值,则 SQLIOSim 实用工具不会压缩现有文件。 如果现有文件较小,SQLIOSim 实用工具将扩展现有文件。
MaxSize 无默认值 最大大小(以 MB 为单位) 文件不能增大到大于您为 MaxSize 参数指定的值。
Increment 0 文件增长或缩小的增量大小(以 MB 为单位)。 有关详细信息,请参阅本文的"ShrinkUser"部分。 SQLIOSim 实用工具在启动时调整 Increment 参数,以便建立以下情形:Increment * MaxExtents < MaxMemoryMB / NumberOfDataFiles
如果结果为 0,则 SQLIOSim 实用工具将该文件设置为不可收缩。
可收缩 false 指示文件是否可以收缩或展开 如果将 Increment 参数设置为 0,则您将文件设置为不可收缩。 在这种情况下,必须将 Shrinkable 参数设置为 false。 如果将 Increment 参数设置为 0 值,则您将文件设置为可压缩。 在这种情况下,必须将 Shrinkable 参数设置为 true。
稀疏 false 指示是否应该在文件上设置稀疏属性 对于现有文件,当您将稀疏参数设置为 false 时,SQLIOSim 实用工具不会清除 稀疏 属性。

SQL Server 2005 使用稀疏文件来支持快照数据库和辅助 DBCC 流。

建议同时启用稀疏文件和流,然后执行测试通过。

注意 如果为文件设置设置了稀疏 = true,请不要在配置部分指定 NoBuffering = false。 如果使用这两种冲突组合,则可能会从该工具收到类似于下面的错误:

Error:-======Error: 0x80070467
错误文本:访问硬盘时,即使重试后磁盘操作也失败。
说明:缓冲区验证失败 C:\SQLIOSim.mdx Page: 28097
LogFile false 指示文件是否包含用户或事务日志数据 应定义至少一日志文件。

RandomUser 部分

SQLIOSim 实用工具采用你在 RandomUser 部分指定的值,以模拟执行随机查询操作(如联机事务处理 (OLTP) I/O 模式)的 SQL Server 工作器。

参数 默认值 描述 注释
UserCount -1 同时执行的随机访问线程数 该值不能超过以下值:CPUCount 1023-100 所有用户的总数
也不能超过此值。值 0 表示无法创建随机访问用户。值 -1 表示
您必须使用以下值的自动配置:CPUCount 2 (最小值,8)
注意 一SQL Server系统可能包含数千个会话。 大多数会话没有活动请求。 在针对 DMV 模型的动态管理 (查询) 函数作为建立此测试参数值的 count(*) sys.dm_exec_requests 基线。

此处的 CPUCount 指的是 CONFIG 部分中 CPUCount 参数的值。

该值 min(CPUCount*2, 8) 导致 CPUCount*2 和 8 之间的值较小。
JumpToNewRegionPercentage 500 跳转到文件的新区域的机会 随机选择区域开始。 区域大小是 MinIOChainLength 参数值与 MaxIOChainLength 参数值之间的 随机 值。
MinIOChainLength 1 页面的最小区域大小
MaxIOChainLength 100 页面最大区域大小 SQL Server 2005 Enterprise Edition 2000 SQL Server 2000 Enterprise Edition可以提前阅读最多 1,024 页。

最小值为 0。 最大值受系统内存限制。

通常,随机用户活动会导致执行小型扫描操作。 使用 ReadAheadUser 部分中指定的值模拟更大的扫描操作。
RandomUserReadWriteRatio 9000 要更新的页面百分比 随机长度链在选定区域,可以读取。 此参数定义要更新和写入磁盘的页面的百分比。
MinLogPerBuffer 64 最小日志记录大小(以字节为单位) 该值必须是磁盘上扇区大小的倍数或适合磁盘上扇区大小均匀大小的大小。
MaxLogPerBuffer 8192 最大日志记录大小(以字节为单位) 此值不能超过 64000。 该值必须是磁盘上扇区大小的倍数。
RollbackChance 100 发生内存中操作导致发生回滚操作的可能性。 当发生此回滚操作时,SQL Server不写入日志文件。
SleepAfter 5 每个周期后的睡眠时间(以毫秒为单位)

AuditUser 部分

SQLIOSim 实用工具采用在 AuditUser 部分中指定的值,以模拟 DBCC 活动以读取和审核有关页面的信息。 即使 UserCount 参数的值设置为 0,也会出现验证。

参数 默认值 描述 注释
UserCount 2 审核线程数 该值不能超过以下值:CPUCount 1023-100 所有用户的总数
也不能超过此值。值 0 表示无法创建随机访问用户。值 -1 表示
您必须使用以下值的自动配置:CPUCount 2 (最小值,8)
注意 一SQL Server系统可能包含数千个会话。 大多数会话没有活动请求。 在针对 DMV 的查询中使用此函数作为建立此 count(*) sys.dm_exec_requests 测试参数值的基准。

此处的 CPUCount 指的是 CONFIG 部分中的 参数 CPUCount 值。

该值 min(CPUCount*2, 8) 导致 CPUCount*2 和 8 之间的值较小。
BuffersValidated 64
DelayAfterCycles 2 BuffersValidated 周期数完成之后应用 AuditDelay 参数
AuditDelay 200 每次 DelayAfterCycles 操作后等待的毫秒

ReadAheadUser 部分

SQLIOSim 实用工具采用 ReadAheadUser 部分中指定的值,以模拟SQL Server读前活动。 SQL Server利用提前读活动来最大化异步 I/O 功能并限制查询延迟。

参数 默认值 描述 注释
UserCount 2 读前线程数 该值不能超过以下值:CPUCount 1023-100 所有用户的总数
也不能超过此值。值 0 表示无法创建随机访问用户。值 -1 表示
您必须使用以下值的自动配置:CPUCount 2 (最小值,8)
注意 一SQL Server系统可能包含数千个会话。 大多数会话没有活动请求。 在针对 DMV 的查询中使用此函数作为建立此 count(*) sys.dm_exec_requests 测试参数值的基准。

此处的 CPUCount 指的是 CONFIG 部分中 CPUCount 参数的值。

该值 min(CPUCount*2, 8) 导致 CPUCount*2 和 8 之间的值较小。
BuffersRAMin 32 每个周期要读取的最小页面数 最小值为 0。 最大值受系统内存限制。
BuffersRAMax 64 每个周期要读取的最大页面数 SQL Server Enterprise一个请求中可读取多达 1,024 个页面。 如果在具有SQL Server CPU、内存和磁盘资源的计算机上安装文件,建议您增加文件大小和读前大小。
DelayAfterCycles 2 完成 指定数量的周期后应用 RADelay 参数
RADelay 200 每次 DelayAfterCycles 操作后等待的毫秒数

BulkUpdateUser 部分

SQLIOSim 实用工具采用你在 BulkUpdateUser 部分中指定的值来模拟批量操作,例如 SELECT...INTO 操作和 BULK INSERT 操作。

参数 默认值 描述 注释
UserCount -1 BULK UPDATE 线程数 该值不能超过以下值: CPUCount*1023-100
-1 表示您必须使用以下值的自动配置: min(CPUCount*2, 8)
注意 一SQL Server系统可能包含数千个会话。 大多数会话没有活动请求。 在针对 DMV 的查询中使用此函数作为建立此 count(*) sys.dm_exec_requests 测试参数值的基准。

此处的 CPUCount 指的是 CONFIG 部分中的 参数 CPUCount 值。

该值 min(CPUCount*2, 8) 导致 CPUCount*2 和 8 之间的值较小。
BuffersBUMin 64 每个周期要更新的最小页面数
BuffersBUMax 128 每个周期要更新的最大页面数 最小值为 0。 最大值受系统内存限制。
DelayAfterCycles 2 完成 BUDelay 指定数量的周期后应用参数
BUDelay 10 每次 DelayAfterCycles 操作后等待的毫秒数

ShrinkUser 部分

SQLIOSim 实用工具采用在 ShrinkUser 部分中指定的值,以模拟 DBCC 压缩操作。 SQLIOSim 实用工具还可使用 ShrinkUser 部分使文件增大。

参数 默认值 描述
MinShrinkInterval 120 收缩操作之间的最小间隔(以秒为单位)
MaxShrinkInterval 600 压缩操作之间的最大间隔(以秒为单位)
MinExtends 1 SQLIOSim 实用工具增长或收缩文件的最小增量数
MaxExtends 20 SQLIOSim 实用工具增长或收缩文件的最大增量数

配置.ini文件注释

在配置 ( () .ini行的起始位置添加的分号字符会导致该行被视为单个注释。

文件创建

SQLIOSim 实用工具创建单独的数据文件和日志文件,以模拟 SQL Server 在其数据文件及其数据源中生成的 I/O 日志文件。 SQLIOSim 实用工具不使用SQL Server引擎执行压力活动。 因此,可以使用 SQLIOSim 实用工具在安装计算机之前测试SQL Server。

运行 SQLIOSim 实用工具时,请确保指定用于数据库SQL Server位置。 这样做时,该实用工具会模拟与数据库相同的 I/O SQL Server路径。

您可以为现有测试文件启用压缩属性或加密属性。 还可以为将在其中创建测试文件的现有目录启用这些属性。 用于启用这些属性的相应选项位于文件或目录的"属性"对话框中。

默认情况下,SQLIOSim 实用工具创建具有 .mdx 和.ldx 文件扩展名的测试文件。 因此,这些文件不会覆盖现有数据和日志文件。

警告

不要指定要测试SQL Server数据库文件的实际值。 SQLIOSim 实用工具将用随机测试模式覆盖数据,SQL Server数据将会丢失。

SQLIOSim 错误日志和处理

SQLIOSim 实用工具在下列日志文件之一创建错误代码:

  • 在日志启动参数中指定的位置
  • 在配置文件的 ErrorFile= 行中Sqliosim.cfg.ini位置

错误SQLIOSim.log.xml包含有关执行的详细信息。 这些详细信息包括错误信息。 仔细检查日志,获取错误信息和警告信息。

备注

如果您在 SQLIOSim 实用工具中遇到错误,建议您要求硬件制造商帮助确定问题的根本原因。

多个副本

SQLIOSim 实用工具支持多文件级测试和多用户级测试。 SQLIOSim 实用工具不需要多次调用。 但是,SQLIOStress 实用工具需要多次调用。 如果满足下列条件,可以运行 SQLIOSim 实用工具的多个副本:

  • 所有副本都引用每个实用程序实例的唯一测试文件。
  • MaxMemoryMB每个实例的参数都提供一个不重叠的内存区域,该区域足以用于每个实例。

每个实例的参数总 MaxMemoryMB 和必须小于或等于总物理内存。 某些测试阶段(如检查点模拟)可能会占用大量内存,并且在您运行多个副本时可能会创建内存不足的情况。 如果遇到内存不足错误,可以减少正在运行的实用程序副本数。

示例配置文件

除了默认文件Sqliosim.cfg.ini,包还提供以下示例文件。

示例文件 说明 与默认配置文件不同的参数
Sqliosim.hwcache.cfg.ini 最小化读取

文件较小,以使它们完全在内存中

无顺序读取
对于 AuditUser 部分和 ReadAheadUser 部分:

CacheHitRatio=10000
UserCount=0
Sqliosim.nothrottle.cfg.ini 删除 I/O 限制

最大程度地减少增加 I/O 卷所等待的时间
TargetIODuration=1000000
AuditDelay=10
RADelay=10
Sqliosim.seqwrites.cfg.ini 最小化读取

文件较小,以使它们完全在内存中

文件不可收缩

无顺序读取

无随机访问

无延迟地批量更新大块
Shrinkable=FALSE

对于 AuditUser 部分、ReadAheadUser 部分和 RandomUser 部分:

CacheHitRatio=10000
ForceReadAhead=FALSE
BuffersBUMin=600
BuffersBUMax=1000
BUDelay=1
UserCount=0
Sqliosim.sparse.cfg.ini 仅使用 32 MB 的内存

使目标 I/O 持续时间足够大,以启用许多未完成的 I/O 请求

禁用散点图/收集 API 以针对每 8 KB 页面发出单独的 I/O 请求

创建 1 GB 不可收缩的文件

在文件中创建 1 GB 不可收缩的辅助稀疏流
MaxMemoryMB=32
TestCycles=3
TestCycleDuration=600
TargetIODuration=10000
UseScatterGather=FALSE

[File1]
FileName=sqliosim.mdx
InitialSize=1000 MaxSize=1000
Increment=10
Shrinkable=FALSE
LogFile=FALSE
稀疏=FALSE

[File2]
FileName=sqliosim.ldx
InitialSize=50
MaxSize=50
Increment=0
Shrinkable=FALSE
LogFile=TRUE
稀疏=FALSE

[File3]
FileName=sqliosim.mdx:replica
InitialSize=1000
MaxSize=1000
Increment=10
Shrinkable=FALSE
LogFile=FALSE
稀疏=TRUE

参考