ガベージコレクションのコンフィグレーション
次のシステム変数を使用してガベージコレクション(GC) を構成できます。
tidb_gc_enable: TiKV のガベージコレクションを有効にするかどうかを制御します。tidb_gc_run_interval: GC 間隔を指定します。tidb_gc_life_time: 各 GC でデータが保持される時間制限を指定します。tidb_gc_concurrency: GC のロックを解決する番目のステップのスレッド数を指定します。tidb_gc_scan_lock_mode: GC のロック解決ステップでロックをスキャンする方法を指定します。tidb_gc_max_wait_time: アクティブなトランザクションが GC セーフ ポイントをブロックする最大時間を指定します。
システム変数の値を変更する方法の詳細については、 システム変数参照してください。
GC I/O制限
TiKVはGC I/O制限をサポートしています。1 gc.max-write-bytes-per-sec設定すると、GCワーカーの1秒あたりの書き込み回数が制限され、通常のリクエストへの影響を軽減できます。
0この機能を無効にすることを示します。
tikv-ctl を使用してこの構成を動的に変更できます。
tikv-ctl --host=ip:port modify-tikv-config -n gc.max-write-bytes-per-sec -v 10MB
TiDB 5.0 の変更点
TiDBの以前のリリースでは、ガベージコレクションはmysql.tidbシステムテーブルを介して設定されていました。このテーブルへの変更は引き続きサポートされますが、提供されているシステム変数を使用することをお勧めします。これにより、設定の変更が確実に検証され、予期しない動作を防ぐことができます( #20655 )。
CENTRALガベージコレクションはサポートされなくなりました。代わりに、TiDB 3.0以降のデフォルトであるDISTRIBUTED GCモードが自動的に使用されます。このモードは、TiDBがガベージコレクションを開始するために各TiKVリージョンにリクエストを送信する必要がなくなるため、より効率的です。
以前のリリースの変更点については、左側のメニューにあるTIDB バージョン セレクターを使用して、このドキュメントの以前のバージョンを参照してください。
TiDB 6.1.0 の変更点
TiDB v6.1.0より前のバージョンでは、TiDBのトランザクションはGCセーフポイントに影響を与えませんでした。v6.1.0以降、TiDBはGCセーフポイントを計算する際にトランザクションの開始TSを考慮するようになりました。これにより、アクセス対象のデータがクリアされてしまうという問題が解決されます。トランザクションが長すぎると、セーフポイントが長時間ブロックされ、アプリケーションのパフォーマンスに影響を及ぼします。
TiDB v6.1.0では、アクティブなトランザクションがGCセーフポイントをブロックする最大時間を制御するためのシステム変数tidb_gc_max_wait_time導入されました。この値を超えると、GCセーフポイントは強制的に転送されます。
圧縮フィルター内のGC
DISTRIBUTED GCモードをベースに、Compaction FilterのGCメカニズムは、独立したGCワーカースレッドではなく、RocksDBのコンパクションプロセスを利用してGCを実行します。この新しいGCメカニズムは、GCによる余分なディスク読み取りを回避します。また、古いデータをクリアした後、シーケンシャルスキャンのパフォーマンスを低下させる大量のトゥームストーンマークが残るのを防ぎます。
次の例は、TiKV 構成ファイルでメカニズムを有効にする方法を示しています。
[gc]
enable-compaction-filter = true
このGCメカニズムは、設定を動的に変更することでも有効にできます。次の例をご覧ください。
show config where type = 'tikv' and name like '%enable-compaction-filter%';
+------+-------------------+-----------------------------+-------+
| Type | Instance | Name | Value |
+------+-------------------+-----------------------------+-------+
| tikv | 172.16.5.37:20163 | gc.enable-compaction-filter | false |
| tikv | 172.16.5.36:20163 | gc.enable-compaction-filter | false |
| tikv | 172.16.5.35:20163 | gc.enable-compaction-filter | false |
+------+-------------------+-----------------------------+-------+
set config tikv gc.enable-compaction-filter = true;
show config where type = 'tikv' and name like '%enable-compaction-filter%';
+------+-------------------+-----------------------------+-------+
| Type | Instance | Name | Value |
+------+-------------------+-----------------------------+-------+
| tikv | 172.16.5.37:20163 | gc.enable-compaction-filter | true |
| tikv | 172.16.5.36:20163 | gc.enable-compaction-filter | true |
| tikv | 172.16.5.35:20163 | gc.enable-compaction-filter | true |
+------+-------------------+-----------------------------+-------+
注記:
圧縮フィルター機構を使用すると、GCの進行が遅れ、TiKVスキャンのパフォーマンスに影響する可能性があります。ワークロードに多数のコプロセッサリクエストが含まれており、パネルTiKV詳細 >コプロセッサー詳細で「Total Ops Details」の呼び出し回数が
next()またはprev()と、呼び出し回数がprocessed_keys回を大幅に上回っている場合は、以下の対策を講じることができます。
- v7.1.3 より前のバージョンの TiDB では、GC を高速化するために Compaction Filter を無効にすることをお勧めします。
- TiDBバージョンv7.1.3からv7.5.6では、各リージョン
region-compact-min-redundant-rowsの冗長バージョンの数と冗長バージョンregion-compact-redundant-rows-percentの割合に基づいて自動的にコンパクションが実行され、コンパクションフィルタGCのパフォーマンスが向上します。この場合、コンパクションフィルタを無効にするのではなく、これらの設定項目を調整してください。- v7.5.7以降、
region-compact-min-redundant-rowsとregion-compact-redundant-rows-percent非推奨となりました。TiDBはgc.auto-compaction.redundant-rows-thresholdとgc.auto-compaction.redundant-rows-percent-thresholdに基づいて自動的にコンパクションを実行するようになりました。この場合、コンパクションフィルターを無効にするのではなく、これらの設定項目を調整してください。