2009-08-25 48 views
7

我最近接管了一個項目,他們有一個SQL作業設置,每三個小時運行一次,這會重建在ASP.NET成員資格數據庫表中找到的索引。SQL Server 2005 - 應該多長時間重建索引?

這似乎相當高,每天重建索引8次。我每天約有2000名新用戶,總共約有200萬註冊用戶。

對於正確的索引重建計劃,您有什麼建議?

回答

11

你死鎖絕對可以與索引的重建。毫無疑問,這些索引不需要經常重建。儘管您應該考慮使用ONLINE選項,但如果可以在重建之前保持索引不被刪除,至少應該考慮使用ONLINE選項。

下面是我們使用的準則:當指數 碎片是大於40%

指數應該被重建。當索引 碎片在10%到40%之間時,索引 應該重新組織。 索引重建過程使用更多CPU 並鎖定數據庫資源。 SQL Server開發版和 企業版具有選項ONLINE, ,可在索引爲 時重新開啓。在線選項將在重建期間保持索引 可用。

來源:http://blog.sqlauthority.com/2007/12/22/sql-server-difference-between-index-rebuild-and-index-reorganize-explained-with-t-sql-script/

0

重建是否會影響系統穩定性或系統時間過長?

如果回答否 - 不要去碰它:)

+0

它不會出現,但我始終與新用戶註冊當天得到一些死鎖問題。我想知道這是否由於索引重建而發生。 – 2009-08-25 21:56:12

+0

取決於您是在進行在線還是在線重建。如果它離線,那麼它會導致死鎖,因爲它會在索引上放置一個讀鎖。如果它在線,它只會在索引上放置一個模式鎖。 – 2009-08-25 22:02:49

3

捕獲死鎖圖形,你有什麼是死鎖的實際答案,而不是一個猜測。鑑於僵局是(或至少應該)是一個相當罕見的事件(低於10秒),你可以很安全地連接Profiler很長一段時間,並捕獲只有Locks/Deadlock Graph事件。

6

一個很好的經驗法則是REBUILD當超過30%的零碎,REORGANIZE時介於10%和30%之間。

不要擔心小於1000頁的表格,您不會注意到,甚至在運行超過30%的REBUILD之後,它通常會保持在30%。

您可能應該針對平均數據庫,最多不超過每週重建/重組。如果您不得不經常對這些索引進行碎片整理,那麼您可能需要重新查看您的填充因子和填充。

批量數據加載之後會出現一個異常,在這種情況下,對索引進行分段可能很常見(有時最好禁用索引或刪除索引並重建,或根據所加載的數據進行重建)。

因此,總而言之,每天8次似乎過多。

參考文獻:
http://technet.microsoft.com/en-us/library/ms189858.aspx
http://www.sqlmusings.com/2009/03/15/a-more-effective-selective-index-rebuildreorganize-strategy/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/