タスク、セッション、リクエスト、またはトランザクションが現在使用しているI/Oリソースの量を調べる方法は?
タスクとは、DMV DMV sys.dm_os_tasks と呼ばれるDMVを意味します。セッションとは、DMV sys.dm_exec_sessions
時々、セッションにはリクエストがあります。リクエストにより、DMV sys.dm_exec_requests またはセッションに代わりにトランザクションがあるかもしれません- sys.dm_tran_database_transactions
これらをI/O使用法にリンクするにはどうすればよいですか?
DMV sys.dm_os_tasks というDMVを確認しました。
DMV sys.dm_os_tasks には、SQLサーバーで現在実行されているプロセスの詳細を確認するための興味深い列があります。
sys.dm_os_tasks-pending_io_byte_countが表示されない
ただし、保留中のI/Oを処理している各タスクのI/Oをバイト単位で特定しようとすると、常に0になります。
これは、CXPACKETS WAITSを監視しようとしたときのクエリの結果の例です。
Pending_IO_countは問題ないようですが、pending_IO_by_countsは常にゼロです。
代わりになるものは何ですか?各並列プロセスのI/O使用量を測定したい。
実際、それは各セッションまたは要求のI/O使用だけである可能性があります。
リクエストのないセッションであっても、他のプロセスをブロックしている可能性があるため、確認すると良い場合があります。
クエリの実際の物理I/Oを探している場合は、 'ActualPhysicalReads'要素のXMLプランを確認する必要があります。
schemas.Microsoft.com/sqlserver/2004/07/showplan
ただし、これらの物理的な読み取りは、プランが初めてキャッシュされたときにのみ発生する可能性があります。以降の実行では、ディスクからではなくメモリからページをプルする可能性が高くなります。
HTH