average_disk_seconds_per_read 的精度?

Con*_* S. 5 sql-server extended-events

在 SQL Server 扩展事件中,event = perfobject_logicaldisk,average_disk_seconds_per_read 和average_disk_seconds_per_write 的实际时间单位是多少?

我找到的所有文档都说“秒”,但我的示例数据包括以下值:87708875、1573358215 等。

它可能是微秒。我将目标数据导出到 Excel 并将其除以 1,000,000,000,000,这给出的数字似乎在微秒内是正确的,但我想在使用这样的 xEvent 查询之前进行确认。

Jos*_*ell 5

扩展事件因记录不全而臭名昭著。持续时间/单位尤其如此,请参阅:

延长事件持续时间是毫秒还是微秒?

尽管“秒”在事件字段名称中,但您报告的值远不及秒是正确的。你提到你必须将这个数字除以一万亿(一个 1 后面有 12 个零)。这实际上意味着数字以皮秒为单位,而不是微秒 这听起来……疯狂。但我认为这是对的。

为了确认这一点,我SELECT * from dbo.Posts;StackOverflow2010 数据库上运行,同时运行三个不同的跟踪工具并比较结果。

扩展事件:perfobject_logicaldisk

此事件每 15 秒记录一次。

对于时间戳 09:44:43 处的“C:” instance_name(因此跨度从 09:44:28 开始),在这 15 秒的时间间隔内,我得到了3,839,009,107的 average_disk_seconds_per_read 。

perfobject_logicaldisk 实例名称 C 的屏幕截图

对于同一时间戳的“HarddiskVolume1”instance_name,我得到的 average_disk_seconds_per_read 为2,239,089。

perfobject_logicaldisk 实例名称 vol1 的屏幕截图

还有一个 instance_name "HarddiskVolume3" 条目,average_disk_seconds_per_read 为1,046,233。

我认为这两个卷分别是系统保留和恢复分区。作为参考,这是我机器上 DiskPart 的输出

C:\WINDOWS\system32>diskpart

Microsoft DiskPart version 10.0.17134.1

Copyright (C) Microsoft Corporation.
On computer: *****************

DISKPART> list volume

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     D                       DVD-ROM         0 B  No Media
  Volume 1         System Rese  NTFS   Partition    500 MB  Healthy    System
  Volume 2     C                NTFS   Partition    977 GB  Healthy    Boot
Run Code Online (Sandbox Code Playgroud)

PerfMon.exe:LogicalDisk -> 平均。磁盘秒/读取

此 Windows 性能计数器对象记录为以秒为单位报告。我只让它记录了“C:”实例名称。在上述期间,我看到平均约为 0.002 秒(2 毫秒)的值。

perfmon 的屏幕截图

PerfView:Windows Kernel/DiskIO/Read ETW 事件

PerfView 采样比此处的其他方法更积极(请参阅下面的详细信息片段截图)。将该输出(经过过滤以仅包括 SQL Server 进程完成的 I/O)转储到 Excel 中表明在整个样本中每次读取的平均秒数为2.7 毫秒

perfview 的屏幕截图

这是什么意思呢?

ETW 跟踪和性能计数器是用于测量各种性能指标的众所周知的 Windows 组件,它表明读取时间平均在 0.002 到 0.003 秒(2-3 毫秒)之间。

由于我们从扩展事件中获得的值是 3,839,009,107,我认为我们可以假设它试图告诉我们 0.003 秒(接近 0.004)。回到那个数字,我们必须除以一万亿才能到达那里。

我可能不擅长数学,但看起来这个 EE 字段报告的数字以皮秒为单位。

将 30 亿皮秒转换为秒的 Google 结果

糟糕的。只是……太可怕了。