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 アニメーションおよびその他の効果のサンプル コード
Linuxでタイムゾーンを変更する場合、常に変更することはできませんAsia/Shanghai に変...
この記事では、JSカルーセル効果の具体的なコードを実現するための3つの方法を紹介します。具体的な内容...
目次1. ショッピングカートの例2. コードの実装3. まとめ1. ショッピングカートの例一連の学習...
目次Docker-Maven-プラグインMavenプラグインの自動デプロイメント手順1. ホストマシ...
序文MRR は Multi-Range Read の略で、ランダム ディスク アクセスを削減し、ラン...
目次1. 実施の背景2. 実装のアイデア3. 実施プロセス1. 実施の背景先週、ユーザーがタスクを完...
Linux サーバーに Docker をインストールした後、関連する公式 Docker イメージを...
この記事では、例を使用して MySQL 一時テーブルの使用方法を説明します。ご参考までに、詳細は以下...
top コマンドは、Linux システムのパフォーマンスを監視するために誰もが使用している最適なコマ...
Apache では構成ファイルで Web ページまたは Web サイトの書き換えを簡単に設定できる...
1. サーバーを購入するこの例では、購入したサーバーはAlibaba Cloudです。大学生はAli...
目次バックエンド: Rails API部分フロントエンド: React部分Reactコンポーネントa...
クリックハウスの紹介ClickHouse は、SQL クエリを使用して分析データ レポートをリアルタ...
プロジェクトで発生した不規則な絵画壁のレイアウト問題は、次のように分析されます。 1.img dis...
複数列のインデックスについては、理解が不足していることがよくあります。よくある間違いは、多数の列に独...