web-dev-qa-db-ja.com

「sys.dm_io_virtual_file_stats」での「sample_ms」と「num_of_reads」の意味統計の間隔時間は何ですか

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;

これが結果です

enter image description here

sample_msがSQLインスタンスの開始時間ではなくコンピューター/サーバーの開始時間を反映する場合(結果のスクリーンショットで2ndrdを比較)。統計値(num_of_readsnum_of_writesなど。)DMF(sys.dm_io_virtual_file_statscomputerの再起動以降、またはSQL Instanceの再起動以降、累積的な読み取りを返します。または、考慮する必要がある別の間隔時間がありますか?


SQLサービスを再起動する前

Before restart SQL Service

SQLサービスの再起動後(OSの再起動なし)enter image description here

1
Shekar Kola

まず、これらの開始値は同じものを測定していません。

sys.dm_os_sys_info

sqlserver_start_time-datetime-日付と時刻を指定しますSQL Serverが最後に起動した。 null可能ではありません。

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列を返しました。

これはdmfなので、sample_msはその説明に基づいてその空白を埋めるように見えます。

この列を使用して、この関数のさまざまな出力を比較できます。

ほとんどの現実的なケースでは、SQL Serverのデータ/ログファイルへの読み取り/書き込みonlyがそれ自体であるため、インスタンスが起動されない限り、これらは増加しません。いずれにせよ、複数の出力を経時的に比較する以外の目的でこのカウンタを使用する意図はないようです。

alldmvsはインスタンスの再起動時にリセットされるという正規の参照を見つけることができませんでしたが、 index based dmvsのドキュメントの一部はこれを指定しています:

SQL Server(MSSQLSERVER)サービスが開始されるたびに、カウンターは空に初期化されます。

Dmvの多くは累積的な情報を返さないため、インスタンスの再起動時にリセットされると説明しても意味がありません。ただし、これはそのカテゴリに分類されるようであり、そのように注意する必要があります。

インスタンスの起動時にリセットされるという事実を反映するようにドキュメントを更新するために pull request を作成しました。

1
LowlyDBA