Sql-Server

SQL Server 索引維護 - 有條件的重建

  • May 22, 2019

我有一個關於索引維護的問題。我有一個每週的流程來執行我所有的數據庫檢查等,以及每週重建索引。這些重建對我們的一個應用程序造成了一些鎖定壓力,我正在研究縮小重建規模的可能性,使它們在適當的情況下有條件。

現在,我明白每個案例和每個應用程序都是不同的,如果我希望它 100% 優化,就會施加不同類型的調整。但我正在尋找的是一個通用的“足夠好”的算法。

當我們執行 SQL 2016 Enterprise 時,看起來我可以線上進行索引重建,這可能有助於解決鎖定壓力,但如果能夠查看數據庫中的某些內容並說,嘿,“這本周可以完全跳過一個。”,要麼是因為它是我的參考表之一(自上週以來沒有表內容更改),要麼是其他一些緩慢變化的表……

由於各種原因,我不久前放棄了 Microsoft 的 SQL 維護計劃,現在我使用內部 c# 程序來完成我所有的 SQL 維護(事務日誌、每週完整​​備份、每週 checkdbs、每週索引維護等)。完成後給我發一封電子郵件,讓我知道事情是否順利,或者沿途向南某處。所以,我不介意在我的程式碼中添加一些查詢,以了解是否有條件地進行索引維護。

這完全是基於我目前項目的意見和觀察,我們處理超過 20 TB 的數據庫。我們不會對索引進行任何重建或重新組織,因為這是非常昂貴的操作。因此,請檢查這是否真的對您的性能有所幫助。相反,我們更關注通過更改或修改的統計資訊每天更新統計資訊。

如果需要,您可以使用具有出色參數的 ola hallegren 進行設置,否則使用 Microsoft 提供的參數。SQL Tiger 團隊在他們的 git hub 頁面中的自適應索引碎片整理過程中的此類活動做得非常出色

另請查看http://www.minionware.net/products/reindex/其可配置的直通表定義的參數。

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