0

SQL Server テーブルがあり、このテーブルはバックグラウンド ワーカー マルチスレッド呼び出しを使用して 5 分ごとにバッチ ジョブによって更新されます。また、バッチジョブでテーブルを挿入するときにスレッドロックを使用しています。アプリケーションのユーザーは、同じデータに同時にアクセスできます。C# でビジネス ロジックを作成しています。これに最適で最適化されたソリューションは何ですか? この状況でスレッドロックを使用できますか?

4

1 に答える 1

1

あなたが抱えている(または予想される)問題は何ですか?

SQL Server は、多数の同時接続とユーザーによるデータの更新、挿入、読み取りを処理できるように作成および最適化されています。お任せください!

バックグラウンド ワーカー スレッドがテーブルを更新すると、更新する行に排他的 (X) ロックがかかりますが、それらの行にのみ適用されます (一度に 5000 行を超えて更新しない限り)。

その間、テーブル内の他の行を読み取ることができます - まったく問題はなく、デッドロックは見えません....

この問題は、1 回のトランザクションで 5000 を超える行を更新した場合に発生する可能性があります。SQL Server は、あまりにも多くのロックを追跡する必要がないようにロック エスカレーションを実行し、テーブル全体を (X) ロックでロックします。その更新トランザクションが終了するまで-読み取りはもうできません-しかし、それらは通常のトランザクションロックであり、デッドロックではありません。

では、あなたの問題/問題はどこにありますか?

于 2013-05-15T19:05:25.407 に答える