技术开发 频道

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

  【IT168 专稿】本文将讨论如何设计高性能、并行处理能力强的SSIS包,识别性能差劲的SSIS包,SSIS包中的分布式事务,以及如何在包执行失败的地方重新开始包的执行。

  第一篇:SQL Server集成服务非常好的实践:语句优化
  第二篇:SQL Server的SSIS非常好的实践:优化数据表

  非常好的实践10:使用并行执行提升性能


  通过并行执行包和数据流任务,SSIS实现了较好的性能,SSIS包和数据流任务的并行执行可以由SSIS的两个属性进行控制。
MaxConcurrentExecutables:它指定一个包内的最大并行执行数(包内不同的任务),即SSIS运行引擎可以创建的线程数量,如果你的包制定的是连续工作流,这些属性不会有任何差异,但如果你的包制定了并行任务,这个属性就需要改变,其默认值是-1,表示所有可用的处理器数+2,如果你的处理器支持超线程,那它就是所有逻辑处理器的数量+2。

  EngineThreads:MaxConcurrentExecutables是SSIS运行时引擎并行执行时使用的属性,EngineThreads是数据管道引擎使用的属性,在SSIS 2005中默认值是5,在SSIS 2008中默认值是10,这个属性指定源线程(从源抽取数据)和工作线程(执行数据转换和加载)的数量,这些线程是由数据流管道引擎创建的,管理数据流任务中数据的传输和转换。如果EngineThreads的值为5,表示最大可以创建5个源线程和5个工作线程。注意,这个属性仅仅是给数据流管道引擎的一个建议,管道引擎可以视需求创建更多或更少的线程。

  假设你有一个包,它有5个并行数据流任务,MaxConcurrentExecutables属性的值为3,当你开始执行这个包时,运行时将会并行启动3个数据流任务,任何数据流任务执行完时,下一个等待的数据流任务就会启动,以此类推,此时在数据流任务内发生的事情是由EngineThreads属性控制的。在非常好的实践6中我已经谈到,一个数据流任务会被拆分成多个执行树,数据流管道引擎会创建源和工作线程,它们的数量等于EngineThreads属性的值,也就是可以并行执行的执行树的数量。如果你将EngineThreads的值设为5,那么你的数据流任务就会被拆分成5个执行树,但并不意味着所有执行树会并行执行。

  在修改这些属性时一定要非常小心,在应用到生产环境之前进行彻底的测试是必要的,因为如何正确配置了这些属性,在系统有限的资源限制下,通过并行执行可以提高性能,但如果配置不当,也会损害性能,因为从一个线程到另一个线程存在太多的上下文切换,建议创建并行执行的线程数量不要超过可用的处理器数量。
 

  非常好的实践11:什么时候使用时间日志,什么时候应该避免使用事件日志

  日志时诊断运行期间发生的问题的非常好的方法,当你的代码没有按预期执行时,它可以帮上大忙。现在,几乎所有的编程语言都提供了日志机制,通过日志确定异常问题或运行失败的根本原因。SSIS允许你开启日志功能,它允许你选择不同的事件和组件记录日志,并且可以指定日志的存放位置。

  虽然日志可以帮你确定问题的根本原因,但它会引起性能下降,特别是如果过度使用日志,性能下降会更明显,因此我建议你仅当必要时才开启日志功能,你可以动态设置LoggingMode属性的值来启用或禁用日志功能,当你怀疑某个包有问题时,你可以开启日志功能,并选中合适的事件进行记录。

  非常好的实践12:使用性能计数器监控SSIS性能

  除了日志可以进行性能诊断外,SSIS还引入了性能计数器来监控SSIS运行时和数据流管道引擎的性能。例如,SSIS包实例计数器表示运行在系统上的SSIS包数量,行读取和行写入计数器分别表示来自源的总行数和写入到目标的总行数,缓冲区使用和缓冲区内存计数器分别表示创建的总缓冲区数量和缓冲区使用的内存大小,缓冲区输出是一个非常重要的计数器,表示当物理内存不足时写入到磁盘的缓冲区数量,BLOB字节读、BLOB字节写和BLOB文件使用计数器分别表示BLOB数据传输时BLOB字节读、写和数据流引擎目前在使用的用于输出BLOB数据的文件的数量。

0
相关文章