Sql-Server
更新統計全面掃描掛了?
我們有一個每周維護計劃,會進行典型的完整性檢查,然後對我們伺服器上的所有數據庫進行更新統計。
上週末,我們的工作似乎掛在了更新統計(全掃描)工作上。查看活動監視器,命令更新統計資訊的任務狀態似乎為 SUSPENDED。等待類型是 LCK_M_X。
我的問題:為什麼會被暫停?數據庫中正在對其進行統計的表上的鎖不能阻止它嗎?什麼會掛一個更新統計資訊?
我們能夠確定所討論的數據庫中只有一個表沒有更新其統計資訊。我們通過執行以下命令來做到這一點
select object_name (i.id)as objectname,i.name as indexname,i.origfillfactor,i.rowcnt,i.rowmodctr ,STATS_DATE(i.id, i.indid) as ix_Statistics_Date,o.instrig,o.updtrig,o.deltrig,o.seltrig from sysindexes i INNER JOIN dbo.sysobjects o ON i.id = o.id where rowcnt >1000 and i.name not like'sys%'and object_name(i.id)not like'sys%' order by objectname desc go
所以我們只在有問題的表上執行更新統計資訊。我們能夠複製有問題的場景,因為它仍在等待且未完成。因此,知道了我的等待程序的會話 ID,我查看了鎖表
select * from sys.dm_tran_locks
查看結果,我發現一個不同的會話 ID 與我的表的 Object_ID 相關聯。然後,我能夠殺死該會話 ID,並且更新統計資訊完成沒有問題。
我認為這裡發生的事情是,使用者打開了一個程序,該程序在我的表上具有排他鎖,並且可能與同步模式下的自動統計資訊一起,在執行我們的全掃描更新統計資訊時可能會導致日誌堵塞。