“sample_ms”和“num_of_reads”在“sys.dm_io_virtual_file_stats”中是什麼意思。stats的間隔時間是多少
根據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 服務之前
首先,這些起始值測量的不是同一件事。
sqlserver_start_time -datetime - 指定SQL Server 上次啟動的日期和時間。不可為空。
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 不會返回累積的資訊,因此將它們描述為在實例重新啟動時重置是沒有意義的。但是,這似乎確實屬於該類別,因此應予以注意。
我已經提出了更新文件的拉取請求,以反映它在實例啟動時重置的事實。