リージョンパフォーマンスの調整
このドキュメントでは、リージョンサイズを調整してリージョンのパフォーマンスを調整する方法と、リージョンサイズが大きい場合にバケットを使用して同時クエリを最適化する方法について説明します。さらに、このドキュメントでは、Active PD Follower機能を有効にして、PD が TiDB ノードにリージョン情報を提供する機能を強化する方法についても説明します。
概要
TiKV は自動的に最下層のデータを分割する 。データはキー範囲に基づいて複数のリージョンに分割されます。リージョンのサイズがしきい値を超えると、TiKV はそれを 2 つ以上のリージョンに分割します。
大規模なデータセットが関係するシナリオでは、リージョンサイズが比較的小さい場合、TiKV のリージョンが多すぎる可能性があり、リソースの消費量が増加し、 パフォーマンスの低下なります。v6.1.0 以降、TiDB はリージョンサイズのカスタマイズをサポートしています。リージョンのデフォルト サイズは 96 MiB です。リージョンの数を減らすには、リージョンをより大きなサイズに調整できます。
多くのリージョンのパフォーマンスオーバーヘッドを削減するには、 休止状態リージョンまたはRegion Merge
有効にすることもできます。
リージョンサイズを調整するには、 region-split-size
を使用します。
注記:
リージョンサイズの推奨範囲は [48MiB、258MiB] です。一般的に使用されるサイズは、96 MiB、128 MiB、256 MiB です。リージョンサイズを 1 GiB を超えて設定することはお勧めしません。サイズを 10 GiB 以上に設定しないでください。リージョンサイズが大きすぎると、次のような副作用が発生する可能性があります。
- パフォーマンスのジッター
- クエリのパフォーマンスが低下する(特に、広範囲のデータを扱うクエリの場合)
- 遅いリージョンスケジュール
リージョンサイズを調整するには、 coprocessor.region-split-size
構成項目を使用できます。TiFlashを使用する場合、リージョンサイズは 256 MiB を超えないようにしてください。
Dumplingツールを使用する場合、リージョンサイズは 1 GiB を超えないようにしてください。この場合、リージョンサイズを増やした後に同時実行性を減らす必要があります。そうしないと、TiDB のメモリが不足する可能性があります。
バケットを使用して同時実行性を高める
リージョンをより大きなサイズに設定した後、クエリの同時実行性をさらに向上させたい場合は、 coprocessor.enable-region-bucket
からtrue
に設定できます。この設定を使用すると、リージョンはバケットに分割されます。バケットはリージョン内のより小さな範囲であり、スキャンの同時実行性を向上させるための同時クエリの単位として使用されます。 coprocessor.region-bucket-size
を使用してバケット サイズを制御できます。
アクティブPDFollower機能を使用して、PDのリージョン情報クエリサービスのスケーラビリティを強化します。
多数のリージョンを持つ TiDB クラスターでは、ハートビートの処理とタスクのスケジュール設定のオーバーヘッドが増加するため、PD リーダーの CPU 負荷が高くなる可能性があります。クラスターに多数の TiDB インスタンスがあり、リージョン情報に対する要求の同時実行性が高い場合、PD リーダーの CPU 負荷がさらに増加し、PD サービスが利用できなくなる可能性があります。
高可用性を確保するために、PD リーダーはリージョン情報をフォロワーとリアルタイムで同期します。PD フォロワーはリージョン情報をメモリに保持して保存し、リージョン情報要求を処理できるようにします。システム変数pd_enable_follower_handle_region
をON
に設定することで、アクティブ PDFollower機能を有効にすることができます。この機能を有効にすると、TiDB はリージョン情報要求をすべての PD サーバーに均等に分散し、PD フォロワーもリージョン要求を直接処理できるため、PD リーダーの CPU 負荷が軽減されます。
PD は、リージョン同期ストリームのステータスを維持し、TiKV client-go のフォールバック メカニズムを使用することで、TiDB 内のリージョン情報が常に最新であることを保証します。
- PD リーダーとフォロワー間のネットワークが不安定な場合、またはフォロワーが利用できない場合は、リージョン同期ストリームが切断され、PD フォロワーはリージョン情報要求を拒否します。この場合、TiDB は PD リーダーへの要求を自動的に再試行し、フォロワーを一時的に利用不可としてマークします。
- ネットワークが安定している場合、リーダーとフォロワー間の同期に遅延が発生する可能性があるため、フォロワーから取得した一部のリージョン情報が古くなっている可能性があります。この場合、リージョンに対応する KV 要求が失敗すると、TiDB は PD リーダーに最新のリージョン情報を自動的に再要求し、KV 要求を再度 TiKV に送信します。