ロードベーススプリット
ロードベース分割は、TiDB4.0で導入された新機能です。これは、小さなテーブルの全表スキャンなど、リージョン間の不均衡なアクセスによって引き起こされるホットスポットの問題を解決することを目的としています。
シナリオ
TiDBでは、負荷が特定のノードに集中している場合、ホットスポットを簡単に生成できます。 PDは、パフォーマンスを向上させるために、すべてのノードに可能な限り均等に分散されるように、ホットリージョンをスケジュールしようとします。
ただし、PDスケジューリングの最小単位はRegionです。クラスタのホットスポットの数がノードの数よりも少ない場合、またはいくつかのホットスポットの負荷が他のリージョンよりもはるかに大きい場合、PDはホットスポットをあるノードから別のノードに移動することしかできず、クラスタ全体に負荷を共有させることはできません。 。
このシナリオは、全表スキャンや小さなテーブルのインデックスルックアップ、または一部のフィールドへの頻繁なアクセスなど、ほとんどが読み取り要求であるワークロードで特に一般的です。
以前は、この問題の解決策は、コマンドを手動で実行して1つ以上のホットスポットリージョンを分割することでしたが、このアプローチには2つの問題があります。
- リクエストがいくつかのキーに集中する可能性があるため、リージョンを均等に分割することが常に最良の選択であるとは限りません。このような場合、ホットスポットは均等に分割された後もリージョンの1つにある可能性があり、目標を実現するには複数の均等な分割が必要になる場合があります。
- 人間の介入はタイムリーでも単純でもありません。
実装の原則
Load Base Splitは、統計に基づいてリージョンを自動的に分割します。読み取り負荷が常にしきい値を10秒間超えているリージョンを識別し、これらのリージョンを適切な位置に分割します。分割位置を選択する場合、Load Base Splitは、分割後に両方のリージョンのアクセス負荷のバランスを取り、リージョン間のアクセスを回避しようとします。
ロードベース分割によって分割されたリージョンは、すぐにはマージされません。一方では、PDのMergeChecker
はホットリージョンをスキップします。一方、PDは、ハートビート情報のQPS
に従って2つのリージョンをマージするかどうかも決定し、ハイタッチの2つのリージョンのマージを回避しQPS
。
使用法
ロードベース分割機能は現在、 split.qps-threshold
つのパラメーター(QPSしきい値)とsplit.byte-threshold
のパラメーター(トラフィックしきい値)によって制御されています。リージョンの1秒あたりのすべてのタイプの読み取り要求の合計が10秒間連続してQPSしきい値またはトラフィックしきい値を超えると、PDはリージョンを分割します。
Load Base Splitはデフォルトで有効になっていますが、パラメーターはかなり高い値に設定されています。 split.qps-threshold
のデフォルトは3000
で、 split.byte-threshold
のデフォルトは30MB/秒です。この機能を無効にする場合は、2つのしきい値を同時に十分に高く設定します。
パラメータを変更するには、次の2つの方法のいずれかを実行します。
SQLステートメントを使用します。
set config tikv split.qps-threshold=3000TiKVを使用する:
curl -X POST "http://ip:status_port/config" -H "accept: application/json" -d '{"split.qps-threshold":"3000"}'
したがって、次の2つの方法のいずれかで構成を表示できます。
SQLステートメントを使用します。
show config where type='tikv' and name like '%split.qps-threshold%'TiKVを使用する:
curl "http://ip:status_port/config"
ノート:
v4.0.0-rc.2以降では、SQLステートメントを使用して構成を変更および表示できます。