タイタンのコンフィグレーション
このドキュメントでは、対応する構成項目、データ変換メカニズム、関連パラメータ、およびレベルマージ機能を使用して巨人有効または無効にする方法を紹介します。
タイタンを有効にする
注記:
- TiDB v7.6.0 以降では、新しいクラスターでは Titan がデフォルトで有効になり、ワイド テーブルと JSON データの書き込みパフォーマンスが向上します。1 しきい値のデフォルト値は
min-blob-size
から1KB
32KB
変更されました。- v7.6.0 以降のバージョンにアップグレードされた既存のクラスターは元の構成を保持します。つまり、Titan が明示的に有効になっていない場合は、引き続き RocksDB が使用されます。
- クラスターを TiDB v7.6.0 以降のバージョンにアップグレードする前に Titan を有効にしていた場合、アップグレード後に Titan が有効になり、アップグレード前の
min-blob-size
の構成も保持されます。アップグレード前に値を明示的に構成しない場合は、アップグレード後のクラスター構成の安定性を確保するために、古いバージョン1KB
のデフォルト値が保持されます。
Titan は RocksDB と互換性があるため、RocksDB を使用する既存の TiKV インスタンスで Titan を直接有効にすることができます。Titan を有効にするには、次のいずれかの方法を使用できます。
方法 1: TiUPを使用してクラスターをデプロイした場合は、次の例に示すように、
tiup cluster edit-config ${cluster-name}
コマンドを実行し、TiKV 構成ファイルを編集できます。tikv: rocksdb.titan.enabled: true設定を再ロードすると、TiKV が動的にローリング再起動されます。
tiup cluster reload ${cluster-name} -R tikv詳細なコマンドについてはTiUPを使用して構成を変更する参照してください。
方法 2: TiKV 構成ファイルを直接編集して Titan を有効にします (本番環境では推奨されません)。
[rocksdb.titan] enabled = true方法 3: TiDB Operatorの
${cluster_name}/tidb-cluster.yaml
構成ファイルを編集します。spec: tikv: ## Base image of the component baseImage: pingcap/tikv ## tikv-server configuration ## Ref: https://docs.pingcap.com/tidb/stable/tikv-configuration-file config: | log-level = "info" [rocksdb] [rocksdb.titan] enabled = true変更を有効にするために、TiDB クラスターのオンライン ローリング再起動をトリガーする構成を適用します。
kubectl apply -f ${cluster_name} -n ${namespace}詳細についてはKubernetes での TiDBクラスタの構成を参照してください。
データ変換
Titan を有効にした後、RocksDB に保存されている既存のデータは Titan エンジンにすぐには移動されません。新しいデータが TiKV に書き込まれ、RocksDB が圧縮を実行すると、値は徐々にキーから分離され、 Titan に書き込まれます。同様に、 BRスナップショット/ログを通じて復元されたデータ、スケーリング中に変換されたデータ、またはTiDB Lightning物理インポート モードによってインポートされたデータは、Titan に直接書き込まれません。圧縮が進むにつれて、処理された SST ファイル内のデフォルト値 ( 32KB
) のmin-blob-size
を超える大きな値が Titan に分離されます。TiKVの詳細 > Titan kv > blob ファイル サイズパネルを観察してデータ サイズを見積もることで、Titan に保存されているファイルのサイズを監視できます。
書き込みプロセスを高速化したい場合は、 tikv-ctl を使用して、TiKV クラスター全体のデータを手動で圧縮できます。詳細については、 手動圧縮を参照してください。RocksDB から Titan への変換中はデータ アクセスが継続されるため、RocksDB のブロックキャッシュによってデータ変換プロセスが大幅に高速化されます。テストでは、 tikv-ctl を使用して、670 GiB のボリュームの TiKV データを 1 時間で Titan に変換できました。
Titan Blob ファイル内の値は連続しておらず、Titan のキャッシュは値レベルであるため、圧縮中に Blob キャッシュは役に立たないことに注意してください。Titan から RocksDB への変換速度は、RocksDB から Titan への変換速度よりも 1 桁遅くなります。テストでは、完全な圧縮で tikv-ctl を使用して TiKV ノード上の 800 GiB の Titan データのボリュームを RocksDB に変換するのに 12 時間かかります。
パラメーター
Titan パラメータを適切に構成することで、データベースのパフォーマンスとリソース使用率を効果的に向上できます。このセクションでは、使用できるいくつかの重要なパラメータを紹介します。
min-blob-size
min-blob-size
を使用して値のサイズのしきい値を設定し、どのデータを RocksDB に保存し、どのデータを Titan の BLOB ファイルに保存するかを決定できます。テストによると、 32KB
が適切なしきい値です。これにより、Titan のパフォーマンスが RocksDB と比較して低下しないことが保証されます。ただし、多くのシナリオでは、この値は最適ではありませんmin-blob-size
がパフォーマンスに与える影響を参照して適切な値を選択することをお勧めします。書き込みパフォーマンスをさらに向上させ、スキャン パフォーマンスの低下を許容できる場合は、最小値の1KB
に設定できます。
blob-file-compression
とzstd-dict-size
blob-file-compression
を使用して、Titan の値に使用する圧縮アルゴリズムを指定できます。また、 zstd
からzstd-dict-size
までの辞書圧縮を有効にして、圧縮率を向上させることもできます。
blob-cache-size
Titan の値のキャッシュ サイズを制御するには、 blob-cache-size
使用します。キャッシュ サイズが大きいほど、Titan の読み取りパフォーマンスが向上します。ただし、キャッシュ サイズが大きすぎると、メモリ不足 (OOM) の問題が発生します。
データベースが安定して動作しているときは、ストア サイズから BLOB ファイル サイズを引いた値をstorage.block-cache.capacity
に設定し、監視メトリックに応じてblob-cache-size
~ memory size * 50% - block cache size
設定することをお勧めします。これにより、ブロックキャッシュがRocksDB エンジン全体に十分な大きさである場合に、BLOB キャッシュ サイズが最大化されます。
discardable-ratio
とmax-background-gc
discardable-ratio
パラメータとmax-background-gc
パラメータは、Titan の読み取りパフォーマンスとガベージコレクションプロセスに大きな影響を与えます。
BLOB ファイル内の古いデータ (対応するキーが更新または削除されている) の割合がdiscardable-ratio
で設定されたしきい値を超えると、Titan GC がトリガーされます。このしきい値を下げると、スペースの増幅が軽減されますが、Titan GC の頻度が高くなる可能性があります。この値を上げると、Titan GC、I/O 帯域幅、CPU 消費が軽減されますが、ディスク領域の使用量は増加します。
TiKV Details - Thread CPU - RocksDB CPUから、Titan GC スレッドが長時間にわたってフル ロード状態になっていることが確認された場合は、 max-background-gc
を調整して Titan GC スレッド プール サイズを増やすことを検討してください。
rate-bytes-per-sec
rate-bytes-per-sec
を調整すると、RocksDB 圧縮の I/O レートを制限し、トラフィックが多いときのフォアグラウンドの読み取りおよび書き込みパフォーマンスへの影響を軽減できます。
shared-blob-cache
(v8.0.0 の新機能)
Titan BLOB ファイルと RocksDB ブロック ファイルの共有キャッシュを有効にするかどうかをshared-blob-cache
で制御できます。デフォルト値はtrue
です。共有キャッシュを有効にすると、ブロック ファイルの優先順位が高くなります。つまり、TiKV はブロック ファイルのキャッシュ ニーズを満たすことを優先し、残りのキャッシュを BLOB ファイル用に使用します。
Titan の構成例
以下は Titan 構成ファイルの例です。 TiUPを使用して設定を変更するまたはKubernetes上でTiDBクラスターを構成するいずれかを使用できます。
[rocksdb]
rate-bytes-per-sec = 0
[rocksdb.titan]
enabled = true
max-background-gc = 1
[rocksdb.defaultcf.titan]
min-blob-size = "32KB"
blob-file-compression = "zstd"
zstd-dict-size = "16KB"
discardable-ratio = 0.5
blob-run-mode = "normal"
level-merge = false
タイタンを無効にする
Titan を無効にするには、オプションrocksdb.defaultcf.titan.blob-run-mode
を設定します。オプションblob-run-mode
の値は次のとおりです。
- オプションを
normal
に設定すると、Titan は読み取りおよび書き込み操作を通常どおり実行します。 - オプションを
read-only
に設定すると、値のサイズに関係なく、新しく書き込まれたすべての値が RocksDB に書き込まれます。 - オプションを
fallback
に設定すると、値のサイズに関係なく、新しく書き込まれたすべての値が RocksDB に書き込まれます。また、Titan BLOB ファイルに保存されたすべての圧縮された値は、自動的に RocksDB に戻されます。
既存および将来のすべてのデータに対して Titan を完全に無効にするには、次の手順に従います。手順 2 はオンライン トラフィックのパフォーマンスに大きく影響するため、スキップできます。実際、手順 2 を実行しなくても、データ圧縮によって Titan から RocksDB にデータを移動するときに余分な I/O および CPU リソースが消費され、TiKV I/O または CPU リソースが制限されている場合はパフォーマンスが低下します (最大 50% 低下することもあります)。
Titan を無効にする TiKV ノードの構成を更新します。構成を更新するには、次の 2 つの方法があります。
tiup cluster edit-config
実行し、設定ファイルを編集して、tiup cluster reload -R tikv
を実行します。設定ファイルを手動で更新し、TiKV を再起動します。
[rocksdb.defaultcf.titan] blob-run-mode = "fallback" discardable-ratio = 1.0
注記:
Titan と RocksDB の両方のデータを収容するのに十分なディスク容量がない場合は、
discardable-ratio
にデフォルト値の0.5
を使用することをお勧めします。一般的に、使用可能なディスク容量が 50% 未満の場合はデフォルト値が推奨されます。これは、discardable-ratio = 1.0
場合、RocksDB データが増加し続けるためです。同時に、Titan 内の既存の BLOB ファイルをリサイクルするには、そのファイル内のすべてのデータを RocksDB に変換する必要があり、これは時間のかかるプロセスです。ただし、ディスク サイズが十分に大きい場合は、discardable-ratio = 1.0
に設定すると、圧縮中に BLOB ファイル自体の GC が削減され、帯域幅を節約できます。(オプション) tikv-ctl を使用して完全な圧縮を実行します。このプロセスでは、大量の I/O および CPU リソースが消費されます。
tikv-ctl --pd <PD_ADDR> compact-cluster --bottommost force圧縮が完了したら、 TiKV-Details / Titan - kvの下のBlob ファイル数メトリックが
0
に減少するまで待ちます。これらの TiKV ノードの構成を更新して Titan を無効にします。
[rocksdb.titan] enabled = false
レベルマージ(実験的)
TiKV 4.0 では、範囲クエリのパフォーマンスを向上させ、フォアグラウンド書き込み操作に対する Titan GC の影響を軽減するための新しいアルゴリズムレベルマージが導入されました。次のオプションを使用して、レベル マージを有効にできます。
[rocksdb.defaultcf.titan]
level-merge = true
レベルマージを有効にすると、次の利点があります。
- Titan 範囲クエリのパフォーマンスが大幅に向上しました。
- フォアグラウンド書き込み操作に対する Titan GC の影響を軽減し、書き込みパフォーマンスを向上させます。
- Titan のスペース増幅とディスク使用量を削減します (デフォルト構成でのディスク使用量と比較して)。
したがって、Level Merge を有効にした場合の書き込み増幅は Titan の場合よりもわずかに高くなりますが、ネイティブ RocksDB の場合よりも低くなります。