每天晚上在什么情况下重新build立表格是一个好主意?

我inheritance了许多SQL Server 2005和2008系统(全部以简单恢复模式运行),每个系统当前每天都从SQL代理任务执行以下操作:

  • 备用
  • 收缩
  • 重新编制

我已经阻止了这种情况的发生,因为这可能会造成比解决问题更多的问题。 (服务器的使用是在一个滚动的5天的基础上存储一致的信息量,所以从删除行的空间将再次用于新的信息,没有太多的增长)。

但是,我不知道是否也应该停止夜间重新索引的工作。 由于收缩导致的大量索引碎片,导致收缩活跃是必要的。 我无法从互联网上find很多关于夜间重新编制索引是否合理的信息。 我应该禁用这个吗?

如果信息是滚动的,则表示每天插入的总数据库中有大部分(大约20%)。 这表明你的数据和你的索引是错误的20%。

这听起来像你应该重新索引的条件。

基本上,你的缩小和重新索引是简单的相互撤销(收缩片段表来恢复空间,然后reindex使用额外的空间进行碎片整理表)。

所以,既然你已经删除了收缩,你可能也可以删除每晚的reindex。 (在大多数情况下,可能还是build议每周进行一次完整的重新索引。)

但是,考虑到5天的数据滚动,在那些滚动表上实际上可能没有REINDEXES (取决于如何configuration聚集索引)。 这是我的意思:

假设你只插入 (没有更新),并且聚集索引是在date/时间上,或者只是一个不断增加的数值,那么内部表格的排列可能如下所示:

[ Day 1 ][ Day 2 ][ Day 3 ][ Day 4 ][ Day 5 ][ Empty ] 

在第6天,您从第1天删除数据,并从第6天插入数据:

 [ Empty ][ Day 2 ][ Day 3 ][ Day 4 ][ Day 5 ][ Day 6 ] 

并继续相同的模式,重新使用最近释放的空间:

 [ Empty ][ Day 2 ][ Day 3 ][ Day 4 ][ Day 5 ][ Day 6 ] [ Day 7 ][ Empty ][ Day 3 ][ Day 4 ][ Day 5 ][ Day 6 ] [ Day 7 ][ Day 8 ][ Empty ][ Day 4 ][ Day 5 ][ Day 6 ] [ Day 7 ][ Day 8 ][ Day 9 ][ Empty ][ Day 5 ][ Day 6 ] 

要知道这是怎么回事,我会使用SQL的表碎片查询(dm_db_index_physical_stats)在最后reindex,然后closuresreindexes几天。 如果碎片数量非常低,那么这可能是正在发生的事情。 如果他们很高,那么这可能不是一个准确的图片,你可能需要恢复你的reindexes。