obe*_*tet 8 sql sql-server sql-server-2008
我正在运行SQL Server 2008 Enterprise Edition,并希望监视以下性能指标,即通过动态管理视图(在SQL中):
对于滑动时间窗口,每个数据库文件的平均/最大读/写I/O等待时间(毫秒).
即:每个数据库文件4个数字:avg read wait,max read wait,avg write wait,max write wait.全部以ms为单位,全部用于一些理智(甚至更好的可配置)滑动时间窗口.
我怎样才能做到这一点?
PS:我查看服务器状态的权限,可以读取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;
Run Code Online (Sandbox Code Playgroud)
此查询仅提供总计。您必须以一定的时间间隔运行它,并将结果记录在带有时间戳的临时表中。然后,您可以查询此表以根据需要获取最小值/最大值/平均值。滑动时间窗口只是您在该表中保留多少数据以及您查询的时间段的函数。