【问题标题】:Table lock in sql serversql server中的表锁
【发布时间】:2019-07-04 15:09:02
【问题描述】:

我有一个被 SSIS 包修改的表,这个 ssis 包并行运行 20 多个包,所有包都通过存储过程在同一个表中插入值,这个表应该有不同的记录。由于所有包都并行运行,因此很少有记录获得重复值。

我的问题是,如果我在此表上设置了锁定,并且 2 个进程/包尝试同时插入到表中,这将获得第一优先级,如果表 1 获得第一优先级,那么我会收到表 2 的错误消息否则它会等到表 1 释放锁。

在表上实施锁会对性能产生影响(我最初的思考过程,我已经准备好接受挑战了)。

谁能为从多个进程获取重复记录的问题提出解决方案。

谢谢

【问题讨论】:

    标签: sql-server stored-procedures ssis parallel-processing


    【解决方案1】:

    假设您的重复问题确实是由未锁定表引起的。 以下是一些可能会有所帮助的想法:

    • 将所有 20 多个任务的 TransactionOption(假设您在一个包中使用 20 多个“执行包任务”来运行其他 20 多个包)从“支持”更改为“必需”;

    • 不要并行运行所有任务,而是将它们按顺序排列。我建议以任何方式按顺序运行它们以确定重复的真正原因。

    编辑: - 如果我是你,我会尝试将所有 20+ 个包加载到 20+ 个单独的 Staging 表中,当所有包完成后,将所有 staging 表依次加载到您的目标表,并且应该很容易验证重复现在因为所有临时表都是本地的。

    【讨论】:

    • 感谢 Adam 的回复,是的,你是对的,我在包中有 20 多个执行包任务,第 1 点 - 你能告诉我交易选项在这种情况下如何工作,第 2 点点顺序过程将花费大量时间来完成执行。
    • 其实锁表的话,和按顺序运行没啥大区别。
    • 这就是我寻找其他方法的原因,因为我必须移动 TB 的数据。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多