Sql-Server

死鎖圖中顯示的過程代表什麼?

  • September 11, 2021

我有一個由多個使用者使用的 Windows 應用程序,數據庫中經常存在與鎖定資源相關的死鎖。

查看死鎖圖,我看到 2 個程序和 2 個資源,箭頭代表自己/請求,並且 1 個程序被殺死以允許另一個程序繼續。到目前為止似乎合乎邏輯。

我試圖了解死鎖圖中的程序究竟代表什麼,因為將滑鼠懸停在程序上時顯示的查詢與持有資源鎖的查詢不同。所以假設有一個很長的事務-開始事務,然後是 100 行 sql 和送出。現在每個 sql 程式碼會在單個程序中執行嗎?

您需要閱讀SQL Server 調度程序準確了解其工作原理。

簡單的解釋是,她的 SQL Server OS (SQLOS) 是一個非搶占式調度程序,其中所有查詢都在內部排隊,然後 SQLOS 將在其工作執行緒上調度任務,這些工作執行緒在服務啟動時保留。

所以連接和工作執行緒(程序)之間沒有一對一的關係。

有很多關於如何閱讀死鎖圖的資訊,我喜歡這個系列

死鎖圖中的程序 ID 是表示特定工作單元的內部 ID。它與作業系統的程序 ID 無關。就作業系統而言,只有一個程序。它純粹是 SQLOS 內部的,它是管理工作執行緒和 UOW 的內部調度程序。

就並行性而言:這是正確的,目前尚不清楚實際問題是什麼。該過程附加到原始查詢。

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