sql >> データベース >  >> RDS >> Sqlserver

t-SQL 複合ステートメントが原因でデッドロックが発生しますが、その理由は何ですか?

    保持するロックを増やすか減らす必要があります。

    最も簡単な答えは、NOLOCK のどちらかにすることです (最高のパフォーマンス) または TABLOCKX (考える必要のない一貫性)。

    with (nolock) が使えない場合 一貫性の要件により、 with (tablockx) を追加できます .これは事実上、一度に 1 つのスレッドのみが like ステートメントを実行できることを意味します - 同時実行性はありません.

    別の方法は、要件をより詳細に分析することです。これは、テーブルを更新する理由、データの目的などを理解することなく行うことはできません。

    たとえば、このステートメントは本当にトランザクションに含まれている必要がありますか?ハウスキーピングの匂いがします:

      DELETE FROM [dbo].[t_Log_2] 
      WHERE [idtm]<'2011-03-12 08:41:57';
    

    トランザクションからそれを取り出して別のバッチに入れると、問題が解決することがあります。




    1. Windows7でpostgresqlユーザーパスワードを変更/リセットする

    2. 結合ステートメント内のMYSQLSelectMAX Date

    3. Oracleシーケンスを既存の列の次の値にリセットする最良の方法は?

    4. 時間値を保持した動的PL/SQL日付パラメータ