0

多くのスレッドで編集できるテーブルがあるという問題が発生しています。各スレッドは、このテーブルを操作するトランザクションを作成します。トランザクションの完了に時間がかかる場合、他のスレッドは「Query Timeout Expired」という例外をスローします。 . トランザクションのタイムアウト設定がどこかにあると思います。

これに対処するには、スレッド ロックを使用できます。ただし、サーバー側でこれを行う方法はありますか? SQL サーバーでロックを作成できますか? どんな助けでもいただければ幸いです。

4

1 に答える 1

1

受信しているタイムアウトは「トランザクション」タイムアウトではありません。これは、一般的なクエリ タイムアウトです。このクエリは、Select、Update、Delete などである可能性があります。タイムアウト値は、通常、接続文字列で制御されます。

SQL Server で行、ページ、またはテーブルを具体的にロックできるとは思いませんが、これはおそらく良いことです。率直に言って、これは問題の核心ではありません。トランザクションの実行に時間がかかりすぎています。他のクエリがタイムアウトするほど時間がかかることはありません (おそらく少なくとも 30 秒)。トランザクションにこれだけの時間がかかるため、サーバーをひざまずかせることになります。トランザクションは、せいぜい数秒に抑える必要があります。

最初に、トランザクション (更新、削除、または挿入) を必要とするステートメントを確認し、SSMS のクエリ アナライザーでそれらを実行し、テーブルまたはインデックスのスキャンが実行されていないことを確認することをお勧めします。私の推測では、これは起こっており、トランザクションに関係するテーブルは大規模 (数十万行以上) にあります。

于 2012-12-19T17:24:22.850 に答える