tencent cloud

TDSQL-C for MySQL

purge binlogの性能最適化

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-30 16:14:39

機能説明

データベースにおいて、binlogはデータベース操作を記録するために使用されるログファイルであり、データベースの追加、削除、更新操作などを含みます。時間の経過とともに、binlogファイルはますます増加し、大量のディスクスペースを占有します。したがって、定期的なクリーンアップが必要であり、つまりpurge binlog操作です。しかし、purge binlogと通常のrotateおよび書き込みトランザクションが競合します。特に、binlogファイルの数が多い場合、purge binlog操作時にパフォーマンスの揺らぎを容易に引き起こす可能性があります。Tencent Cloudカーネルチームは、binlogファイルのクリーンアップシナリオの分析を通じて、purge binlogのパフォーマンスを最適化しました。
purge binlogとrotate binlogのLOCK_index競合を最適化し、rotate binlogがロックを取得できずにbinlogの書き込みを続けられないのを防ぎます。
現在、purge binlogがindex lockを保持している期間中に、binlogが256Mに達した後、rotate binlogが必要な時にロックを読み取れず、書き込みが停止します。index lockを取得するまで続けられません。上記の問題に対して、主な最適化は、rotate binlogがindex lockを読み取れない場合、rotate binlogを行わず、現在のbinlogファイルにbinlogを書き続けることです。その後、index lockを取得しようと試み続け、index lockを読み取るまでrotate binlogを行いません。
パージが必要なbinlogファイルの読み取り量を削減し、それによりロックを減らします。
purge binlogプロセスでは、パージが必要なすべてのbinlog内のGtid情報を読み取り、それをmysql.gtid executedテーブルに書き込む必要があります。そのため、パージ期間中はgtidの排他ロックを保持し続け、通常のトランザクションがgtidロックを取得できなくなることがあります。上記の問題に対し、主な最適化として、binlogリスト内の最後のbinlogファイルのgtidのみを読み取るように変更しました。これにより、gtidロックの保持時間を短縮し、通常のトランザクションへの影響を軽減します。
binlogの単一ファイル上限を10Gに引き上げ、それによりrotate binlogの回数を大幅に削減します
デフォルトのbinlogサイズは256MBです。5000QPSの負荷下では、約1.4秒ごとにローテートが発生し、各ローテートに10~20msかかります。現在、max_binlog_sizeは256MBから10G(オープンソースMySQLは最大1Gをサポート)まで拡張可能です。同じ負荷条件下では、56秒に1回のローテートとなり、indexロックの取得頻度を削減します。現在の戦略は1Gに設定されていますが、業務負荷の必要性に応じてmax_binlog_sizeのパラメータ値をさらに調整できます。

サポートバージョン

カーネルバージョン TDSQL-C for MySQL 8.0 3.1.12 以上。
カーネルバージョン TDSQL-C for MySQL 5.7 2.1.12 以上。

適用シーン

binlogファイルの数が多い場合、purge binlog操作を実行するとロック競合が発生し、業務用binlogの書き込みがブロックされるシナリオです。

使用説明

txsql_binlog_rotate_try_lock_index および txsql_binlog_rotate_try_lock_log パラメータを ON に設定し、txsql_binlog_purge_check_file_count パラメータの値を10に設定することで、本機能を使用できます。詳細なパラメータ説明は以下の通りです:
名称
グローバル設定の有効範囲
タイプ
デフォルト
値の範囲
説明
txsql_binlog_rotate_try_lock_index
グローバル
bool
ON
ON/OFF
ONに設定した後、binlog rotateを実行する際にindexファイルのロックを取得できない場合、今回のrotateを放棄します。
txsql_binlog_rotate_try_lock_log
グローバル
bool
ON
ON/OFF
ONに設定した後、binlog rotateを実行する際にbinlogロックを取得できない場合、今回のrotateを放棄します。
txsql_binlog_purge_check_file_count
グローバル
ulonglong
10
0-UINT64_MAX
purge binlogを実行すると、binlog indexファイルからbinlogファイル名を取得します。binlogの数が多い場合、この操作には時間がかかりますが、通常は1つのbinlogファイル名を取得するだけで目的を達成できます。このパラメータは取得するファイル名の数を制御し、0は制限なしを意味します。通常は10に設定すれば十分です。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック