Sql-Server

碎片整理 - 重建索引 SQL Server 2005

  • January 20, 2012

我正在研究對數據庫進行碎片整理,我正在尋找以下 SQL 語句:

ALTER INDEX ALL ON mytablename
REBUILD WITH(ONLINE = ON)

當我從 中提取資訊時sys.dm_db_index_physical_stats,我看到百分比非常高 - 70%、80% 和 90%(!)。所以這告訴我我想要一個REBUILD,而不是一個REORGANIZE

在執行這些之前我有幾個問題REBUILDS

  1. 它可以在程序使用數據庫時執行嗎?(ONLINE = ON 告訴我是的,但我想確認它不會崩潰任何東西。)還是在不使用時執行更好?
  2. 我閱讀REBUILD會使事情執行得更慢。那是在重建索引的時候嗎?(或永遠之後)
  3. 重建所有索引/或更確切地說是每個索引需要多長時間?
  4. 有沒有我需要注意的副作用或其他資訊?這是生產/實時數據庫。

編輯:最後,重建它的最佳方法是什麼?循環遍歷百分比大於 30 的所有對象?要麼?

謝謝!

  1. 是的,您可以在數據庫與活動使用者聯機時重建。如果可能的話,最好在非高峰期進行。
  2. 在重建期間,您的查詢會執行得更慢,主要是由於重建索引的 I/O 成本。這有多明顯取決於您的系統的具體情況。性能損失僅在重建期間 - 而不是永遠。
  3. 同樣,重建的持續時間取決於您的特定設置。您應該嘗試在等效的開發或登台伺服器上執行它。
  4. 沒有其他相關的副作用。重建完成後,您將恢復正常執行。

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