Sql-Server

“sample_ms”和“num_of_reads”在“sys.dm_io_virtual_file_stats”中是什麼意思。stats的間隔時間是多少

  • November 21, 2019

根據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 服務之前

重啟 SQL 服務之前

重啟 SQL 服務後(無作業系統重啟) 在此處輸入圖像描述

首先,這些起始值測量的不是同一件事。

sys.dm_os_sys_info:

sqlserver_start_time -datetime - 指定SQL Server 上次啟動的日期和時間。不可為空。

sys.dm_io_virtual_file_stats:

sample_ms - bigint- 自電腦啟動以來的毫秒數。此列可用於比較此函式的不同輸出。


這是否意味著 DMF (sys.dm_io_virtual_file_stats) 中的統計值(num_of_reads、num_of_writes 等)返回自電腦重新啟動或 SQL 實例重新啟動以來的累積讀取數,或者我們需要考慮不同的間隔時間?

對於實例的目前實例化,即自上次啟動以來,它應該是每個文件上的累積讀取/寫入(“在此文件上讀取的總字節數”)。此 dmf 替換的原始函式sys.fn_virtualfilestats返回一timestamp列以幫助比較隨時間收到的結果(“獲取數據的數據庫時間戳”)。

sample_ms現在這是一個 dmf,根據它的描述,它似乎填補了這個空白:

此列可用於比較此函式的不同輸出。

在大多數實際情況下,讀取/寫入 SQL Server 的數據/日誌文件的唯一內容就是它本身,因此除非實例已啟動,否則這些不會遞增。無論如何,除了隨著時間的推移比較多個輸出之外,似乎沒有打算將此計數器用於任何目的。

我找不到規範的參考資料,說明所有dmvs 在實例重新啟動時都會重置,但是一些基於索引的dmvs 文件確實指定了這一點:

每當啟動 SQL Server (MSSQLSERVER) 服務時,計數器就會被初始化為空。

許多 dmv 不會返回累積的資訊,因此將它們描述為在實例重新啟動時重置是沒有意義的。但是,這似乎確實屬於該類別,因此應予以注意。

我已經提出了更新文件的拉取請求,以反映它在實例啟動時重置的事實。

引用自:https://dba.stackexchange.com/questions/253698