默认情况下,SSIS 包是线程安全的吗?
它们可以并行调用吗?(一般来说)
如果您将它们视为与数据库的连接,则它们尽可能地是线程安全的。我认为更关键的问题是当包裹碰到桌子时桌子会被锁定。
SSIS 包只能做它被告知要做的事情。如果您正在转换一个表,它可能会在操作生效时被锁定。如果它们不首先超时,这将迫使作业或多或少地串行。如果您正在处理数据,您可能会摆脱并行运行的东西。
所以你的问题的答案是“是的,但是”。底层数据访问将决定事情是否可以并行运行。
是的,SSIS 包是线程安全的。您还可以通过多种方式控制并发:
可以将单个包设置为运行有限数量的线程。包属性“MaxConcurrentExecutables”控制它。
可以使用依赖项设置顺序运行的包。您可以在包内或从调用子包的主包中执行此操作。
MaxConcurrentThreads 属性可以在 DTExec.exe 的命令行上被覆盖
如果您需要减少锁定和争用问题,您可以设置事务隔离属性或编写带有 nolock 提示的数据库查询。显然,您需要密切关注任何潜在的并发或脏读问题。
您可以在运行包的数据库上使用分析器或 perfmon 来查找锁定问题的迹象。无需对数据库调优问题进行冗长的讨论,这本身就是一个相当大的话题,在闩锁和锁定等待统计数据中寻找大数字作为可能的瓶颈的迹象。