Sql-Server

Sql Server Standard 2014:重新索引作業被其他事務鎖定

  • December 13, 2019

在我們的一個客戶上,我們已經Microsoft SQL Server 2014 - 12.0.4100.1 (X64)安裝了。這是一個繁重的事務模式(尤其是在夜間),我們有一個定期REINDEX維護工作,每天凌晨 4 點執行。

我們注意到,今晚重新索引作業在特定表上卡住了大約 45 分鐘,alter index因為它被另一個事務(UPDATE使用者發出的語句,我們系統的一個非常常見的事務)鎖定。

由於我們已經收到使用者的投訴,負責夜間檢查的人及時終止了交易(包括重新索引);當他殺死它時,目前的ALTER INDEX語句被阻止了 45 分鐘,但整個REINDEX工作在那一刻花了將近 4 個小時(他在上午 7:51 殺死了它)。

有沒有辦法避免REINDEX工作被其他事務阻止?

編輯:我們注意到的碎片級別(< 30%)表明我們可能會選擇 aREORGANIZE而不是 aREINDEX從而消除其他事務被 reorganize 鎖定的機會,但 reorganize 本身仍然可能被阻止。

我們有一個預定的 REINDEX 維護工作,每天凌晨 4 點執行。

等等..每天執行重新索引作業真的有必要嗎?你甚至看看索引是否碎片化?既然您說它是一個關鍵系統,我將冒昧地假設底層儲存速度很快,這進一步降低了每天重新索引的可能性。請考慮一下。

有沒有辦法避免 REINDEX 作業被其他事務阻塞?

如果你絕對想要這個,那麼在停機期間或當負載相對非常非常少並且沒有 DML 操作正在進行時執行索引維護。您可以使用線上索引重建(如果您有企業版),但這也需要鎖定並且可能會被阻止。再加上頻繁重建索引出日期統計數據,導致更多編譯

建議:使用Ola Hallengren Index 重建解決方案。

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