根据MS-Docs,它返回自计算机启动以来的毫秒数,但是当我与实际服务器启动时间进行比较时,我得到了不同的结果sys.dm_os_sys_info
。
以下是查询:
select sqlserver_start_time from sys.dm_os_sys_info;
select (sample_ms/1000) sample_sec, file_id from sys.dm_io_virtual_file_stats (DB_ID(), NULL);
select (DATEDIFF (SECOND, sqlserver_start_time, SYSDATETIME()) ) as Server_start_since_sec from sys.dm_os_sys_info;
这是结果:
如果sample_ms反映的是计算机/服务器的启动时间而不是 SQL 实例的启动时间(比较结果屏幕截图中的第 2 次和第 3 次)。这是否意味着DMF ( ) 中的统计值( 等num_of_reads
)返回自计算机重新启动或SQL 实例重新启动以来的累积读取,或者我们需要考虑不同的间隔时间?num_of_writes
sys.dm_io_virtual_file_stats
重启 SQL 服务之前
首先,这些起始值测量的不是同一件事。
sys.dm_os_sys_info
:sys.dm_io_virtual_file_stats
:对于实例的当前实例化,即自上次启动以来,它应该是每个文件上的累积读取/写入(“在此文件上读取的总字节数”)。此 dmf 替换的原始函数
sys.fn_virtualfilestats
返回一timestamp
列以帮助比较随时间收到的结果(“获取数据的数据库时间戳”)。sample_ms
现在这是一个 dmf,根据它的描述,它似乎填补了这个空白:在大多数实际情况下,读取/写入 SQL Server 的数据/日志文件的唯一内容就是它本身,因此除非实例已启动,否则这些不会递增。无论如何,除了随着时间的推移比较多个输出之外,似乎没有打算将此计数器用于任何目的。
我找不到规范的参考资料,说明所有dmvs 在实例重新启动时都会重置,但是一些基于索引的dmvs 文档确实指定了这一点:
许多 dmv 不会返回累积的信息,因此将它们描述为在实例重新启动时重置是没有意义的。但是,这似乎确实属于该类别,因此应予以注意。
我已经提出了更新文档的拉取请求,以反映它在实例启动时重置的事实。