序文ある日、突然 MySQL の次のキー ロックについて尋ねられ、私の即座の反応は次のようなものでした。 これは一体何ですか? ? ? このスクリーンショットでは何も見えません。 よく見ると見覚えがあります。これは「MySQL 45 Lectures」の内容ではないでしょうか。 ネクストキーロックとは
公式サイトの説明は、大まかに言うと、次のキー ロックは、インデックス レコードに対するレコード ロックと、インデックス レコードの前のギャップに対するギャップ ロックの組み合わせである、ということです。 まず自分自身にたくさんの小さな疑問符を付けてみませんか? ? ?
何も分からないので、最初から練習しなくてはいけません! まず、Ding Qi 氏の「MySQL 45 Lectures」の結論を見てみましょう。 この結論を読めば、ほとんどの疑問は解決するはずですが、注意が必要な非常に重要な一文が1つあります。MySQL したがって、上記のルールは現在のバージョンには適用できない可能性があります。以下では、 環境の準備MySQL バージョン: 8.0.25 分離レベル: 繰り返し読み取り (RR) ストレージエンジン: InnoDB mysql> @@global.transaction_isolation、@@transaction_isolation\G を選択します。 mysql> テーブル t\G の作成を表示します Docker を使用して MySQL をインストールする方法については、別の記事「Docker を使用して MySQL をインストールして接続する」を参照してください。 主キーインデックスまず、主キーインデックスの次キーロックの範囲を確認しましょう。 このときのデータベースデータは図の通りです。主キーインデックスの場合、データギャップは以下のようになります。 主キーの等価値クエリ - データが存在する mysql> begin; select * from t where id = 10 for update; この SQL ステートメントは ロック情報は # mysql> performance_schema.data_locks から * を選択します。 mysql> performance_schema.data_locks\G から * を選択します 具体的なフィールドの意味については、公式ドキュメントを参照してください。 結果には主に、エンジン、ライブラリ、テーブルなどの情報が含まれます。次のフィールドに注目する必要があります。
結果は明らかです。ここでは、IX ロックがテーブルに追加され、主キー インデックス ID = 10 のレコードに 同様に、 結論として、次のことが言えます。 主キー値をロックし、その値が存在する場合、テーブルにインテンション ロックが追加され、主キー インデックスに行ロックが追加されます。 主キーの等価値クエリ - データが存在しませんmysql> id = 11 の場合、更新時に t から * を選択します。 データが存在しない場合は、どのようなロックが追加されますか?ロックの範囲は何ですか? 検証する前に、データのギャップを分析します。
data_locks を使用してロック情報を分析します。 ロック情報 このとき、別のセッションで SQL を実行すると、答えは明らかです。id = 12 は挿入できませんが、id = 15 は更新できます。 データが存在しない場合は、主キーの等価値クエリによって、主キー クエリ条件が配置されているギャップがロックされることがわかります。 主キー範囲クエリ(キーポイント)mysql> begin; select * from t where id >= 10 and id < 11 for update; 「MySQL 45 Lectures」の分析によると、次のような結果が得られました。
data_locks の初見 テーブル ロックに加えて、id = 10 の行ロック ( したがって、実際には id = 15 を更新できます。つまり、 結果の検証も正しく、id = 12 は挿入がブロックされ、id = 15 は正常に更新されます。 範囲の右側に等しい値のクエリが含まれている場合はどうなりますか? mysql> begin; select * from t where id > 10 and id <= 15 for update; この SQL を分析してみましょう: また、data_locksもご覧ください 主キー インデックス id = 15 に対して X ロックが 1 つだけ追加されていることがわかります。 id = 15 が更新できることを確認しますか? id = 16 を挿入できるかどうかを再度確認しますか? 問題はないことがわかりました! もちろん、ここにいる友人の中には、「MySQL 45 Lectures」に次のキーをロックするバグがあると言う人もいるでしょう。 このバグは修正されたようです。修正されたバージョンは 参考リンクアドレス: 8.0 リリースノート 検索キーワード: バグ #29508068) それぞれ 8.0.17 で再現できます: 8.0.17 では、
現在、 data_locks データを比較します。 赤い下線部分に注意してください。バージョン 8.0.17 では、 要約するこの記事では、主に主キーをロックする際の次キーのロック範囲を実際の操作を通じて検証し、資料を参照したりバージョンを比較したりしてさまざまな結論を導き出します。 結論1:
最適化後、遅く開きます。これは、最適化後、主キーの間隔が直接遅く開くためなのか、バグなのかはわかりません。特定の友達が試すことができます。 結論2
主キーの次キーロック範囲は大体把握できました。なお、使用バージョンは 8.0.25 です。 疑い
この記事の長さは限られているので、まずは自分で考えて、自分で試してみるといいでしょう。練習すれば完璧になります。具体的な答えについては、次の記事で検証し、結論をまとめる必要があるでしょう。 これで、MySQL の next-key lock のロック範囲に関するこの記事は終了です。MySQL の next-key lock のロック範囲の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS3 で z-index が効かない問題の解決方法
>>: Flinkのフォールトトレラントメカニズムに関する簡単な説明:ジョブ実行とデーモン
第二に、キーワードのランキングは、Webページの表示速度にも関係しています(参照:キーワードランキン...
MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...
Docker を初めて使い始めると、通常とは異なる問題に遭遇して、必然的に混乱してしまいます。大丈夫...
概要zabbix バージョン 5.0 以降では、zabbix-agent2 という新しい機能が追加さ...
この記事は、透明度を変えてカルーセルにするXiaomiカルーセルを真似て書いたものです。初心者なので...
目次特徴利点インストールとコマンド設定ファイルプロキシモードとリバースプロキシ構成フォワードプロキシ...
hk_test(ユーザー名、パスワード) に値を挿入 ('qmf1', '...
1. コマンドの紹介passwd コマンドは、ユーザー パスワード、アカウント ロック、パスワードの...
dockerでイメージを削除するコマンドはdocker rmiですが、このコマンドを実行してもイメー...
サーバーへのファイルのアップロード、ソフトウェアのインストール、コマンドやスクリプトの実行、サービス...
目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...
1. システムの Python バージョンに応じて、pip インストール パッケージをダウンロードし...
目次1. 目的2. 文法3. 練習する1. 目的通常、エラーが発生すると、スクリプトは直ちに停止し、...
本日は、色彩の応用に関する優れた事例を 30 件集めて、皆さんにご紹介したいと思います。これらの事例...
Tomcat を学習したばかりのプログラマーにとって、これはよくある間違いです。 1. 環境変数の問...