2009-08-25 110 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/