我正在运行sql Server 2008 Enterprise Edition,并希望监视以下性能指标,即通过动态管理视图(在sql中):
Average/Maximum Read/Write I/O Waits in ms per database file
for sliding time window.
即:每个数据库文件4个数字:avg read wait,max read wait,avg write wait,max write wait.全部以ms为单位,全部用于一些理智(甚至更好的可配置)滑动时间窗口.
我怎样才能做到这一点?
PS:我有VIEW SERVER STATE权限,可以读取sys.dm_os_performance_counters,sys.database_files,sys.dm_io_virtual_file_stats等等
PS2:至少有一个工具(sql Server的Quest Spotlight 7)能够以每个数据库文件的毫秒数提供最大I / O等待.所以必须有一些方法..
解决方法
以下是SSMS的Activie Monitor使用的查询.它们将io_stall字段标记为总等待时间.您可以添加fs.io_stall_read_ms和fs.io_stall_write_ms字段以获取读/写特定数字.
SELECT d.name AS [Database],f.physical_name AS [File],(fs.num_of_bytes_read / 1024.0 / 1024.0) [Total MB Read],(fs.num_of_bytes_written / 1024.0 / 1024.0) AS [Total MB Written],(fs.num_of_reads + fs.num_of_writes) AS [Total I/O Count],fs.io_stall AS [Total I/O Wait Time (ms)],fs.size_on_disk_bytes / 1024 / 1024 AS [Size (MB)],fs.io_stall_read_ms FROM sys.dm_io_virtual_file_stats(default,default) AS fs INNER JOIN sys.master_files f ON fs.database_id = f.database_id AND fs.file_id = f.file_id INNER JOIN sys.databases d ON d.database_id = fs.database_id;
此查询仅为您提供总计.您必须以某个间隔运行它并将结果记录在带有时间戳的临时表中.然后,您可以根据需要查询此表以获取最小值/最大值/平均值.滑动时间窗口只是您在该表中保留的数据量以及查询的时间段的函数.