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

デッドロック パズル:犠牲者はリソースを所有しておらず、デッドロックを解決するために殺すために使用されます

    ロックのコンテキストでは、テーブルとそれに関連するインデックスは別個のエンティティです。 2 つの個別のテーブル間ではなく、テーブルとそのインデックス間でデッド ロックが発生することがあります。

    この問題が発生する可能性が最も高いのは、インデックスでロックが取得され、次に関連するテーブル (つまり、バー) で別のロックが取得されてデータ ルックアップが実行される場合です。挿入中は、これが逆の順序で発生します。最初に、テーブル (つまりバー) がロックされて更新され、次にインデックスがロックされます。

    select foo 
    from bar 
    where @someId = 0 OR SomeId = @someId
      

    SomeId と foo の両方を含むカバリング インデックスを (選択を支援するために) 追加できますか?このようにして、ルックアップを完全に回避し、問題の発生を防ぎます。

    デッドロック フレームではなく、クエリ プランを投稿できますか?



    1. MySQLの`IN()`でコンマ区切りの文字列を使用する

    2. PostgreSQL、最小日と最大日の間の行数

    3. メッセージに返信する平均時間

    4. SQL:SQL構文にエラーがあります。使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください