PolarDB for MySQL は、大規模トランザクション向けにバイナリログ(binlog)の書き込みを最適化できます。この最適化は、他のトランザクションが大規模トランザクションによって遅延またはブロックされるのを防ぐのに役立ちます。このトピックでは、大規模トランザクション向けに最適化された binlog 書き込みの使用方法と使用制限について説明します。
背景
バイナリロギングが有効になっている場合、トランザクションの binlog データは、トランザクションがコミットされたときに binlog ファイルに書き込まれます。次の図は、そのプロセスを示しています。トランザクションが実行されると、生成された binlog はトランザクションの binlog キャッシュに一時的に保存されます。複数のトランザクションが同時にコミットされると、トランザクションは binlog キャッシュから binlog ファイルに binlog データを書き込むためにキューに入れられます。Trx2 などのトランザクションの1 つに 1 GB などの大きな binlog サイズがある場合、トランザクションは binlog データを binlog ファイルに書き込むのにより長い期間が必要になります。その結果、キュー内の他のトランザクションは待機を強制され、binlog の書き込みとトランザクションのコミットが遅延します。この待機時間により、システムが一時的に書き込み不能になり、低速 SQL クエリの急増などの問題が発生する可能性があります。その結果、アプリケーションは失敗した操作を繰り返し再試行する可能性があり、これにより新しい接続が急増し、システム負荷がさらに増加します。
この問題に対処するために、PolarDB for MySQL は、大規模トランザクション向けに最適化された binlog 書き込み機能を提供します。この機能を有効にすると、大規模トランザクションの binlog 書き込みプロセスが他のトランザクションのコミットプロセスを妨げなくなります。この最適化により、システムの一時的な書き込み不能状態が防止されます。書き込み不能状態になると、低速の SQL 書き込みリクエストの急増や接続の急激な増加などの問題が発生する可能性があります。
サポートされているバージョン
PolarDB for MySQL クラスタは Enterprise Edition または Standard Edition であり、次のデータベースエンジンバージョンを実行している必要があります。
PolarDB for MySQL 8.0.1(リビジョンバージョン 8.0.1.1.42 以降)
PolarDB for MySQL 8.0.2(リビジョンバージョン 8.0.2.2.25 以降)
クラスタのバージョンの確認方法については、エンジンバージョン 5.6、5.7、および 8.0 トピックの「エンジンバージョンのクエリ」セクションをご参照ください。
制限事項
大規模トランザクション向けに最適化された binlog 書き込みを有効にすると、大規模トランザクションによって生成された binlog は専用の binlog ファイルに書き込まれます。次の図は、専用の binlog ファイルのヘッダーに FORMAT_DESCRIPTION_EVENT や PREVIOUS_GTIDS_LOG_EVENT などのイベントが含まれていることを示しています。IGNORABLE_LOG_EVENT と呼ばれる特別なプレースホルダーイベントもヘッダーに含まれています。ダウンストリームシステムは IGNORABLE_LOG_EVENT を自動的に無視します。
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 負荷の増大や書き込みロックの長期化などの問題が解消されます。