SSIS:Truncate表语句导致表上的LCK_M_SCH_S锁定

时间:2018-03-21 10:25:36

标签: sql-server ssis deadlock locks

我有一个SSIS包,包含Begin和Commit / Rollback事务块中的2个主要块 1.截断表(带截断表查询) 2.导入数据(从平面文件导入数据并插入到这些截断的表格)

当我运行包时,工作就会挂起。活动监视器显示已创建阻止进一步执行的LCK_M_SCH_S锁。

有时候这项工作有时并非如此。 要添加,如果我单独截断这些表并运行包删除截断块,它执行正常。 Activity Monitor on Lock

另外,要添加的不仅有一个导入数据组件。我们有6个不同表的大约6个导入数据组件。暂时我只在屏幕截图中保留一个

Control flow

Data flow for Import Data component

1 个答案:

答案 0 :(得分:0)

查看截图,我要验证的第一件事是在OLE DB连接管理器上将属性RetainSameConnection设置为true(右键单击CM,选择Properties,找到RetainSameConnection)。默认值为False。

如果这解决了问题,那么根本原因是您在尝试修改同一资源的不同事务中有两个请求。

如果您已将Connection Manager的属性切换为true,那么我的下一个猜测是您要将数据流“Import Data”的DelayValidation属性设置为True。

如果这解决了问题,那么根本原因是组件正在尝试验证目标表的元数据并且被truncate语句阻止(反之亦然)。设置DelayValidation将阻止程序包验证该特定任务,直到最后一秒为止 - 让其他进程有时间离开。这似乎不太可能,但这是该软件包阻止自身的唯一机会。