我有一个SSIS包,在运行时会更新表。它使用临时表,然后使用缓慢变化的维度表将数据加载到仓库中。我们已将其设置为SQL代理作业,并且每两个小时运行一次。
包的隔离级别是可序列化的。读取数据库隔离级别已提交。
问题是当此作业运行时,此作业会阻止该表,因此客户端无法运行任何报告。它把它搞砸了。
那么对我来说避免它的最佳选择是什么?客户需要查看数据,同时我们需要每两小时更新一次表。
使用Microsoft SQL Server 2012(SP3-GDR)(KB4019092) - 11.0.6251.0(X64)
感谢。
答案 0 :(得分:1)
您正在获得"锁定升级"。它是一个功能,而不是一个bug。 8 - )
SQL Server将大量较小的锁结合到表锁中以提高性能。
如果INSERT性能不是问题,您可以在事务内部的较小块中进行数据加载,并在每个块之后提交。
答案 1 :(得分:1)
另一种选择是让您的客户/报告访问仓库表的克隆。
将您的ETL放入一个其他人无法读取的表中,并在完成后将表格与克隆一起切换。