Binlog in Redo機能を使用すると、トランザクションがコミットされたときにシステムがバイナリログをredoログファイルに同期的に書き込むことができます。 これにより、ディスクに対する操作が減り、データベースのパフォーマンスが向上します。
前提条件
RDSインスタンスは、20200430以降のマイナーエンジンバージョンでMySQL 8.0を実行します。
背景情報
重要なMySQLビジネスシナリオでデータのセキュリティを確保するために、トランザクションがコミットされると、システムはバイナリログとredoログの両方を保存します。 この場合、次のパラメーター設定を設定する必要があります。
sync_binlog = 1;
innodb_flush_log_at_trx_commit = 1;
トランザクションがコミットされるたびに、システムは2つのI/O動作を実行する。 1つはバイナリログをディスクに書き込むことであり、もう1つはredoログをディスクに書き込むことです。 グループコミットはバイナリログに対して有効になっていますが、システムは2つのI/O操作が完了するまで待機する必要があります。 これは、特にクラウドディスクを使用する場合、トランザクション処理の効率に影響します。 I/Oマージのパフォーマンスは、コミットされる同時トランザクションの数によって異なります。 同時トランザクションの数が少ない場合、パフォーマンスは低くなります。 例えば、少数の書き込みトランザクションがコミットされるとき、システム応答は遅い。
トランザクションコミットメントの効率を高めるために、AliSQLはBinlog in Redo機能を提供しています。 persist_binlog_to_redoパラメーターをon
に設定すると、この機能を有効にできます。 トランザクションがコミットされると、システムはバイナリログをredoログファイルに同期的に書き込み、redoログファイルのみをディスクに保存します。 これにより、I/O消費が低減される。 バイナリログファイルは、定期的に別のスレッドを使用してディスクに非同期に格納されます。 例外が発生したときに再起動操作がトリガーされた場合、システムはredoログファイル内のバイナリログを使用してバイナリログファイルを補完します。 このようにして、データベースのパフォーマンスが向上し、システムの応答が速くなります。 加えて、バイナリログファイルが格納される回数が削減される。 これにより、ファイルシステムへの負荷が大幅に軽減され、パフォーマンスが向上します。 このプレッシャーは、ファイルの更新によってリアルタイムでトリガーされるfsync関数の呼び出しに起因します。
Binlog in Redo機能では、バイナリログの形式は変更されません。 バイナリログを必要とするレプリケーションおよびサードパーティツールは影響を受けません。
使用上の注意
ローカルディスクを使用するRDSインスタンスでBinlog in Redo機能を有効にし、物理バックアップファイルを使用してRDSインスタンスのデータを自己管理データベースに復元する場合は、ApsaraDB RDSが提供するXtraBackupツールを使用する必要があります。 詳細については、「ツールの準備」をご参照ください。
パラメーター
persist_binlog_to_redo
このパラメーターは、Binlog in Redo機能を有効にするかどうかを指定します。 このパラメーターはグローバルシステム変数です。 有効な値: onとoff。 このパラメーターの値を変更すると、変更はすぐに有効になります。 RDSインスタンスを再起動する必要はありません。
説明Binlog in Redo機能を有効にする場合は、
persist_binlog_to_redoパラメーターをon
に設定するだけです。 他のパラメータの設定を変更する必要はありません。sync_binlog = 1
の設定は自動的に有効になります。sync_binlog_interval
バイナリログが非同期に格納される間隔。 このパラメーターはグローバルシステム変数です。
persist_binlog_to_redoパラメーターがon
に設定されている場合にのみ有効です。 デフォルト値は 50 です。 単位: ミリ秒 (ms) 。 ほとんどの場合、デフォルト値が推奨されます。 このパラメーターの値を変更すると、変更はすぐに有効になります。 RDSインスタンスを再起動する必要はありません。
ストレステスト
テスト環境
アプリケーションサーバー: Alibaba Cloud ECS (Elastic Compute Service) インスタンス
RDSインスタンスの仕様: 32 CPUコア、64 GBメモリ、拡張SSD (ESSD)
RDSエディション: 非同期データレプリケーションを使用したRDS High-availability edition
テストケース
Sysbenchは、次のテストケースを提供します。
oltp_update_non_index
oltp_insert
oltp_write_only
テスト結果
oltp_update_non_index
Binlog in Redo機能を有効にすると、同時クエリの数が少ないと、1秒あたりのクエリ数 (QPS) が大幅に増加し、レイテンシが低くなります。
oltp_insert
Binlog in Redo機能を有効にすると、同時クエリの数が少ない場合、QPSが大幅に増加し、レイテンシが低くなります。
oltp_write_only
Binlog in Redo機能を有効にすると、同時クエリの数が少ない場合、QPSはわずかに増加し、レイテンシは低くなります。
バイナリログに対してfsync関数が呼び出された回数
Binlog in Redo機能を有効にすると、呼び出し回数が大幅に減少します。
テストの結論
oltp_update_non_indexおよびoltp_insertテストケースは単一ステートメントトランザクションをテストし、トランザクションは頻繁にコミットされます。 oltp_write_onlyテストケースでは、マルチステートメントトランザクションがテストされ、トランザクションのコミット頻度は低くなります。 このタイプのトランザクションには、2つのUPDATEステートメント、1つのDELETEステートメント、および1つのINSERTステートメントが含まれます。 oltp_update_non_indexおよびoltp_insertテストケースのパフォーマンス改善は、oltp_write_onlyテストケースよりも顕著です。
同時トランザクションの数が256未満の場合、Binlog in Redo機能はデータベースのパフォーマンスを大幅に向上させ、レイテンシを削減します。 ほとんどのシナリオでは、Binlog In Redo機能に大きなメリットがあります。
Binlog in Redo機能は、バイナリログに対してfsync関数が呼び出される回数を大幅に削減します。 これにより、ファイルシステムのパフォーマンスが向上します。