Sql-Server
帶有 waitresource 數據庫的 SQL Server 阻塞報告
我們最近在我們的一台伺服器上發生了一些意外的塊。我們擷取了阻塞程序報告,他們將 waitresource 顯示為 waitresource=“DATABASE: 12:0”。以下是其中一份報告的範例。
<blocked-process-report monitorLoop="45476"> <blocked-process> <process id="process7db4d70c8" taskpriority="0" logused="10000" waitresource="DATABASE: 12:0 " waittime="24750" schedulerid="4" kpid="4556" status="suspended" spid="96" sbid="0" ecid="0" priority="0" trancount="0" lastbatchstarted="1900-01-01T00:00:00" lastbatchcompleted="1900-01-01T00:00:00" lastattention="1900-01-01T00:00:00" clientapp="App1" hostname="ServerMainFrame.domain.COM" hostpid="0" loginname="LoginA" isolationlevel="read committed (2)" xactid="0" currentdb="1" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack /> <inputbuf> </inputbuf> </process> </blocked-process> <blocking-process> <process status="suspended" waitresource="DATABASE: 12:0 " waittime="24998" spid="150" sbid="0" ecid="0" priority="0" trancount="0" lastbatchstarted="1900-01-01T00:00:00" lastbatchcompleted="1900-01-01T00:00:00" lastattention="1900-01-01T00:00:00" clientapp="Microsoft JDBC Driver for SQL Server" hostname="Server02.domain.com" hostpid="0" loginname="loginA" isolationlevel="read committed (2)" xactid="0" currentdb="1" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack /> <inputbuf> </inputbuf> </process> </blocking-process> </blocked-process-report>
我什至不確定這可能是一個 waitresource 或確定它的含義。通常,我看到的 waitresource 是表、頁、行等。顯而易見的是,數據庫上有一個鎖,沒有任何東西可以使用它,但不確定會發生什麼。可能是鎖升級?所以我的問題是,是否有人可以幫助了解這個 waitresource 是什麼以及可能導致它的原因。
在我查看正在發生的活動之前,該問題已得到解決,因此只需繼續執行阻止報告即可。我嘗試用Google搜尋,但找不到任何關於此的資訊。任何幫助或指向將提供幫助的資源的指針表示讚賞
發現問題。有幾個鏡像數據庫大約在同一時間故障轉移到輔助數據庫。我必須通過大量的塊報告才能找到這個。當發送故障轉移的命令發生時,它會鎖定數據庫,阻止任何東西使用它。當時正在執行的其他幾件事創建了一系列額外的塊。我看到的是額外的塊,而不是開始一切的原始塊。
這是正在執行的命令 -
USE [master];ALTER DATABASE [DBName] SET PARTNER FAILOVER
似乎這會顯示在 sys.dm_tran_locks 表中,但事實並非如此。此外,如果我們的監控工具當時正在工作,它可能會更容易辨識。
MSDN sys.dm_tran_locks文件顯示了資源和資源子類型的列表,包括影響數據庫鎖定的那些:
BULKOP_BACKUP_DB 具有批量操作的數據庫備份。 BULKOP_BACKUP_LOG 具有批量操作的數據庫日誌備份。 CHANGE_TRACKING_CLEANUP 更改跟踪清理任務。 CT_DDL 數據庫和表級更改跟踪 DDL 操作。 CONVERSATION_PRIORITY Service Broker 會話優先級操作,例如 作為創建代理優先級。 DDL 數據定義語言 (DDL) 操作 文件組操作,例如 drop。 ENCRYPTION_SCAN TDE 加密同步。 PLANGUIDE 計劃指南同步。 RESOURCE_GOVERNOR_DDL 資源管理器操作的 DDL 操作,例如 作為 ALTER RESOURCE POOL。 SHRINK 數據庫收縮操作。 STARTUP 用於數據庫啟動同步。