序文ある日、突然 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のフォールトトレラントメカニズムに関する簡単な説明:ジョブ実行とデーモン
この記事では主にボタンのスタイルについて説明します。 1. オプション2. サイズ3. 活動状況4....
目次1.parseInt(文字列、基数) 2. 数値() 3.parseFloat()主なメソッドは...
MySQL には、主に left()、right()、substring()、substring_i...
多くの場合、 Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼ら...
目次1. クラス1.1 コンストラクタ() 1.2 ゲッターとセッター1.3 これ1.4 静的プロパ...
目次負荷分散負荷分散分類1. DNS 負荷分散2. IP負荷分散3. リンク層の負荷分散4. ハイブ...
<br /> この記事は allwebdesignresources.com から Ra...
この記事では、例を使用して、MySQL で GROUP_CONCAT を使用する方法について説明しま...
この記事の例では、計算機機能を実装するためのjsの具体的なコードを参考までに共有しています。具体的な...
目次1.entires() メソッドの詳細な構文2.entires() メソッドの一般的な使用法と注...
機能別に並べ替えNN: このタグをサポートする Netscape の以前のバージョンを示しますIE:...
この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...
目次TypeScript環境の構築ステップ1: Taobaoミラーをダウンロードするステップ2: T...
React は Facebook の社内プロジェクトとして始まりました。 React の出現は革命的...
フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...