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

PolarDB:CTS

最終更新日:May 29, 2024

PolarDB for MySQLはPolarTransを使用して、同時実行性の高いオンライントランザクション処理 (OLTP) シナリオでデータベースのパフォーマンスを向上させます。 PolarTransは、アクティブなトランザクションリストに依存する代わりに、コミットタイムスタンプストア (CTS) を使用して、トランザクションをより効率的に管理します。 このトピックでは、PolarTransのCTSの技術原理と利点について説明します。 このトピックでは、標準シナリオでパフォーマンステストを使用して、PolarTransを使用する前後のデータベースのパフォーマンスも比較します。

前提条件

クラスターは、リビジョンバージョンが8.0.1.1.12以降のPolarDB for MySQL 8.0.1を実行します。

背景情報

MySQLやPostgreSQLなどのメインストリームのオープンソースリレーショナルデータベースは、トランザクションステータスを更新し、アクティブなトランザクションリストに基づいてマルチバージョン同時実行制御 (MVCC) メカニズムを実装します。 アクティブトランザクションリストベースのアプローチでは、同時実行性の高い環境でパフォーマンスのボトルネックが発生する可能性があり、複数のvCPUを完全に使用して同時トランザクションを処理することはできません。 また、この手法は、読み取り一貫性、マルチポイント書き込み、および非共有アーキテクチャ内の拡張アーキテクチャ (XA) トランザクション管理の要件を十分に満たしていない。

PolarTransは、この問題に対処するために開発されます。 PolarTransでは、アクティブなトランザクションリストに基づいてトランザクションステータスを更新する必要はありません。 PolarTransは、トランザクションステータスをコピーするのではなく、クラスターの最大コミットタイムスタンプに基づいてトランザクションステータスを決定します。 PolarTransは、トランザクションステータスの更新、取得、およびクエリ (可視性決定) のためのより軽量なソリューションを提供します。 PolarTransは、ロックフリーアルゴリズムを実装して、読み取り /書き込みシナリオおよび書き込み専用シナリオでデータベースのパフォーマンスを向上させることにより、ほとんどのトランザクションロジックも最適化します。

PolarTransは、CTSログを使用して、トランザクションステータスの更新、可視性の決定、トランザクションのアクティブステータスなど、トランザクションのコアデータを記録します。

CTSログは、効率と速度を確保するために完全にメモリに保持されます。 各トランザクションは、trx_idによって指定されたトランザクションIDに基づいて、リングバッファ内の特定のスロットにモジュロマッピングされる。 各スロットは、trxポインタおよびコミットシーケンス番号 (CSN) を含む。

メリット

  • トランザクションの開始

    書き込みトランザクションが開始されると、従来のトランザクションシステムはトランザクションにIDを割り当て、アクティブトランザクションID配列rw_trx_idsにIDを追加し、アクティブトランザクションIDと対応するトランザクション間のマッピングを保持するrw_trx_setデータセットtrxを更新し、トランザクションを読み書きトランザクションリンクリストrw_trx_listにエンキューします。 このプロセス中にデータの一貫性と整合性を確保するには、trx sys mutexを使用して操作を保護する必要があります。 対照的に、トランザクションが開始すると、PolarTransは、CTSログにトランザクションに関する情報を記録し、trx_idによって指定されたトランザクションIDに基づいてトランザクションにスロットをモジュロ割り当てし、トランザクション状態を特別なアクティブタグでマークする。 全プロセスはロックなしです。

  • トランザクションコミットメントの書き込み

    書き込みトランザクションをコミットするために、従来のシステムはrw_trx_idsを照会し、trx_idで指定されたトランザクションIDを削除し、rw_trx_setrw_trx_listを更新します。 プロセス中のデータの一貫性と整合性を確保するには、trx sys mutexを使用して操作を保護する必要があります。 書き込みトランザクションをコミットするには、PolarTransはコミットタイムスタンプを割り当て、CTSログのCSNフィールドを更新するだけです。

  • 読み取りビュー

    InnoDBのMVCCメカニズムは、読み取りビューを使用してデータの表示を制御します。 読み取りビューを作成するには、従来のトランザクションシステムでアクティブトランザクションID配列をコピーし、現在の最小アクティブトランザクションIDと最大トランザクションIDを記録する必要があります。 プロセス中のデータの一貫性と整合性を確保するには、trx sys mutexを使用して操作を保護する必要があります。 システムは、データ可視性を判定するために、アクティブトランザクションIDアレイに問い合わせる必要があり得る。 重大な読み書き競合が発生するシナリオでは、システムはミューテックスの保護下で読み書きトランザクションと読み取り専用トランザクションのステータスを更新およびコピーする必要があります。 これは、高いメンテナンスコストを発生させ、トランザクション可視性を決定する効率を低下させる。 PolarTransは、読み取りビューの代わりにシステムの最大コミットタイムスタンプを使用してデータの可視性を判断します。 この方法では、読み取り専用トランザクションのCSNと行レコードのtrx csnフィールドの値のみを比較する必要があります。

PolarTransの有効化

デフォルトでは、グローバル整合性 (ハイパフォーマンスモード) 機能を有効にすると、PolarTransが有効になります。 グローバル整合性 (高パフォーマンスモード) 機能を有効にする方法の詳細については、「概要」トピックの「グローバル整合性 (高パフォーマンスモード) の有効化」セクションを参照してください。

性能比較

PolarTransを有効にする前と後のデータベースのパフォーマンスがテストされます。 パフォーマンスは、1秒あたりのクエリ数 (QPS) に基づいてテストされます。

  • テスト環境

    テストでは、88コアと710 GBメモリを備えたcluster EditionPolarDB for MySQL 8.0クラスターが使用されます。

  • テストツール

    Sysbench

  • テスト済みデータ量

    各テーブルに1200万行の88のテーブル。

  • テストケース

    テストには、次のSysBench組み込みケースを使用します。

    • oltp_read_write

    • oltp_insert

    • oltp_update_index

    • oltp_update_no_index

    • oltp_read_only

  • テスト結果

    テスト結果は、PolarTransが読み取り /書き込みおよび書き込み専用のシナリオでデータベースの全体的なパフォーマンスを大幅に向上させることを示しています。 ただし、読み取り専用のシナリオでは、PolarTransを有効にしてもデータベースのパフォーマンスは向上しません。これは、読み取り専用トランザクションが読み取りビューキャッシュを使用して、データベースがトランザクションステータスをコピーするときに発生するロックオーバーヘッドを減らすことができるためです。