我最近接手了一个项目,他们有一个SQL作业设置,每三个小时运行一次,重建ASP.NET成员资格数据库表中的索引。
这似乎相当高,每天重建索引8次。我每天约有2000个新用户,总共约有200万注册用户。
对于正确的索引重建计划,您会建议什么?
答案 0 :(得分:11)
您的死锁肯定与重建索引有关。毫无疑问,这些索引不需要经常重建。至少应该考虑使用ONLINE选项,如果你可以在重建之前保持索引被删除。
以下是我们使用的指南:
索引时应重建索引 碎片大于40%。指数 应该在索引时重新组织 碎片在10%到40%之间。 索引重建过程使用更多CPU 它锁定数据库资源。 SQL Server开发版和 企业版有ONLINE选项, 可以在索引时打开 重建。 ONLINE选项将保留索引 在重建期间可用。
答案 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)
重建是否会损害系统稳定性或占用太多系统时间?
如果您回答否 - 请勿触摸它:)