すべてのプロダクト
Search
ドキュメントセンター

PolarDB:コミットタイムスタンプ (CTS) 技術

最終更新日:Mar 28, 2026

高同時実行数のオンライントランザクション処理 (OLTP) ワークロードにおいて、MySQL のアクティブなトランザクションリストはボトルネックとなります。すべてのトランザクション開始、コミット、および可視性チェックの際に trx sys mutex を取得する必要があり、これによりスループットが制限され、複数の vCPU を十分に活用できなくなります。PolarDB for MySQL では、この課題を PolarTrans で解決します。PolarTrans は、アクティブなトランザクションリストを、コミットタイムスタンプに基づいてトランザクション状態を追跡するメモリ内ロックフリー機構である コミットタイムスタンプストア (CTS) に置き換えます。

本トピックでは、CTS の動作原理、トランザクションライフサイクル各段階における改善点、および PolarTrans 有効化後のパフォーマンス変化について説明します。

サポートされるバージョン

グローバル整合性 (高性能モード) 機能を通じて PolarTrans を有効化するには、PolarDB for MySQL Enterprise Edition クラスターが以下のいずれかのバージョン要件を満たす必要があります。

  • エンジンバージョン 8.0.2 で、リビジョンバージョンが 8.0.2.2.19 以降

  • エンジンバージョン 8.0.1 で、リビジョンバージョンが 8.0.1.1.29 以降

  • エンジンバージョン 5.7 で、リビジョンバージョンが 5.7.1.0.26 以降

クラスターのバージョンを確認するには、エンジンバージョンの「エンジンバージョンの確認」セクションをご参照ください。

アクティブなトランザクションリストがパフォーマンスを制限する理由

MySQL や PostgreSQL などの主要なリレーショナルデータベースでは、マルチバージョン同時実行制御 (MVCC) を実現するためにアクティブなトランザクションリストが採用されています。高同時実行環境では、この方式には以下の 3 つの課題があります。

  • 複数の vCPU を活用して同時実行トランザクションを処理できない

  • 多数のトランザクションが trx sys mutex を競合する際にパフォーマンスボトルネックが発生する

  • 非共有アーキテクチャにおいて、読み取り整合性、マルチポイント書き込み、および拡張アーキテクチャ (XA) トランザクション管理を十分にサポートできない

PolarTrans は、アクティブなトランザクションリストを CTS に置き換えることで、これらの制限に対処します。トランザクションの状態をコピーする代わりに、PolarTrans はクラスターの最大コミットタイムスタンプに基づいてトランザクションの可視性を決定します。CTS ログはすべてメモリ内で維持されます。各トランザクションは、その trx_id に基づいて リングバッファ 内の特定の スロット に剰余マッピングされ、各スロットには trx ポインターとコミットシーケンス番号 (CSN) が格納されます。

CTS によるトランザクション各段階の改善

アクティブなトランザクションリストでは、トランザクションライフサイクルの 3 つの重要なタイミングで trx sys mutex の取得が必要です。CTS では、これら 3 段階すべてにおいてこの要件が不要になります。

段階従来の方式PolarTrans (CTS)
トランザクション開始rw_trx_ids へのトランザクション ID の割り当て、rw_trx_set および rw_trx_list の更新 — すべて trx sys mutexCTS ログへのトランザクション情報の記録、trx_id を基にした slot のモジュロ割り当て、およびアクティブタグによるマーク — ロックフリー
トランザクションコミットrw_trx_ids の照会、トランザクション ID の削除、rw_trx_set および rw_trx_list の更新 — trx sys mutexコミットタイムスタンプの割り当ておよび CTS ログ内の CSN フィールドの更新のみ
可視性判定アクティブなトランザクション ID 配列のコピー、最小・最大トランザクション ID の記録、配列照会による行の可視性判定 — trx sys mutex読み取り専用トランザクションの CSN を、行レコード内の trx csn フィールドと比較し、システムの最大コミットタイムスタンプを読み取りビューの代わりに使用

PolarTrans では、ほとんどのトランザクションロジックにロックフリーのアルゴリズムを適用することで、読み書き混在および書き込み専用の両シナリオにおけるスループットを向上させます。

パフォーマンス比較

以下のテストでは、PolarTrans 有効化前後における秒間クエリ数 (QPS) を測定しています。

テスト環境:

パラメーター
クラスターPolarDB for MySQL 8.0、Cluster Edition
仕様88 コア、710 GB メモリ
テストツールSysbench
データ量88 テーブル、テーブルあたり 1,200 万行

テストケース:

結果: PolarTrans は、読み書き混在および書き込み専用のシナリオにおいて QPS を大幅に向上させます。

読み取り専用のシナリオでは、PolarTrans によるパフォーマンス向上は見られません。読み取り専用トランザクションは既に読み取りビューのキャッシュから恩恵を受けており、トランザクション状態のコピーに伴うロックオーバーヘッドが低減されています。

PolarTrans の有効化

PolarTrans は、グローバル整合性 (高性能モード) 機能を有効化するとデフォルトで有効になります。設定手順については、「概要」トピックの「グローバル整合性 (高性能モード) の有効化」セクションをご参照ください。