WRITESETを有効にし、binlog_transaction_dependency_trackingおよびtransaction_write_set_extractionパラメーターを使用して、ApsaraDB RDS for MySQLインスタンスでのトランザクション競合の検出に使用するメカニズムを管理できます。 これにより、セカンダリRDSインスタンスの並列再生が改善され、プライマリRDSインスタンスとセカンダリRDSインスタンス間のレイテンシが削減されます。
Introduction to WRITESET
MySQLでは、COMMIT_ORDERは、プライマリ-セカンダリレプリケーションでコミットされたトランザクション間の競合を識別するために使用されるデフォルトのメカニズムです。 COMMIT_ORDERは、プライマリRDSインスタンスの並列処理設定の影響を受ける傾向があります。 この問題を解決するためにWRITESETが導入されました。 トランザクションをコミットするときに、WRITESETを有効にすると、トランザクションによって変更されたデータ行が、他のトランザクションによって変更されたデータ行と競合するかどうかが確認されます。 競合が検出されない場合は、セカンダリRDSインスタンスでトランザクションを並行して再生できます。 これにより、セカンダリRDSインスタンスの並列再生が改善されます。
WRITESETを有効にするための前提条件
RDSインスタンスは、次のいずれかのデータベースエンジンバージョンを実行します。
RDSインスタンスは、MySQL 5.7と20211231以降のマイナーエンジンバージョンを実行します。
RDSインスタンスは、MySQL 8.0と20210930以降のマイナーエンジンバージョンを実行します。
DDL操作が実行され、大規模なトランザクションがコミットされ、外部キーテーブルが変更され、主キーを持たないテーブルが存在するシナリオでは、WRITESETは無効になります。 この場合、システムはCOMMIT_ORDERを使用してトランザクションの競合を検出します。 COMMIT_ORDERは、セカンダリRDSインスタンスの並列再生を低下させません。 セカンダリRDSインスタンスと読み取り専用RDSインスタンスの間にレプリケーション遅延が存在する場合は、WRITESETを有効にすることを推奨します。
WRITESETを有効にするパラメーター設定
WRITESETを有効にするには、次のパラメーターを設定する必要があります。 詳細は、「インスタンスパラメーターの変更」をご参照ください。
transaction_write_set_extraction = XXHASH64binlog_transaction_dependency_tracking = WRITESETbinlog_transaction_dependency_history_size = 500000
binlog_transaction_dependency_history_sizeは、競合検出用にメモリに格納されるデータ行の最大数を指定します。 値が大きい場合は、データ行数が多く、並列性が高いことを示します。
パラメーター設定ルール
binlog_transaction_dependency_trackingとtransaction_write_set_extractionは互いに影響します。 次の表のマッピングに基づいてパラメーターを設定する必要があります。 それ以外の場合、設定はブロックされます。
binlog_transaction_dependency_tracking | transaction_write_set_抽出 |
|
|
|
|
パラメータ説明
binlog_transaction_dependency_trackingおよびtransaction_write_set_extractionは、次のマイナーエンジンバージョンでサポートされています。
RDSインスタンスがMySQL 5.7を実行している場合、マイナーエンジンバージョンの有効範囲は [20211231, 99999999) です。
RDSインスタンスがMySQL 8.0を実行している場合、マイナーエンジンバージョンの有効範囲は [20210930, 99999999) です。
binlog_transaction_dependency_tracking:説明:
binlog_transaction_dependency_trackingは、マルチスレッド並列再生におけるトランザクション間の競合と依存関係を識別する方法を決定します。 これにより、バイナリログのトランザクションをセカンダリRDSインスタンスで並列に再生できます。 マルチスレッドの並列再生では、replica_parallel_workersおよびslave_parallel_workersのいずれかが0より大きくなります。デフォルト値:
WRITESET有効な値と意味:
COMMIT_ORDER: トランザクション間の依存関係は、プライマリ-セカンダリレプリケーションでコミットされたトランザクションに基づいて決定されます。 2つのトランザクションをプライマリRDSインスタンスで並列にコミットできる場合、トランザクションは互いに競合せず、セカンダリRDSインスタンスで並列に再生できます。 このモードは、プライマリRDSインスタンスの並列処理設定の影響を受ける傾向があります。WRITESET: トランザクション間の依存関係は行レベルで決定されます。 2つのトランザクションがプライマリキーまたは一意のキーを含むテーブルの同じデータ行を変更しない場合、トランザクションはセカンダリRDSインスタンスで並列に再生できます。 このモードは、プライマリRDSインスタンスの並列処理設定の影響を受けません。WRITESET_SESSION: 同じSESSION値のトランザクションは、セカンダリRDSインスタンスでシリアルに再生されます。 異なるSESSION値のトランザクションは、WRITESETのルールに基づいてセカンダリRDSインスタンスで再生されます。
transaction_write_set_抽出:説明: このパラメーターは、
WRITESETがデータ行のハッシュ値を計算するために使用するハッシュアルゴリズムを指定します。WRITESETが有効になっている場合、指定されたアルゴリズムを使用して計算されたデータ行のハッシュ値を使用して、同じデータ行が異なるトランザクションによって変更されているかどうかを確認します。デフォルト値:
XXHASH64有効な値と意味:
OFF: データ行のハッシュ値を計算しません。WRITESETが無効になっていることを確認します。XXHASH64: 64ビットのハッシュアルゴリズムを使用して、データ行のハッシュ値を計算します。
関連ドキュメント
パラメータ診断機能を使用して、パラメータ最適化ソリューションを取得できます。 詳細については、「パラメーター診断機能の使用」をご参照ください。
MySQL公式ドキュメント: