SSIS后果TABLOCK

时间:2013-01-21 16:20:48

标签: sql ssis sql-server-2008-r2

我有一个从tableA读取数据并将数据插入tableB的包。这个包可以多次并行运行(通常是3到5),但从不读取相同的数据。假设它在两个表上都有一个标志customerID,因此每个包的执行都将从特定的customerID读取数据。

我意识到如果我在目的地上不使用TABLELOCK,那么加载速度会快得多。我相信这是因为包的每次执行都是同时在tableB上插入数据,即使在页面级别发生某些锁定,整个表也不会被锁定。

所以我的问题是,在目的地上没有使用TABLELOCK的问题是什么?

PS:我正在使用快速加载,而customerId是表B上的聚集索引。

1 个答案:

答案 0 :(得分:1)

只要你的并行运行调用唯一的客户ID,那么不,没有真正的性能问题明智或死锁。

你真正应该至少知道两个问题:

1)并行任务插入数据和后续读取tableB的顺序。根据从tableB读取的实时情况,TABLOCK将有助于确保(但仍不能保证 - 如果一个客户有10,000行而另一个只有1行,那么第二个客户可能会“跳过”数据流任务处理中的第一个)您的并行运行仍按其执行顺序处理。因此,您最终可能会遇到数据在您认为不可用时的情况,因此如果订单很重要(我猜它不是或者您不应该并行运行)至少要注意这一点。

2)即使你没有启用TABLOCK,如果插件足够大,它也可能会自动从ROWLOCK跳到TABLOCK,所以你可能仍会因为某些工作而导致延迟和交错完成。