l46*_*kok 1 performance sql-server-2008-r2 sp-blitz
运行 SP_Blitz 表明我的驱动器的读/写性能很慢。进一步阅读,我最终登陆了这个查询来查看我的驱动器上发生的 IO 的实际统计数据:
SELECT a.io_stall, a.io_stall_read_ms, a.io_stall_write_ms, a.num_of_reads,
a.num_of_writes,
--a.sample_ms, a.num_of_bytes_read, a.num_of_bytes_written, a.io_stall_write_ms,
( ( a.size_on_disk_bytes / 1024 ) / 1024.0 ) AS size_on_disk_mb,
a.database_id,
db_name(a.database_id) AS dbname,
b.name, a.file_id,
db_file_type = CASE
WHEN a.file_id = 2 THEN 'Log'
ELSE 'Data'
END,
UPPER(SUBSTRING(b.physical_name, 1, 2)) AS disk_location
FROM sys.dm_io_virtual_file_stats (NULL, NULL) a
JOIN sys.master_files b ON a.file_id = b.file_id
AND a.database_id = b.database_id
ORDER BY a.io_stall DESC
Run Code Online (Sandbox Code Playgroud)
*Row #1 是数据库 mdf,#2 是事务日志
根据结果,我的数据库实际上应该无法使用,但事实并非如此。我们正在运行一个相当大的 OLTP 数据库,在任何给定的时间内都会发生数百个事务,但没有任何性能问题的迹象(至少我们没有从客户那里听到)。
我真的应该担心上述统计数据吗?是否存在我需要解决的实际问题,或者仅仅是查询对我们的案例不正确的情况?
如果有问题,我应该从哪里开始?
小智 5
你需要来划分io_stall_read_ms的num_of_reads,并且io_stall_write_ms通过num_of_writes。这将使您更明智地看到自您的实例上次陈述以来您所看到的读写停顿和总和。
然而,以这种方式使用这个 DMV 可以平均任何尖峰和隐藏模式,因此你需要经常从中取样。此外,我建议将您的页面预期寿命与读取延迟结合起来,从 SQL Skills 中使用 Jonathan Kehayias 的公式。
请注意,您需要查看每个 NUMA 节点的 PFE,如果您的应用程序是 OLAP,您不太可能获得出色的 PFE,您的顺序扫描速率是这里更重要的指标。