PolarDB for MySQLは、大規模なトランザクションのバイナリログ (binlog) 書き込みを最適化できます。 この最適化により、他のトランザクションが大規模トランザクションによって遅延またはブロックされるのを防ぎます。 このトピックでは、大規模なトランザクションに最適化されたbinlog書き込みを使用する方法と使用制限について説明します。
背景
バイナリログを有効にすると、トランザクションがコミットされると、トランザクションのbinlogデータがbinlogファイルに書き込まれます。 次の図にプロセスを示します。 トランザクションが実行されると、生成されたbinlogはトランザクションのbinlogキャッシュに一時的に格納されます。 複数のトランザクションが同時にコミットされた場合、トランザクションはキューアップされ、binlogキャッシュからbinlogファイルにbinlogデータが書き込まれます。 Trx2などのトランザクションの1つが1 GBなどの大きなbinlogサイズを持つ場合、トランザクションはそのbinlogデータをbinlogファイルに書き込むのにより長い期間を必要とします。 その結果、キュー内の他のトランザクションは強制的に待たされ、その結果、バイナリログの書き込みとトランザクションのコミットが遅延します。 この遅延により、一時的にシステムが書き込み不能になり、低速SQLクエリの急増などの問題が発生する可能性があります。 その結果、アプリケーションは、失敗した動作を繰り返し再試行する可能性があり、これは、新しい接続の急増を引き起こし、システム負荷をさらに増加させる。
この問題に対処するために、PolarDB for MySQLは大規模なトランザクションに最適化されたbinlog書き込み機能を提供します。 この機能を有効にすると、大規模トランザクションのbinlog書き込みプロセスが他のトランザクションのコミットプロセスを妨げることはなくなります。 この最適化により、システムでの一時的な書き込み不能が防止されます。そうしないと、低速なSQL書き込み要求の急増や接続の急激な増加などの問題が発生する可能性があります。
サポートされているバージョン
クラスターは、リビジョンバージョンが8.0.1.1.42以降のPolarDB for MySQL Standard Edition 8.0.1を実行する必要があります。
クラスターのバージョンを確認する方法については、「エンジンバージョン5.6、5.7、および8.0」トピックの「エンジンバージョンの照会」セクションを参照してください。
制限事項
大規模トランザクションに対して最適化されたbinlog書き込みを有効にすると、大規模トランザクションによって生成されたbinlogは専用のbinlogファイルに書き込まれます。 次の図は、専用binlogファイルのヘッダーにFORMAT DESCRIPTION EVENTやPREVIOUS GTIDS LOG EVENTなどのイベントが含まれていることを示しています。 IGNORABLE LOG eventと呼ばれる特別なプレースホルダーイベントもヘッダーに含まれています。 下流システムは自動的にIGNORABLE LOGイベントを無視する。
binlogファイルの特殊な構造により、次の制限が適用されます。
下流のレプリケーションノードは、データベース同時実行性ベースのマルチスレッドレプリケーションを使用できませんが、論理クロック同時実行性ベースのマルチスレッドレプリケーションを使用できます。
slave_parallel_workers>0
とslave_parallel_type='DATABASE'
を組み合わせて指定しないでください。 ただし、slave_parallel_workers> 0
とslave_parallel_type= 'logical_clock'
を組み合わせて指定できます。大規模トランザクションのbinlogファイルにはチェックサムを使用できません。
使用法
loose_enable_large_trx_optimization
パラメーターをONに設定して、大規模トランザクションの最適化されたbinlog書き込みを有効にします。 loose_binlog_large_trx_threshold_up
パラメーターを使用して、大規模トランザクションの最適化されたbinlog書き込みをトリガーするしきい値binlogサイズを定義します。
パラメーターの設定方法については、「クラスターおよびノードパラメーターの設定」をご参照ください。
下表に、各パラメーターを説明します。
パラメーター | レベル | 説明 |
loose_enable_large_trx_optimization | グローバル | 大規模トランザクションの最適化binlog書き込みを有効または無効にするかどうかを指定します。 有効な値:
このパラメーターは、クラスターを再起動しなくてもすぐに有効になります。 |
loose_binlog_large_trx_threshold_up | グローバル | 大規模トランザクションの最適化されたbinlog書き込みをトリガーするしきい値binlogサイズ。 大規模トランザクションの最適化されたbinlog書き込みを有効にした後、トランザクションによって生成されたbinlogのサイズがしきい値を超えると、最適化されたbinlog書き込みがトリガーされます。
このパラメーターは、クラスターを再起動しなくてもすぐに有効になります。 |
パフォーマンス比較
次の図は、PSL5ストレージタイプを使用して大規模トランザクションをコミットするクラスターで、大規模トランザクションの最適化されたbinlog書き込みが有効になる前後に必要な時間の違いを示しています。
図は、大きなトランザクションのための最適化されたbinlog書き込みが可能にされた後、大きなトランザクションをコミットするのに必要な時間の大幅な削減を示す。 その結果、大きなトランザクションコミットによって引き起こされる重いI/O負荷および長期の書き込みロックなどの問題が排除される。