序文ある日、突然 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のフォールトトレラントメカニズムに関する簡単な説明:ジョブ実行とデーモン
この記事では、centos7 環境でバイナリ インストール パッケージを使用して mysql5.6 ...
WebページWB.ExecWB制御印刷方法コードをコピーコードは次のとおりです。 <テーブルの...
親ノードの親ノード、例えば、このような段落がありますHTML:コードをコピーコードは次のとおりです。...
Docker ベースのデータベースをデプロイするsudo docker pull influxdb ...
目次- 序文 - - JVM クラスローダー - 1. JVMクラスローダー2. クラスローダーのソ...
目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...
目次序文ベジェ曲線の紹介二次ベジェ曲線3次ベジェ曲線ベジェ曲線計算機能フィッティングアルゴリズム付録...
<br />緑は黄色と青(寒色と暖色)の中間の色で、より穏やかな色です。そのため、緑は最...
GitHub にはあらゆる種類の魔法のツールがあります。今日、私はデータベースを操作するためのコマン...
序文スワップは、ディスク上にある「仮想メモリ」の一部である特殊なファイル (またはパーティション) ...
1. 結論構文: 制限オフセット、行結論: 同じ行条件では、オフセット値が大きいほど、limitステ...
目次Zabbix カスタム監視 nginx ステータス1. ステータスインターフェースを開く2. 監...
序文プロジェクトを開発しているときに、かなり厄介な問題に遭遇しました。この製品では、判断のためにブラ...
コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...
MacにはApache環境が付属していますターミナルを開き、sudo apachectl -v と入...