zoukankan      html  css  js  c++  java
  • 【IO压测】sql server使用Diskspd测试SQL Server IO存储

    参考文档

    测试的目标可以是文件、分区、物理驱动器中的任意一个维度。这三种的区别,就是测试范围是一个比一个大的,文件<分区<物理驱动器。

    • 测试文件时,表示测试只针对这个文件,不管其在哪个分区或驱动器上;

    • 测试分区时,表示只会在这个分区上读写,不会影响其他分区文件;

    • 测试驱动器时,表示只会在这个驱动器上读写,不会影响其他驱动器。

    各参数详细含义可参考《diskspd的使用》

    也可以查看github的帮助文档:https://github.com/Microsoft/diskspd/wiki/Table-of-contents

    在本文中,我们将学习如何使用Diskspd测试存储子系统的性能。 存储子系统是SQL Server的关键性能因素之一,因为SQL Server存储引擎将数据库对象,表和索引存储在物理文件上。

    因此,由于数据处理,存储引擎始终与磁盘子系统交互。 在这种情况下,当存储子系统上出现瓶颈时,它将对SQL Server性能产生负面影响。 根据安装用途,在安装SQL Server之前评估要使用的磁盘的性能是正确的方法。

    例如,OLTP数据库必须在短时间内完成删除,插入和更新过程,但是OLAP数据库处理大量的批处理数据。 在这种情况下,这两个数据库系统的存储要求应该彼此不同。简而言之,最佳实践是根据其用途来测试和分析存储子系统的性能,以便我们可以提前消除I / O问题。

    Firstly, we will shortly look into the essential disk measurement metrics before going into details about the Diskspd.

    首先,在介绍有关Diskspd的详细信息之前,我们将很快研究基本的磁盘度量指标

    压测核心指标

      IOPS (每秒输入/输出操作)指示磁盘每秒完成多少操作,并且该指示器用于评估存储的性能。 IOPS是通过对磁盘在一秒钟内执行的事务进行计数来计算的,因此该测量方法不考虑数据量。 因此,仅使用此指标来确定存储性能将是不正确的。

    Throughput indicates how much data can be transferred by the storage unit in a second. In general, it is measured in megabytes per second (MB/sec).

      吞吐量:指示存储单元在一秒钟内可以传输多少数据。 通常,以兆字节每秒(MB / sec)为单位进行度量。

    Latency is a measurement of the response time of a storage device to the request it receives and its unit is the millisecond. Particularly for databases, high latency negatively affects performance. For example, the log files of the OLTP databases that are planned to receive high modification request should be placed on the disks which have low latency.

      延迟:是存储设备对接收到的请求的响应时间的度量,单位是毫秒。 特别是对于数据库,高延迟会对性能产生负面影响。 例如,应将计划接收高修改请求的OLTP数据库的日志文件放在具有低延迟的磁盘上。

    什么是Diskspd? (What is Diskspd?)

      DiskSpd是磁盘测试工具,用于通过生成各种类型的假工作负载来测量和报告磁盘的功能。 有各种磁盘性能基准测试工具( IOmeter , ATTO , HDTune等),但是此性能测试工具可提供更真实的场景和可靠的结果,因此,它是存储性能基准测试的首选。

      它可以借助各种参数来分析存储子系统的性能和限制。 该工具的另一个优点是结果以文本或XML输出的形式提供。 但是,最好的事情是它是开源的。

      因此,存储子系统的性能是关键因素,因此在安装任何SQL Server之前都应考虑它。

    使用说明 (Usage Instructions)

    下载安装

    下载地址:https://github.com/microsoft/diskspd/releases

    可以从此链接( 一个功能强大的存储性能工具)下载DiskSpd,不需要任何安装或框架。 压缩文件包含我们需要的每个文件。

    Downloaded file

    在此压缩文件中,我们可以找到各种系统的三个不同版本:

    • amd64: For 64 bit operating systems amd64 :用于64位操作系统
    • x86: For 32 bit operating systems x86 :对于32位操作系统
    • ARM64: For 32 bit operating systems ARM64:对于32位操作系统

    这是一个命令行工具,因此,我们需要打开具有管理权限的命令提示符,然后浏览复制diskspd.exe的目录。 当我们在命令提示符下执行不带参数的diskspd.exe时,它将返回版本详细信息和所有参数描述。

    常用参数

    如我们所见,diskspd.exe可以执行各种参数,但是在下表中,我们将研究重要的参数,还可以在命令行和参数帮助文档中找到详细信息。

    Parameter

    Description

    -b

    Block size in bytes and the default value is 64KB

    -d

    The duration of the test and the default value is 10 seconds

    -o

    The number of outstanding I/O requests per target per thread and the default value is 2

    -t

    Worker threads number per file

    -h

    Disabling hardware write caching and software caching

    -r

    Random I/O access and it can be overridden with the –s parameter

    -w

    Percentage of write requests in the test

    -c

    Specifies the size of the file that will be used in the test

     

    -L

    Measure the latency information

    参数

    描述

    -b

    块大小(以字节为单位),默认值为64KB

    -d

    测试的持续时间,默认值为10秒

    -o

    每个线程每个目标的未完成I / O请求数,默认值为2

    -t

    每个文件的工作线程数

    -H

    禁用硬件写缓存和软件缓存

    -r

    随机I / O访问,可以用–s参数覆盖

    -w

    测试中写入请求的百分比

    -C

    指定将在测试中使用的文件的大小

     

    -L

    测量延迟信息

    测试案例

    【OLTP基本测试】

    OLTP工作负载方案:此方案基于涉及大量写活动的OLTP工作负载。 我们可以使用以下参数开始性能测试,但首先,我们将描述这些参数的详细信息。

    diskspd -b8K -d180 -h -L -o32 -t3 -r -w75 -c5G C:TestdataIO.dat > resultfile.txt

    -b8K : SQL Server将数据存储在页面中,这些页面的大小为8KB,因此我们将块大小参数设置为8KB。

    –d180 : 测试时间为180秒

    -h :此参数禁用缓存机制,因为SQL Server以这种方式工作。

    -L :借助此参数,延迟统计信息将包含在报告中。

    -o32 :通过此参数将队列深度设置为32

    -t3 :此参数确定线程数。

    -r :由于这个原因,SQL Server随机访问数据文件,因此我们将此参数设置为random。

    -c50G :此参数设置将在测试中使用的样本文件大小。

    –w75 :测试的工作量将是75%的写入,其余的将作为读取完成,因为OLTP工作量涉及的写入活动大于读取。

    C:Testdata io.dat :将在测试中使用的示例文件名。

    resultfile.txt :测试结果的输出文件。

    【解析测试结果】

    解释测试结果:执行测试后,结果将被写入resultfile.txt文件,我们可以将测试结果分为4个部分进行解释。 测试结果的第一部分向我们显示了输入参数和任何其他设置。

    The first section of the storage subsystems performance test

    在第二部分中,我们可以找到平均CPU使用率详细信息。

    CPU utilization of the disk performance test

    Total IO部分为我们提供了有关存储性能信息的所有性能详细信息。

       54562是此测试生成的总IOPS,测试持续时间为180秒,因此每秒IOPS将为54562/180 = 303.09 。

       AvgLat列指示平均延迟,结果为316.204 。 每秒的吞吐量为2.37 MB / s 。

    Total I/O utilization of the disk performance test.

    这种存储性能非常糟糕,并且延迟没有可接受的值,因此我们可以确定此存储性能不适合任何数据库安装。 

    Read IO部分提供有关读取操作的详细信息,而Write IO部分提供有关写入操作的详细信息。

    Read I/O and Write I/O sections of the performance test

    测试结果的最后一部分向我们展示了存储性能从最小值到最大值的延迟百分比分析。 此结果有助于确定磁盘在负载下的行为。

    latency percentile section of the performance test

    【LDF文件压测】

    日志文件(LDF)工作负载方案: 

    • SQL Server日志机制使用内存空间,并且在将事务写入日志文件之前,会将事务写入此缓冲区。
    • 该区域的容量为60 KB,该日志数据将以60 KB的块刷新到磁盘中。 关于SQL日志文件的另一个注意事项是,日志数据将被顺序写入。

    根据此信息,性能测试参数如下所示:

    diskspd -b60K -d60 -h -L -o32 -t1 -s -w100 -c1G C:TestdataLogIO.dat > resultLogFile.txt

    预读方案: SQL存储引擎使用预读机制将连续的数据页带入缓冲区,然后再请求数据。 通过这种机制,存储引擎可以将64个连续的数据页传输到缓冲区中。 因此我们可以将性能测试的块大小设置为512KB。

    diskspd -b512K -d120 -h -L -o32 -t3 -si -w100 -c1G -s C:TestdataAheadIO.dat> resultRdAhead.txt
    diskspd -b512K -d120 -h -L -o32 -t3 -si -w100 -c1G -s C:TestdataAheadIO.dat> resultRdAhead.txt

    结论 (Conclusion)

    In this article, we uncovered how to test the performance of storage subsystems with DiskSpd and we also did some analysis on various scenarios, particularly for SQL Server.

    在本文中,我们揭示了如何使用DiskSpd测试存储子系统的性能,并且我们还针对各种情况进行了一些分析,尤其是针对SQL Server。

    翻译自: https://www.sqlshack.com/using-diskspd-to-test-sql-server-storage-subsystems/

  • 相关阅读:
    NPM (node package manager) 入门
    win10 环境 gitbash 显示中文乱码问题处理
    javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
    Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
    Centos 下 mysql root 密码重置
    执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
    Java I/O输入输出流详解
    反射---Java高级开发必须懂的
    细说Java多线程之内存可见性
    全面解析java注解
  • 原文地址:https://www.cnblogs.com/gered/p/14313212.html
Copyright © 2011-2022 走看看