任何人都可以建议,在SSIS的OLEDB目标内部使用SQL命令访问模式是否是最佳实践? 这种访问模式的优缺点可能是什么。 预先感谢。
答案 0 :(得分:1)
与使用SQL命令相比,使用Table or view - fast load
选项更有可能获得更好的性能。默认情况下,使用SQL命令将不会利用与快速加载选项相同的功能。通过使用快速加载,这将在内部用作BULK INSERT
。此选项还获得互斥(X
)页锁和意图互斥(IX
)表锁,而SQL Command选项将仅采用共享(S
)和架构稳定性({{1 }})锁定相应的对象。您可以通过Sch-S
或扩展事件(例如sys.dm_tran_locks
事件)查看这些锁来进行确认。如果您使用扩展事件,则在执行此操作时,为了使您的交易更容易区分,请在连接字符串中设置lock_acquired
属性,然后进行查找。 Application Name
表锁将阻止其他人在此操作期间访问该表,并且在考虑这两个选项时可能要权衡潜在的阻塞。
如果目标服务器是SQL Server表或视图,则建议使用SQL Server目标服务器。但是,此选项仅用于加载到本地目的地,并且在计划长期开发时需要考虑此限制。因此,如果您当前的目标是本地目标,但几年后可能会改变,那么OLE DB目标将是更好的选择。与OLE DB目标的快速加载选项类似,这将利用X
功能,但是SQL Server目标具有在加载目标表之前对列数据应用转换的优点。通过将BULK INSERT
设置为false,SQL Server目标可以避免OLE DB目标的表锁定。我发现使用SQL Server Destination往往比OLE DB Destination表现更好,但是您应该使用专门模拟测试环境的测试环境来验证这一点,该环境将在执行过程中自行评估结果。下面是有关目的地类型的MSDN参考。