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 查询之前进行确认。
扩展事件因记录不全而臭名昭著。持续时间/单位尤其如此,请参阅:
尽管“秒”在事件字段名称中,但您报告的值远不及秒是正确的。你提到你必须将这个数字除以一万亿(一个 1 后面有 12 个零)。这实际上意味着数字以皮秒为单位,而不是微秒。 这听起来……疯狂。但我认为这是对的。
为了确认这一点,我SELECT * from dbo.Posts;在StackOverflow2010 数据库上运行,同时运行三个不同的跟踪工具并比较结果。
此事件每 15 秒记录一次。
对于时间戳 09:44:43 处的“C:” instance_name(因此跨度从 09:44:28 开始),在这 15 秒的时间间隔内,我得到了3,839,009,107的 average_disk_seconds_per_read 。
对于同一时间戳的“HarddiskVolume1”instance_name,我得到的 average_disk_seconds_per_read 为2,239,089。
还有一个 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)
此 Windows 性能计数器对象记录为以秒为单位报告。我只让它记录了“C:”实例名称。在上述期间,我看到平均约为 0.002 秒(2 毫秒)的值。
PerfView 采样比此处的其他方法更积极(请参阅下面的详细信息片段截图)。将该输出(经过过滤以仅包括 SQL Server 进程完成的 I/O)转储到 Excel 中表明在整个样本中每次读取的平均秒数为2.7 毫秒。
ETW 跟踪和性能计数器是用于测量各种性能指标的众所周知的 Windows 组件,它表明读取时间平均在 0.002 到 0.003 秒(2-3 毫秒)之间。
由于我们从扩展事件中获得的值是 3,839,009,107,我认为我们可以假设它试图告诉我们 0.003 秒(接近 0.004)。回到那个数字,我们必须除以一万亿才能到达那里。
我可能不擅长数学,但看起来这个 EE 字段报告的数字以皮秒为单位。
糟糕的。只是……太可怕了。