タイタンのコンフィグレーション
このドキュメントでは、対応する構成項目、データ変換メカニズム、関連パラメータ、およびレベルマージ機能を使用してタイタン有効または無効にする方法を紹介します。
タイタンを有効にする
注記:
- 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への変換速度よりも桁違いに遅くなります。テストでは、TiKVノード上の800GiBのTitanデータをtikv-ctlでRocksDBに完全圧縮変換するのに12時間かかりました。
パラメータ
Titanパラメータを適切に設定することで、データベースのパフォーマンスとリソース使用率を効果的に向上させることができます。このセクションでは、使用可能な主要なパラメータをいくつか紹介します。
min-blob-size
min-blob-size
使用すると、RocksDB に保存するデータと Titan の BLOB ファイルに保存するデータを決定するための値のサイズのしきい値を設定できます。テストによると、適切なしきい値は32KB
です。これにより、RocksDB と比較して Titan のパフォーマンスが低下しないことが保証されます。ただし、多くのシナリオでは、この値は最適ではありません。適切な値を選択するには、 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 の詳細-スレッド 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 設定ファイルの例です。1 またはKubernetes上でTiDBクラスターを構成する TiUPを使用して設定を変更するかを選択できます。
[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の両方のデータを収容するのに十分なディスク容量がない場合は、デフォルト値の
0.5
(discardable-ratio
を使用することをお勧めします。一般的に、使用可能なディスク容量が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 4.0では、範囲クエリのパフォーマンスを向上させ、Titan GCによるフォアグラウンド書き込み操作への影響を軽減するための新しいアルゴリズムレベルマージ導入されました。レベルマージは、以下のオプションで有効にできます。
[rocksdb.defaultcf.titan]
level-merge = true
レベルマージを有効にすると、次の利点があります。
- Titan 範囲クエリのパフォーマンスが大幅に向上しました。
- Titan GC によるフォアグラウンド書き込み操作への影響を軽減し、書き込みパフォーマンスを向上させます。
- Titan のスペース増幅とディスク使用量を削減します (デフォルト構成でのディスク使用量と比較して)。
したがって、Level Merge を有効にした場合の書き込み増幅は Titan の場合よりもわずかに高くなりますが、ネイティブ RocksDB の場合よりも低くなります。