バージョンチェーン InnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つの非表示の列があります。
たとえば、trx_id 60 のトランザクションがあり、次のステートメントを実行しているとします: update table set name = 'Xiaoming1' where id = 1 この時点で、UNDOログにバージョンチェーンが存在する。
バージョンチェーンはgitに似ており、データ行のバージョン管理を実行し、undo_logを通じてロールバックすることができます。 閲覧ビュー Read Committed と Repeatable Read の違いは、ReadView を生成するための戦略が異なることです。 ReadView には主に、システム内で現在アクティブな読み取りおよび書き込みトランザクション (コミットされていない開始トランザクション) を保存するためのリストがあります。このリストは、レコードのバージョンが現在のトランザクションに表示されるかどうかを判断するために使用されます。現在のリスト内のトランザクションIDが[80,100]であると仮定します。 id <= 80 (最小トランザクション ID) id >= 80 && id <= 100 id >= 100 これらのレコードはバージョン チェーンで検索されます。最初に最新のレコードが検索されます。最新のレコードのトランザクション ID が条件を満たさず、表示されていない場合は、以前のバージョンが検索され、現在のトランザクションの ID がこのバージョンのトランザクション ID と比較され、アクセスできるかどうかが確認されます。このプロセスは、表示可能なバージョンが返されるか、プロセスが終了するまで繰り返されます。 たとえば、Read Committed 分離レベルでは次のようになります。 たとえば、この時点でトランザクション ID 100 のトランザクションがあり、名前が Xiaoming 2 になるように名前が変更されますが、トランザクションはまだコミットされていません。現時点でのバージョンチェーンは
このとき、別のトランザクションがID 1のレコードを照会するSELECTステートメントを開始し、生成されたReadViewリストは[100]のみになります。次に、バージョン チェーンに移動して検索します。まず、最新のものを見つける必要があります。trx_id が 100 であることがわかります。これは、Xiaoming 2 という名前のレコードです。これはリスト内にあるため、アクセスできません。 このとき、ポインターを介してXiaoming 1という名前の次のレコードを探し続け、trx_idが60であることがわかりました。これはリスト内の最小IDより小さいため、アクセスできます。直接アクセスの結果はXiaoming 1です。 このとき、トランザクション ID 100 のトランザクションをコミットし、ID 110 の新しいトランザクションを作成して ID 1 のレコードを変更し、トランザクションはコミットしません。 --trx_id = 110 始める; テーブルセット名 = 'Xiaoming3'、ID = 1 を更新します。 現時点では、バージョンチェーンは
この時点で、前の選択トランザクションは、ID 1 のレコードを照会するために別のクエリを実行しました。 分離レベルが異なると結果も異なります コミット読み取り分離レベルの場合は、この時点で新しい ReadView が作成され、アクティブ トランザクション リストの値が [110] に変更されます。 上記のステートメントによれば、バージョン チェーンに移動して trx_id を比較し、適切な結果 (Xiao Ming 2) を見つけます。 繰り返し読み取り分離レベルの場合、ReadView は最初の選択時に生成された ReadView のままです。つまり、リストの値は [100] のままです。したがって、選択の結果は Xiao Ming 1 になります。したがって、2 番目の選択の結果は最初の選択と同じなので、繰り返し読み取りと呼ばれます。 これは MySQL の MVCC であり、バージョン チェーンを通じて複数のバージョンを実装し、読み取り書き込み操作と書き込み読み取り操作を同時に実行できます。さまざまな ReadView 生成戦略を通じて、さまざまな分離レベルが実現されます。 上記は、MySQL - MVCC の詳細についての簡単な分析です。MySQL mvcc の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。
XHTML には似た機能を持つタグがいくつかあります。もちろん、ここでの類似性とは意味の類似性を指...
参考までに、JavaScriptを使用してドロップダウンメニューを実装します。具体的な内容は次のとお...
HTML スタイル タグスタイルタグ - ドキュメント内でスタイルを宣言するときにこのタグを使用しま...
awk を学ぶ前に、sed、grep、tr、cut などのコマンドを学んでおく必要があります。これら...
標準化されたデザインソリューション - マークアップ言語とスタイルマニュアルWeb 標準ソリューショ...
1. インストール方法は? 1. [実行] -> [cmd] と入力して、小さな黒いウィンドウ...
遅い問題を完全に解決したい場合は、MySQL を MySQL 8.0 にアップグレードすることをお勧...
目次概要コードの実装要約する概要アダプタ パターンは、デザイン パターンの動作パターンのパターンです...
クイックスタート1. Docker Hubでnginxイメージを見つけるdocker 検索 ngin...
1. Java環境jdk1.8を準備するJavaがインストールされているかどうかを確認します。イン...
この記事の例では、カスタムスクロールバーを実装するためのjsの具体的なコードを参考までに共有していま...
この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...
序文システムの高可用性を満たすためには、通常、クラスターを構築する必要があります。ホストがクラッシュ...
これらはすべて海外のE-WebTemplates WebサイトからのWebページテンプレートであり、...
この記事は主にMySQLデータベースのバイナリ型操作を紹介し、具体的な内容を通して紹介します。MyS...