# GC メカニズムおよび関連モジュール

![`smart`](GCMechanism_aa_002_20220509.png)

------------------------------------------------------------
TiDB のトランザクション実装は、MVCC (Multi-Version Concurrency Control) メカニズムを使用します。新しく書き込まれたデータが古いデータを上書きするとき、古いデータは置き換えられずに保持され、TiKV のキー・バリューのキーのタイムスタンプによってバージョンが区別されます。GC タスクは、もう必要とされない古いデータをクリーンアップすることです。MVCC の原理と実装は、TiKV ユニットで紹介されます。

GC全体のプロセス：
- 一つのTiDBクラスタ内のTiDBインスタンスがGC Leaderとして選出され、GCの操作はGC Leaderによって制御されます。

GCは定期的にトリガーされます。各GCポイントで、TiDBサーバーはまず、セーフポイントと呼ばれるタイムスタンプを計算します。セーフポイント以前に生成されたすべての前バージョンは非推奨とみなされ、GCによって削除する必要があります。各回のGCは次の3つのステップに分けられます：
- `Resolve Locks:`はすべてのリージョンをスキャンし、セーフポイント以前のデータを見つけ出し、あればロックデータをクリーンアップします。
- `Delete Ranges:` この段階は、`DROP TABLE`や`DROP INDEX`などの操作によって全範囲において廃止されたデータを迅速に削除し、削除操作がセーフポイントの前に行われることを注意しています。
- `Execute GC:` この段階の間、各TiKVインスタンスは、そのストア上のデータをスキャンし、各キーに必要なものでない古いバージョンを削除します。

デフォルトでは、GCは10分ごとにトリガーされ、各GCは最後の10分間のデータを保持します（つまり、デフォルトのGCライフタイムは10分であり、セーフポイントは現在時刻からGCライフタイムを引いたものとして計算されます）。 1回のGCが長時間実行されると、次のGCがトリガーされるまで次のGCが開始されない場合があります（次のGCがトリガーされる時間である場合）。 また、GCライフタイムを超えて長期間トランザクションを正常に動作させるために、セーフポイントはアクティブなトランザクションの開始時間（start_ts）を超えないようにします。