私のアプリケーションは、レコードをテーブルに挿入するローカル DB にアクセスします (1 日あたり +-3000 万から 4000 万)。データを実行および処理し、これらの挿入を行うプロセスがあります。プロセスの一部には、一意の ID テーブルから ID を選択することが含まれます。これは、単純な
Begin Transaction
Select top 1 @id = siteid from siteids WITH (UPDLOCK, HOLDLOCK)
delete siteids where siteid = @id
Commit Transaction
次に、そのテーブルから別のステートメントを使用してその ID をすぐに削除し、他のプロセスがそれを取得しないようにします。これは途方もないタイムアウトの問題を引き起こし、それにアクセスするプロセスは 4 つしかありませんが、私は驚いています。上記のIDを使用してレコードが挿入されたかどうかを確認するためにメインの投稿テーブルをチェックすると、タイムアウトの問題も発生します。高速で実行されますが、すべてのデッドロックとタイムアウトがあるため、これは設計が不十分であることを示しており、災害のレシピであると思います.
何かアドバイス?
編集
これは、ここにいる他の誰かが助けてくれた実際の声明です。次に、削除を削除し、個別に実行されるステートメントとしてコードに含めました。ここで order by 句は本当に役に立ちますか?