2023年9月26日·1分で読めます

リレーショナル データベースでの MVCC の仕組み

リレーショナル データベースにおけるマルチバージョン同時実行制御 (MVCC) の概念、主要なデータベース システムへのその実装、およびデータの一貫性を確保してパフォーマンスを向上させる方法について学びます。

リレーショナル データベースでの MVCC の仕組み

マルチバージョン同時実行制御 (MVCC) の概要

最新のデータベース システムでは、複数のトランザクションが同時に発生する環境でデータの一貫性とパフォーマンスを確保するために同時実行性が重要です。 リレーショナル データベースの同時 実行性を管理するための効率的な手法の 1 つは、Multiversion Concurrency Control (MVCC) です。このアプローチでは、レコードの別々のバージョンが維持されるため、読み取り者は進行中の書き込み操作によってブロックされることなく、一貫したデータベースのスナップショットにアクセスできます。

MVCC は、明示的なロックを使用せずに複数のバージョンのレコードを作成することで競合を解決し、それによりロックの競合が減少し、パフォーマンスが向上します。これは、データの変更が頻繁に行われる高トランザクションおよび高同時実行環境では特に重要です。 MVCC は、他の同時トランザクションのビューに影響を与えることなく、トランザクションがトランザクション時に有効なレコード バージョンのみにアクセスできるようにすることで、データベースの一貫性を確保します。

MVCC ワークフロー: レコードの作成、更新、削除

MVCC がどのように動作するかを理解するために、この同時実行制御技術を実装するシステムでレコードを作成、更新、削除するプロセスを見ていきます。

  1. レコードの作成: 新しいレコードがデータベースに挿入されると、MVCC はそのレコードに一意のトランザクション ID を割り当てます。この ID は、ライフサイクル全体にわたってレコードのバージョンを追跡するために使用されます。
  2. レコードの更新: レコード更新の場合、MVCC は、異なるトランザクションが競合することなく同じレコードを変更できることを保証します。トランザクションがレコードを更新しようとすると、データベース システムは新しいバージョンのレコードを作成し、それにトランザクションの ID を割り当てます。レコードの元のバージョンは変更されないため、他のトランザクションがアクセスできるようになります。新しいバージョンのレコードは、更新トランザクションと、このトランザクションの完了後に開始される将来のトランザクションに対してのみ有効です。
  3. レコードの削除: トランザクションがレコードを削除する場合、MVCC はデータベースからレコードを直接削除しません。代わりに、(トランザクションの ID を削除マーカーとして割り当てることで) レコードを削除済みとしてマークし、他のトランザクションによるアクセスに使用できる以前のレコードのバージョンを維持します。すべてのアクティブなトランザクションが削除されたレコードにアクセスする必要がなくなると、MVCC システムはガベージを収集し、データベースからレコードを永久に削除します。

データベース システムは、複数のバージョンのレコードとそれぞれのトランザクション ID を保持することで、さまざまなトランザクションのニーズに合わせたデータの一貫したスナップショットを提供できます。アクティブなトランザクションは、トランザクション開始時に有効な最新のレコード バージョンにアクセスし、明示的なロックを必要とせずに一貫性とシリアル化を保証します。

MVCC の長所と短所: パフォーマンスと一貫性のバランス

MVCC には、同時実行性の向上やパフォーマンスの最適化など、いくつかの利点がありますが、いくつかの制限もあります。リレーショナル データベース システムで MVCC を使用することの長所と短所について説明します。

MVCC の利点

  • 同時実行性の向上: MVCC では、データのクリーンなスナップショットを提供することで、複数のトランザクションを同時に実行できます。これによりロックの競合が軽減され、トランザクションが不必要にブロックされるのを防ぎます。
  • 最適化されたパフォーマンス: 明示的なロックの必要性を回避することで、MVCC はより高速な読み取りおよび書き込み操作を可能にします。これにより、特に同時実行性の高い環境でパフォーマンスが最適化されます。
  • 分離の向上: MVCC は、各トランザクションの開始時間に合わせたスナップショットを配信することで、同時トランザクション間の分離を実現します。これにより、他のトランザクションのデータ表示に影響を与えることなく、トランザクションが独立して一貫して動作できるようになります。

MVCCの欠点

  • ストレージ オーバーヘッドの増加: MVCC では各レコードの複数のバージョンを維持する必要があるため、ストレージ オーバーヘッドが増加する可能性があります。ただし、ストレージとガベージ コレクションのメカニズムを最適化することで、このオーバーヘッドを許容可能なレベルまで減らすことができます。
  • 複雑なガベージ コレクション: MVCC によって作成された古いレコード バージョンを管理するには、高度なガベージ コレクション メカニズムが必要です。これにより、特にトランザクションの多い環境では、データベース システムがある程度複雑になる可能性があります。
  • 特定のシナリオでの一貫性保証の低下: MVCC は、特定の場合に一貫性保証の低下につながる可能性があります。このような状況は通常、読み取り/書き込みの競合が発生した場合、またはデータベース システムが読み取りコミット分離レベルや読み取り非コミット分離レベルなど、より弱い整合性保証を提供する分離レベルを使用している場合に発生します。それでも、MVCC の数多くの利点を考慮すると、これは一般に許容できるトレードオフです。

MVCC にはいくつかの課題と複雑さが伴いますが、同時実行性を管理し、データの一貫性を確保し、リレーショナル データベースのパフォーマンスを向上させるための効果的なソリューションを提供します。 MVCC を理解して適切に実装することで、開発者とデータベース管理者はユーザーにシームレスで効率的なデータベース エクスペリエンスを提供できます。

MVCC を使用した一般的なリレーショナル データベース システム

いくつかの一般的な リレーショナル データベース管理システム (RDBMS) は、 同時実行性とパフォーマンスの最適化を向上させるために MVCC を利用しています。ここでは、MVCC を実装する広く使用されているシステムのいくつかの概要を示します。

PostgreSQL

主要なオープンソース リレーショナル データベース システムの 1 つである PostgreSQL は、トランザクションを効果的に分離し、同時実行性を最適化し、データの一貫性を確保するために MVCC をサポートしています。 PostgreSQL は、読み取りトランザクションと書き込みトランザクションを分離し、トランザクションごとに異なるデータ スナップショットを維持するスナップショット分離技術を使用します。このアプローチにより、ロックの競合が軽減され、複数のトランザクションを遅延なく同時に実行できるようになります。

MySQL (InnoDB ストレージ エンジン)

MySQL も、人気のあるオープンソースのリレーショナル データベース システムです。 MyISAM のデフォルトのストレージ エンジンは MVCC をサポートしていませんが、InnoDB ストレージ エンジンもほとんどのユースケースで推奨されており、パフォーマンスと同時実行性を向上させるために MVCC を実装しています。 InnoDB を使用する場合、MySQL は複数のバージョンのレコードを維持して読み取りと書き込みの同時操作を可能にするため、ロックの競合が減少し、パフォーマンスが向上します。

オラクル

有力な商用データベース システムの 1 つである Oracle Database は、MVCC を採用してデータの一貫性を維持し、パフォーマンスを向上させます。 Oracle は、読み取りと書き込みの一貫性メカニズムを組み合わせて使用​​し、読み取り者にデータの一貫したスナップショットを提供できると同時に、書き込み者が他のトランザクションをブロックすることなくデータを変更できるようにします。

Microsoft SQL Server (スナップショット分離レベル)

Microsoft SQL Server も著名な商用 RDBMS です。デフォルトでは MVCC を使用しませんが、MVCC モデルを有効にするスナップショット分離レベルをサポートしています。スナップショット分離を使用することにより、SQL Server はさまざまなバージョンのデータ行を維持できるため、ロック競合が軽減され、パフォーマンスが向上した同時読み取りおよび書き込み操作が可能になります。

AppMasterを使用した MVCC : 同時実行制御の活用

データモデルをAPIに変換
Data Designerでスキーマを設計し、本番対応のバックエンドをGoで生成。
構築を開始

AppMasterノーコード プラットフォームを使用すると、開発者は、同時実行制御やパフォーマンスの最適化に MVCC を使用するアプリケーションなど、リレーショナル データベースとシームレスに連携できるアプリケーションを作成できます。 MVCC の機能を認識し、それらを効果的に活用することは、パフォーマンスが高く、スケーラブルで効率的なアプリケーションを構築するために不可欠です。

AppMasterのビジュアル開発ツールを使用すると、開発者はデータ スキーマのモデル化と設計、 REST API の 作成、リレーショナル データベースとシームレスに連携する Web およびモバイル アプリケーション インターフェイスの設計を行うことができます。 AppMaster で生成されたアプリケーションは、PostgreSQL と互換性のあるデータベースをプライマリ データ ストレージとして使用できるため、開発者は PostgreSQL で MVCC を使用できます。

AppMasterのプラットフォームは、Go (golang) でのバックエンド アプリケーション、 Vue3 フレームワークを使用した Web アプリケーション、Android の場合は Kotlin とJetpack Compose 、iOS の場合はSwiftUIを使用したモバイル アプリケーションのソース コードを生成します。ビジネス ロジックが効率的に実装されると、アプリケーションは同時実行制御に対する MVCC の利点を活用しながら、パフォーマンスが高く最適化された方法でデータベースと対話できます。

将来のトレンドとイノベーション

データベースがある場所にデプロイ
準備ができたらAppMaster Cloudまたは自分のAWS、Azure、Google Cloud環境にデプロイ。
今すぐデプロイ

データベース管理の世界は継続的に進化しており、MVCC は引き続きその進歩の最前線にあり続けます。最新のデータベース テクノロジーでは、いくつかの重要なトレンドと革新が MVCC とそのアプリケーションの将来を形作っています。

  • 最新のデータベース テクノロジにおける MVCC: MVCC は、依然として最新のデータベース管理システムの中心的な機能です。データ量が増大し、同時実行制御の必要性がより重要になるにつれて、データベース ベンダーは MVCC 実装の強化に投資しています。高スループット環境でも MVCC の効率性を維持できるように、新しいアルゴリズムと最適化が開発されています。
  • スケーラビリティと分散システムへの影響: スケーラビリティは、今日のデータ集約型アプリケーションにおける主な懸念事項です。 MVCC は同時実行性を本質的にサポートしているため、分散データベース システムに最適です。組織が大量のデータを処理するために分散アーキテクチャを採用することが増えているため、MVCC は分散ノード間でデータの一貫性と分離を維持するための基盤を提供します。これは、地理的に複数の場所から同時にデータにアクセスして変更する必要があるシナリオでは特に重要です。
  • MVCC への進化するアプローチ: MVCC はその価値を証明していますが、進行中の研究と革新により、新しいアプローチと最適化の開発が行われています。データベース エンジニアは、特定のユースケースに対処し、パフォーマンスを微調整するために、スナップショット分離やシリアル化可能なスナップショット分離などの MVCC のバリエーションを検討しています。これらの進化するアプローチにより、強力なデータ一貫性と高い同時実行性のバランスが取れ、データベースが多様なアプリケーション要件に適応できるようになります。

効率、スケーラビリティ、適応性への取り組みが、リレーショナル データベースにおける MVCC の将来を特徴づけます。データの量と複雑さが増大する中、MVCC はデータベース システムの基礎であり続け、データの整合性を確保し、最新のアプリケーションの要求をサポートします。進化するアプローチを採用し、分散環境における MVCC の強みを活用することにより、データベース領域は継続的な革新と改善に備えることができます。

結論

マルチバージョン同時実行制御 (MVCC) は、データの一貫性を確保し、ロック競合を軽減し、複数の同時トランザクションが存在するシナリオのパフォーマンスを最適化するための、リレーショナル データベース管理システムにおける重要な技術です。 PostgreSQL、MySQL (InnoDB)、Oracle、Microsoft SQL Server (スナップショット分離レベル) などのいくつかのよく知られたデータベース システムは、並行性管理を向上させるために MVCC を実装しています。

リレーショナル データベースと対話するアプリケーションを開発する場合、MVCC の機能を理解し、アプリケーションがそれらの機能を確実に活用できるようにすることが重要です。 AppMasterのno-codeプラットフォームを使用すると、MVCC 対応データベースと効率的に連携できるアプリケーションを構築でき、大規模な手動介入を必要とせずに最適化されたパフォーマンスと同時実行制御を提供できます。

よくある質問

マルチバージョン同時実行制御 (MVCC) とは何ですか?

マルチバージョン同時実行制御 (MVCC) は、複数のトランザクションを同時に実行する際にデータの一貫性を確保するためにリレーショナル データベースで使用される効率的な同時実行制御手法です。レコードの別々のバージョンを維持するため、書き込み操作によってブロックされることなく、読み取り操作が一貫したスナップショットにアクセスできるようになります。

MVCC はどのように機能しますか?

MVCC は、複数のバージョンのレコードをデータベースに保持することによって機能します。トランザクションには一意の ID (トランザクション ID) が割り当てられ、トランザクションの開始時に開始されます。トランザクションがレコードを作成、更新、または削除すると、データベースはそのレコードの新しいバージョンを作成し、トランザクションの ID でタグ付けします。リーダーは、トランザクションの開始時間に基づいて適切なバージョンを読み取ることで、一貫性のあるスナップショットにアクセスできます。

MVCC の利点は何ですか?

MVCC の主な利点には、同時実行性の向上、パフォーマンスの最適化、ロック競合の軽減、トランザクション間の分離の向上などがあります。 MVCC を使用すると、リーダーはライターによってブロックされることなくデータの一貫したスナップショットにアクセスでき、またその逆も可能です。これにより、ロックの競合が減少し、より多くの同時トランザクションが可能になり、最終的にデータベース システム全体のパフォーマンスが向上します。

MVCC の欠点は何ですか?

MVCC には多くの利点がありますが、いくつかの欠点もあります。これには、レコードの複数のバージョンを維持することによるストレージ オーバーヘッドの増加、古いバージョンを削除するための複雑なガベージ コレクションが含まれます。また、場合によっては、読み取りと書き込みの競合が発生した場合、または読み取りコミットおよび読み取り非コミット分離レベル中の一貫性保証の低下が含まれます。

MVCC を実装しているリレーショナル データベース システムはどれですか?

PostgreSQL、MySQL (InnoDB ストレージ エンジンを使用)、Oracle、Microsoft SQL Server (スナップショット分離レベルを使用) など、いくつかの一般的なリレーショナル データベース システムでは、マルチバージョン同時実行制御 (MVCC) が使用されています。

AppMaster は同時実行制御をどのように処理しますか?

AppMasterのプラットフォームを使用すると、開発者は、MVCC を使用するものを含むリレーショナル データベースとシームレスに対話するアプリケーションを作成できます。 AppMaster MVCC の同時実行制御とパフォーマンスの機能を最大限に活用しながら、アプリケーションがデータベースと効率的に対話できるようにする最適化を提供します。

始めやすい
何かを作成する 素晴らしい

無料プランで AppMaster を試してみてください。
準備が整ったら、適切なサブスクリプションを選択できます。

始める