私は解決策を探していましたが、これまでのところ運がありません。
説明: 私 (社内の私) は、かなり高速で小規模な作業を行うストアド プロシージャを使用しています。これを SP_Small と呼びましょう。小さいので、更新があり、別のストアド プロシージャを実行します。したがって、SELECTS と UPDATES を 1 つの選択に組み合わせてアトミックにしようとしても、実際には実行できません。(私が偶然見つけた提案された解決策の1つ)
いくつかの異なるドキュメントを並行してデータベースにインポートするインポート メカニズムがあります。各インポートはトランザクション内にあります (インポートを起動するアプリケーションによって実行されます)。各インポートは SP_Small を呼び出して、いくつかのインポートと作業を行います。
問題: 現在、SP_Small は事実上アトミックですが、アクセスする (そして共有される) レコードは、外部トランザクションがコミットされるまでロックされたままになり、プロセス全体が並列ではなくシリアルになります。
要件: SP_Small をアトミックにし、同時に 1 つのプロセスだけが実行されるようにしますが、実行後は残りのプロセスを並行して実行できるようにします。
これは単純な (そして醜い :)) 問題の図です。明確にするのに役立つことを願っています。