为了最大程度地提高数据库性能,应在通过SSIS将大量数据加载到SQL Server 2008之后运行哪些命令


11

我写了一个SSIS包,将测试数据加载到一个空数据库中。一些表非常大(约7亿行)。SSIS软件包完成后,是否应该运行任何命令(作为学徒DBA!)以最大化数据库的性能?

例如,我执行了EXEC sp_updatestats但是它报告没有索引需要更新。

一旦加载了大量数据,是否有一系列事情要做?或者SQL Server 2008会为您完成所有这些工作吗?

Answers:


8

如果要加载到空数据库,则可以/应该采取步骤以避免加载后需要任何其他维护步骤。碎片化是敌人,这就是您要避免的事情。

  • 加载前删除所有NC索引。
  • 加载后,按顺序为每个表添加NC索引,即不要先向TableA再向TableB添加索引,然后再向TableA添加索引。这对碎片没有影响,但是可以缩短在非常大的数据集上添加索引所花费的时间(减少缓冲池的流失)。
  • 如果可以按聚簇索引顺序将数据插入表中,请保留聚簇索引。如果不能,则将数据转储到堆中并在装入后重建为聚集索引。

我将向您介绍ETL优化@Marian的非常全面的参考列表,而不是复制和粘贴,以解决我在BCP上提出问题。其中许多将同样适用于您的方案。


2
有趣的是,在从SQLCAT和SSIS到视频的链接上,他们的发现从未失去NC索引。猜猜这是“取决于情况”的另一种情况
billinkc

2
@billinkc是不是用于增量加载,而不是用于此问题的空数据库?无论哪种方式,SQLCAT测试都确实涉及一种在典型组织中很少见的硬件。
Mark Storey-Smith,

5

这取决于您拥有多少窗口,但是通常更新统计信息和重建/重新组织索引是一个很好的步骤。除此之外,您实际上不需要执行任何其他操作。

统计信息告诉查询优化器某个操作可能影响多少行,进而告诉SQL使用哪种方法来运行查询。插入数据可能会使分布不正确,如果您没有插入足够的行来触发自动更新模式下的统计信息更新,那么手动数据应该会有所帮助。如果您有窗口,请说保留统计信息更新部分。

添加数据时,索引可能会变得零散。重建或重新组织有助于减少这种情况,从而在实际访问数据时可以提高性能。


4
按照索引的观点,在SQLCAT的SSIS视频之一中,他们还提出了一条经验法则,即如果您的数据增长> 100%并且只有一个NCI,则删除并重新创建它们。如果大于10%,并且NCI有2个以上,则删除和重新创建将产生更好的性能。
billinkc 2011年

2
只是为了澄清Bill的意见-我认为他是在建议暂时删除创建它们的意思是删除索引,先执行数据加载,然后重新创建索引。重建后。无论如何,我都这么认为:-)是的,很高兴,我对该评论+1了。
Mike Walsh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.