更新时SSIS锁定表

时间:2018-05-24 13:41:50

标签: sql-server ssis transactions locking etl

我有一个SSIS包,在运行时会更新表。它使用临时表,然后使用缓慢变化的维度表将数据加载到仓库中。我们已将其设置为SQL代理作业,并且每两个小时运行一次。

包的隔离级别是可序列化的。读取数据库隔离级别已提交。

问题是当此作业运行时,此作业会阻止该表,因此客户端无法运行任何报告。它把它搞砸了。

那么对我来说避免它的最佳选择是什么?客户需要查看数据,同时我们需要每两小时更新一次表。

使用Microsoft SQL Server 2012(SP3-GDR)(KB4019092) - 11.0.6251.0(X64)

感谢。

2 个答案:

答案 0 :(得分:1)

您正在获得"锁定升级"。它是一个功能,而不是一个bug。 8 - )

SQL Server将大量较小的锁结合到表锁中以提高性能。

如果INSERT性能不是问题,您可以在事务内部的较小块中进行数据加载,并在每个块之后提交。

https://support.microsoft.com/en-us/help/323630/how-to-resolve-blocking-problems-that-are-caused-by-lock-escalation-in

答案 1 :(得分:1)

另一种选择是让您的客户/报告访问仓库表的克隆。

将您的ETL放入一个其他人无法读取的表中,并在完成后将表格与克隆一起切换。