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

データベースのデッドロックとは何ですか?

    一般に、デッドロックとは、2 つ以上のエンティティが一部のソースをブロックしており、循環的にソースをブロックしているため、いずれのエンティティも終了できないことを意味します。

    一例:テーブル A とテーブル B があり、A と B で更新を行う必要があり、使用時に両方をロックすることにしました (これは本当にばかげた動作ですが、現在は目的を果たしています)。 )。同時に、他の誰かが逆の順序で同じことを行います - 最初に B をロックし、次に A をロックします。

    年代順に、これが起こります:

    proc1:ロック A

    proc2:ロック B

    proc1:B をロック - proc2 が B を解放するまで待機を開始

    proc2:A をロック - proc1 が A を解放するまで待機を開始

    どちらも決して終わることはありません。それはデッドロックです。実際には、クエリが永久にハングすることは望ましくないため、通常はタイムアウト エラーが発生し、基盤となるシステム (データベースなど) は時間内に終了しないクエリを強制終了します。

    デッドロックの実際の例の 1 つは、家の鍵を車にロックし、車のキーを家にロックした場合です。



    1. ページネーションページ番号を制限する

    2. PDOから返されたオブジェクトを独自のクラスに設定する

    3. MySQLのページネーションはPHPになります

    4. innoDBデッドロックの処理