MVCCMVCC (Multi-Version Concurrency Control) は、マルチバージョン同時実行制御です。トランザクションの同時実行性とロールバックを実現するのは InnoDB の重要な機能です。ロック メカニズムは同時操作を制御できますが、システム オーバーヘッドが大きく、ほとんどの場合、行レベルのロックは MVCC に置き換えられます。MVCC を使用すると、システム オーバーヘッドを削減できます。 具体的な実装としては、データベースの各行に次の 3 つのフィールドを追加します。
スナップショット読み取りたとえば、ロックされていない選択操作はスナップショット読み取りです。スナップショット読み取りの出現は、同時実行パフォーマンスの向上を考慮した上で行われました。スナップショット読み取りの実装は、マルチバージョン同時実行制御、つまり MVCC に基づいています。 MVCC は行ロックの変形と考えることができます。多くの場合、ロック操作を回避し、オーバーヘッドを削減します。複数のバージョンに基づいているため、スナップショット読み取りでは必ずしも最新バージョンのデータが読み取られるわけではなく、以前の履歴バージョンが読み取られる場合があります。 現在の読書読み取られるのは現在のデータであり、トランザクションが開始される前の状態まで遡るために UNDO ログを使用する必要はありません。読み取られるのはレコードの最新バージョンです。読み取り時には、他の同時トランザクションが現在のレコードを変更できないようにする必要があり、読み取られたレコードはロックされます。
簡単に言えば、MVCC はロックなしで読み取り書き込み競合を実現することであり、この読み取りは現在の読み取りではなくスナップショット読み取りを指します。現在の読み取りは実際にはロック操作であり、悲観的ロックの実装です。
MVCC 実装原則3つの隠しフィールド
バージョンチェーン/元に戻すログこれは、UNDO ログにトランザクション前のデータの古いバージョンが記録され、行レコード内のロールバック ポインターが古いバージョンの位置を指すため、バージョン チェーンが形成されるためです。読み取りビューは、特定の条件を満たす DB_TRX_ID が見つかるまで、リンク リスト内の DB_TRX_ID を走査し続けます。そうすると、DB_TRX_ID が配置されている古いレコードが、現在のトランザクションが参照できる最新の「古いバージョン」になります。 閲覧ビュートランザクションが開かれたときに現在アクティブなすべてのトランザクション (コミットされていないトランザクション) のコレクションです。つまり、読み取りビューは、トランザクションがスナップショット読み取り操作を実行したときに生成される読み取りビューです。トランザクションによってスナップショット読み取りが実行された瞬間に、現在のデータベース システムのスナップショットが生成され、システム内の現在のアクティブなトランザクションの ID が記録および維持されます。
MVCC 実装の全体的なプロセス:要約する
参照:[MySQL ノート] MySQL の MVCC と実装原則を正しく理解する (推奨) MySQL · エンジン機能 · InnoDB トランザクション システム (taobao.org) mvcc の詳細な説明 - Jianshu (jianshu.com) これで、MySQL のマルチバージョン同時実行制御 MVCC の詳細な研究に関するこの記事は終了です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援して頂ければ幸いです。 以下もご興味があるかもしれません:
|
<<: HTML でマウスが停止したときに行全体の色 (tr) を変更する方法
>>: CSS3 トランジション回転パースペクティブ 2D3D アニメーションおよびその他の効果のサンプル コード
目次1. 使いやすい2. 関数内でジェネリックを使用する3. クラス内でジェネリックを使用する4. ...
文章さて、次はレンダリングを見せましょう。画像を見て初めて理解することに興味が湧くでしょう。そうでな...
目次1. 使用2. メッセージポップアップウィンドウが繰り返し表示される問題を解決する1. 使用Vu...
アップグレードプロセス:元のシステム: CentOS7.3 [root@my-e450 ~]# un...
目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...
Vue コンポーネントをカプセル化する場合でも、機能コンポーネントをクロスファンクショナルに使用しま...
プライベート Docker レジストリのインストールとデプロイは、Docker テクノロジーを導入、...
序文パスワードを忘れることは、よく遭遇する問題です。MySQL または MariaDB データベース...
el-form フォームにルールを追加します。データにルールを定義する定義されたルールをel-for...
目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...
私たちの日常的な開発作業では、テキストのオーバーフロー、切り捨て、省略は、考慮する必要がある非常に一...
この記事では、Linux サーバー上で Nginx と Apache の共存を実装する方法について説...
まずは効果の写真をお見せしましょう。 個人的には効果は問題ないと思います。アプリが写真を学習する時間...
この記事では、モバイルモーダルボックス効果を実現するためのJavaScriptの具体的なコードを参考...
計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...