我一直在寻找解决方案,但到目前为止还没有运气。
描述:我(在公司中的意思是我)有一个存储过程,可以完成一些相当快速和小型的工作。让我们称之为 SP_Small。它很小,它有一个更新并执行另一个存储过程。因此,试图通过将 SELECTS 和 UPDATES 组合到一个选择中来使其具有原子性并不是真正可行的。(我偶然发现了一个建议的解决方案)
我们有一个导入机制,将几个不同的文档并行导入数据库。每个导入都在一个事务中(由启动导入的应用程序完成)。每次导入都会调用 SP_Small 来执行一些导入和工作。
问题:现在,SP_Small 实际上是原子的,但是它访问的记录(并且是共享的)在提交外部事务之前保持锁定,使得整个过程串行,而不是并行。
要求:使 SP_Small 原子化,确保只有一个进程同时执行它,但在它执行之后,其余的可以并行运行。
这是问题的简单(和丑陋:))绘图,希望有助于澄清: