Sql-Server

如何找出任務、會話、請求或事務目前正在使用多少 i/o 資源?

  • October 14, 2015

如何找出任務、會話、請求或事務目前正在使用多少 i/o 資源?

任務是指 DMV 稱為DMV sys.dm_os_tasks。會話是指 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 server 中執行的程序的更多資訊。

sys.dm_os_tasks - 不顯示pending_io_byte_count

但是,當我嘗試確定每個任務正在處理多少 I/O 時,以字節為單位的待處理 I/O 始終為零。

在此處輸入圖像描述

這是我嘗試監控某些 CXPACKETS WAITS 時查詢結果的範例。

Pending_IO_count 似乎沒問題,但 pending_IO_by_counts 始終為零。

有什麼替代方法?我想測量每個並行程序的 I/O 使用情況。

事實上,它可能只是每個會話或請求的 I/O 使用情況。

即使是沒有請求的會話有時也很好看,因為它們可能會阻塞其他程序。

在此處輸入圖像描述

如果您正在查找查詢的實際物理 I/O,則應在 XML 顯示計劃中查找“ActualPhysicalReads”元素:

schemas.microsoft.com/sqlserver/2004/07/showplan

但是,這些物理讀取可能只會在第一次記憶體計劃時發生。隨後的執行更有可能從記憶體中提取頁面,而不是從磁碟中。

高溫高壓

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