SQL Server 2005 - 您应该多久重建一次索引?

时间:2009-08-25 21:53:03

标签: asp.net sql-server-2005 asp.net-membership indexing

我最近接手了一个项目,他们有一个SQL作业设置,每三个小时运行一次,重建ASP.NET成员资格数据库表中的索引。

这似乎相当高,每天重建索引8次。我每天约有2000个新用户,总共约有200万注册用户。

对于正确的索引重建计划,您会建议什么?

4 个答案:

答案 0 :(得分:11)

您的死锁肯定与重建索引有关。毫无疑问,这些索引不需要经常重建。至少应该考虑使用ONLINE选项,如果你可以在重建之前保持索引被删除。

以下是我们使用的指南:

  

索引时应重建索引   碎片大于40%。指数   应该在索引时重新组织   碎片在10%到40%之间。   索引重建过程使用更多CPU   它锁定数据库资源。   SQL Server开发版和   企业版有ONLINE选项,   可以在索引时打开   重建。 ONLINE选项将保留索引   在重建期间可用。

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

答案 1 :(得分:6)

一个好的经验法则是REBUILD,当超过30%的碎片时,重新组合在10%到30%之间。

对于少于1000页的表格,请不要理会,您也不会注意到,即使在运行REBUILD超过30%的表格后,通常也会留下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/

答案 2 :(得分:3)

捕获死锁图,你可以得到死锁的实际答案,而不是 guess 。鉴于死锁是(或至少应该是)相当罕见的发生(低于10 /秒),您可以非常安全地连接探查器很长时间并仅捕获 Locks/Deadlock Graph事件。 / p>

答案 3 :(得分:0)

重建是否会损害系统稳定性或占用太多系统时间?

如果您回答否 - 请勿触摸它:)