AliSQLは、バイナリログのコミットフェーズ中にBinlog並列フラッシュ機能を最適化し、書き込みパフォーマンスを向上させます。 最適化後にこの機能を有効にすると、ApsaraDB RDSインスタンスの書き込みパフォーマンスが大幅に向上します。
前提条件
RDSインスタンスはMySQL 8.0を実行します。
RDSインスタンスは、20230930以降のマイナーエンジンバージョンを実行します。
説明RDSインスタンスのマイナーエンジンバージョンを表示するには、ApsaraDB RDSコンソールにログインし、[基本情報] ページに移動します。 [設定情報] セクションで、[マイナーエンジンバージョンのアップグレード] ボタンが表示されているかどうかを確認します。 ボタンが表示されている場合は、ボタンをクリックして、RDSインスタンスのマイナーエンジンバージョンを表示および更新できます。 ボタンが表示されない場合、RDSインスタンスは最新のマイナーエンジンバージョンを実行します。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
RDSインスタンスのsync_binlogパラメーターが1に設定されていません。
背景情報
MySQLでは、トランザクションがコミットされるたびにデータがバイナリログに書き込まれます。 書き込みは順番に実行される。 システムは、トランザクションのバイナリログにデータを次々に書き込みます。
書き込みプロセスは時間がかかる。 システムがデータをバイナリログに書き込む前に、システムはバイナリログキャッシュに格納されているすべてのイベントを解析し、Checksumおよびlog_posパラメーターに値を割り当ててから、グローバルトランザクション識別子 (GTID) イベントを生成する必要があります。 書き込みプロセスは、RDSインスタンスの書き込みパフォーマンスに重大なボトルネックをもたらします。 ボトルネックに対処するために、AliSQLはBinlog並列フラッシュ機能を最適化します。
最適化の詳細
バイナリログバッファ
AliSQLは、最適化を実装するためのバイナリログバッファを導入します。 複数のスレッドが割り当てられた後、システムはバイナリログイベントをバイナリログバッファに並列に書き込むことができる。 次に、バックエンドスレッドは、バイナリログバッファ内のデータをバイナリログファイルに書き込みます。 このようにして、システムは、並行して順番に完了しなければならない動作を実行することができる。 操作には、Checksumおよびlog_posパラメータに値を割り当て、GTIDイベントを生成することが含まれます。 これにより、イベントがバイナリログファイルに書き込まれるときの書き込みパフォーマンスが大幅に向上します。
グループコミット
MySQLでは、トランザクションコミット中にシステムがデータをバイナリログファイルに書き込み、さまざまなトランザクショングループのログファイルを再実行します。 これは、I/O操作を最大限にマージし、パフォーマンスを向上させるのに役立ちます。 最適化後、グループコミットの考え方は保持されます。 次の図は、グループコミットによるBinlog並列フラッシュ機能を示しています。
最適化の後、システムはトランザクション用のGTIDとバイナリログバッファを次々に割り当てます。 次に、システムは、トランザクションのグループのバイナリログイベントをバイナリログバッファに書き込む。 redoログファイルが保存され、バックエンドスレッドがバイナリログバッファ内のデータをバイナリログファイルに書き込んだ後、トランザクションのグループをコミットすることができます。
バイナリログの永続性
最適化後、バイナリログファイルは、定期的にバックエンドスレッドによって保持されます。 デフォルトでは、バイナリログファイルは1秒間に1回保持されます。
パラメーターの説明
loose_binlog_parallel_flush
このパラメーターは、Binlog並列フラッシュ機能を有効にするかどうかを指定します。 このパラメーターはグローバルシステム変数です。 有効な値: onとoff。 このパラメーターの値を変更すると、変更はすぐに有効になります。 RDSインスタンスを再起動する必要はありません。
最適化効果
テスト環境
次の表は、異なる仕様を使用するApsaraDB RDS for MySQLRDSインスタンスに対する機能最適化の効果を示しています。
サービス | Version | CPUとメモリ | ストレージタイプ | ストレージ容量 |
ApsaraDB RDS for MySQL | MySQL 8.0 (マイナーエンジンバージョン: 20230930) | 16 コア 32 GB | ESSD PL1 | 1,000 GB |
16 コア 32 GB | SSD | 1,000 GB | ||
16 コア 128 GB | ESSD PL1 | 1,000 GB | ||
16 コア 128 GB | SSD | 1,000 GB |
パラメーター設定
テストのRDSインスタンスは、高性能パラメータテンプレートを使用しています。 テンプレートでは、次のパフォーマンス関連のパラメーター設定が使用されます。sync_binlog = 1000
およびinnodB_flush_log_at_trx_commit = 2
。
テストスクリプト
Sysbenchのoltp_update_non_indexスクリプトは、パフォーマンステストに使用されます。 テストデータには100のテーブルが含まれ、各テーブルには100,000行が含まれます。
テスト結果
次の図は、テスト結果を示しています。 Binlog Parallel Flushは、ネイティブMySQL Normal Flushと比較して、RDSインスタンスの書き込みパフォーマンスを大幅に向上させます。 最大の改善は10% 30% に達することができます。