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インスタンスはMySQL 5.7またはMySQL 8.0を実行します。
RDSインスタンスのテーブルにはプライマリキーと一意キーが含まれていますが、外部キーは含まれていません。
RDSインスタンスでは、DDLおよび大規模トランザクションは実行されていません。
上記の前提条件が満たされない場合、WRITESETは無効になります。 この場合、システムはCOMMIT_ORDERを使用してトランザクションの競合を検出します。 COMMIT_ORDERは、セカンダリRDSインスタンスの並列再生を低下させません。 プライマリRDSインスタンスとセカンダリおよび読み取り専用RDSインスタンスの間にレプリケーションレイテンシが存在する場合は、WRITESETを有効にすることを推奨します。
WRITESETを有効にするパラメーター設定
WRITESETを有効にするには、次のパラメーター設定を使用する必要があります。 詳細は、「インスタンスパラメーターの変更」をご参照ください。
transaction_write_set_extraction = XXHASH64
binlog_transaction_dependency_tracking = WRITESET
binlog_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公式ドキュメント: