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

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

原始产品版本:   SQL Server
原始 KB 数:   231619

摘要

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

SQLIOSim 实用工具将替换 SQLIOStress 实用工具。 SQLIOStress 实用程序以前称为 SQL70IOStress 实用程序。

本文还包含 SQLIOSim 实用程序的下载信息。

简介

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

概述

SQLIOSim 实用程序已从 SQLIOStress 实用工具升级。 SQLIOSim 实用程序更准确地模拟 Microsoft SQL Server 的 i/o 模式。

有关 SQL Server i/o 模式的详细信息,请参阅 Sql server I/o 基础知识和第2章

备注

为了帮助维护适当的数据完整性和安全性,我们建议您先对 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 实用程序将返回一个错误。
-保存 文件 将生成的配置保存在配置文件中。 您可以使用此选项创建初始配置文件。
-日志 文件 指定错误日志文件的名称和错误日志文件路径。 默认文件名为 Sqliosim.log.xml。
-dir dir 设置用于创建数据 ( .mdf) 文件和日志 ( 的位置) 文件的位置。 您可以多次运行此命令。 在大多数情况下,此位置是驱动器根或卷装入点。 此位置可以是长路径或 UNC 路径。
-d 设置主运行的持续时间。 此值不包括准备阶段和验证阶段。
-大小 MB 设置数据文件的初始大小(以 mb 为单位) (MB) 。 该文件的大小可增加到初始大小的两倍。 将日志文件的大小计算为数据文件大小的一半。 但是,日志文件的大小不能超过 50 MB。

SQLIOSim 配置文件

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

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

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

备注

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

CONFIG 节

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

参数 默认值 描述 Comments
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意味着允许最长为140000的 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 使用 FILE_FLAG_NO_BUFFERING = = true 打开数据库文件。 某些实用工具和服务(如 Analysis Services)使用 FILE_FLAG_NO_BUFFERING = = false。 若要完全测试服务器,请对每个设置执行一个测试。
WriteThrough true 使用 FILE_FLAG_WRITE_THROUGH 选项 SQL Server 使用 FILE_FLAG_WRITE_THROUGH = = true 打开数据库文件。 但是,某些实用工具和服务使用 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/o。
ForceReadAhead true 即使已读取数据,也要执行预读操作 即使数据页已经在缓冲池中,SQLIOSim 实用工具也会发出 read 命令。

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 将执行零戳。 早于 SQL Server 2000 的 SQL Server 版本总是执行零戳。

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

Filex 部分

SQLIOSim 实用工具旨在允许多个文件 testings。 对于测试中的每个文件,文件 x 部分表示为 [File1],[File2]。

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

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

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

我们建议您同时启用稀疏文件和流,然后执行测试传递。

注释 如果为文件设置设置了 Sparse = true,请不要在 config 节中指定 NoBuffering = false。 如果使用这两个相互冲突的组合,您可能会收到类似于以下工具的错误:

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

RandomUser 部分

SQLIOSim 实用工具获取您在 RandomUser 部分中指定的值,以模拟正在执行随机查询操作的 SQL Server 工作线程,如联机事务处理 (OLTP) i/o 模式。

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

CPUCount 此处是指在 CONFIG 节中的 CPUCount 参数的值。

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

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

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

AuditUser 部分

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

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

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

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 功能,并限制查询延迟。

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

CPUCount 此处是指在 CONFIG 节中的 CPUCount 参数的值。

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

BulkUpdateUser 部分

SQLIOSim 实用工具使用您在 BulkUpdateUser 部分中指定的值模拟批量操作,例如 "选择 ..."。执行操作和批量插入操作。

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

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

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

ShrinkUser 部分

SQLIOSim 实用工具获取您在 ShrinkUser 部分中指定的值以模拟 DBCC shrink 操作。 SQLIOSim 实用程序还可以使用 ShrinkUser 部分,使文件变得增长。

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

配置 .ini 文件注释

在 config.xml 文件中某一行的开头 (; ) 的分号字符会导致该行被视为单个注释。

文件创建

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

运行 SQLIOSim 实用程序时,请确保指定用于 SQL Server 数据库文件的相同文件位置。 执行此操作时,实用工具将模拟与您的 SQL Server 数据库相同的 i/o 路径。

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

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

警告

请勿指定用于测试的实际 SQL Server 数据库文件。 SQLIOSim 实用工具将使用随机测试模式覆盖数据,并将丢失实际的 SQL Server 数据。

SQLIOSim 错误日志和处理

SQLIOSim 实用工具在以下位置之一创建错误日志文件:

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

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

无顺序读取

无随机访问

在不延迟的情况下大块区中批量更新
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 的非 shrinkable 文件

在文件中创建一个 1 GB 的非 shrinkable 辅助稀疏流
MaxMemoryMB = 32
TestCycles = 3
TestCycleDuration = 600
TargetIODuration = 10000
UseScatterGather = FALSE

File1
FileName = sqliosim
InitialSize = 1000 MaxSize = 1000
增量 = 10
Shrinkable = FALSE
LogFile = FALSE
Sparse = FALSE

[File2]
FileName = sqliosim。 ldx
InitialSize = 50
MaxSize = 50
增量 = 0
Shrinkable = FALSE
LogFile = TRUE
Sparse = FALSE

[File3]
FileName = sqliosim: replica
InitialSize = 1000
MaxSize = 1000
增量 = 10
Shrinkable = FALSE
LogFile = FALSE
Sparse = TRUE

参考