技术开发 频道

SQL Server SSIS非常好的实践:提升执行性能

  如果你从安装有SQL Server和SSIS的Windows Server 2003升级到Windows Server 2008,SSIS性能计数器将会消失,因为升级过程移除了这些性能计数器,如果想找回这些性能计数器,请参考这篇知识库文章(http://support.microsoft.com/kb/955632)。

  非常好的实践13:SSIS中的分布式事务及其影响

  SSIS允许你将多个可执行程序组合到一起,然后通过分布式事务在一个事务中执行,你需要启动Windows服务中的分布式事务协调处理器服务,起初一听起来感觉很酷,但它可能会有阻塞问题,特别是当某个任务的执行周期很长时,很容易发生阻塞。例如,假设在队列中你有一组数据流任务,一个Web Service任务,然后又是一个数据流任务,第一个数据流任务从源抽取数据,需要几分钟时间,Web Service任务从一个Web Service抽取数据,需要花几个小时,最后的数据流任务合并这些数据,并将它们上载到最终表中。现在如果你在一个事务中执行这三个任务,资源将会被第一个任务锁定,直到其结束,即使它不需要Web Service任务执行需要的资源。

  因此即使SSIS提供了分布式事务的功能,但也应该谨慎使用,即使你真要使用它,也要及时将任务清除出组,并要谨慎设置IsolationLevel属性。我的建议是尽可能避免使用这个特性,转而寻求其他替代解决方案。

  非常好的实践14:检查点特性如何帮助包重启

  SSIS有一个很酷的新特性叫做检查点(Checkpoint),它允许你的包在下次执行时,从上次失败的地方开始启动,这样可以节省不少执行时间。你可以通过设置包的三个属性(CheckpointFileName,CheckpointUsage 和 SaveCheckpoints)开启用这个新特性,除此之外,你还需要将所有需要重启任务的FailPackageOnFailure属性设为True,设置了这个属性后,执行失败时会将相关信息捕获到检查点文件中,下次执行时就从上次失败的地方开始执行起走。

  那它是如何工作的呢?当你为某个包启用检查点属性后,执行状态会写入到检查点文件中,这个文件的名字和位置是通过CheckpointFileName属性指定的。下一次执行时,运行时引擎会参考检查点文件,在重新执行包之前,先查看最后一次执行的状态,如果它发现最后一次执行的状态为失败,它就知道最后一次失败的地方,然后就从那个地方重新开始执行。如果在下一次执行前你删除了这个文件,包将会从头开始执行。

  启用这个特性后,在下一次执行时,你可以节省大量的时间,因为它会跳过执行成功的步骤。这里需要注意的是,你可以让一个任务加入检查点,包括数据流任务,但它不能应用到数据流任务内,即你只能在数据流任务级别启用它,不能在数据流任务内部使用检查点。假设你有一个数据流任务,并将FailPackageOnFailure属性设为True让其加入检查点,现在在数据流任务内,你有5个连续转换,前四个都执行成功了,在第五个时执行失败了,在下一次执行时,还是会从第一个转换开始执行,前四个转换会再执行一次。

0
相关文章