📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

シャード行IDビット

このドキュメントでは、暗黙の_tidb_rowidシャードされた後のシャードのビット数を設定するために使用されるSHARD_ROW_ID_BITSテーブル属性を紹介します。

コンセプト

非クラスター化主キーを持つテーブル、または主キーを持たないテーブルの場合、TiDBは暗黙的な自動インクリメント行IDを使用します。大量のINSERT操作が実行されると、データは単一のリージョンに書き込まれ、書き込みホットスポットが発生します。

ホットスポットの問題を軽減するには、 SHARD_ROW_ID_BITS設定します。行 ID が分散され、データが複数の異なるリージョンに書き込まれます。

  • SHARD_ROW_ID_BITS = 4 16個の破片を示す
  • SHARD_ROW_ID_BITS = 6 64個のシャードを示す
  • SHARD_ROW_ID_BITS = 0デフォルトの1シャードを示します

SHARD_ROW_ID_BITS = S設定すると、 _tidb_rowidの構造は次のようになります。

符号ビット破片の断片自動インクリメントビット
1ビットSビット63-Sビット
  • 自動インクリメントビットの値はTiKVに格納され、順次割り当てられます。値が割り当てられるたびに、次の値が1ずつ増加します。自動インクリメントビットは、列の値が_tidb_rowid場合、グローバルに一意であることを保証します。自動インクリメントビットの値が使い果たされると(つまり、最大値に達すると)、後続の自動割り当てはエラーFailed to read auto-increment value from storage engineで失敗します。
  • 値の範囲は_tidb_rowid : 最終的に生成される値の最大ビット数 = シャード ビット + 自動インクリメント ビットなので、最大値は(2^63)-1です。

注記:

シャードビットの選択( S ):

  • _tidb_rowidの合計ビット数は 64 であるため、シャードビット数は自動インクリメントビット数に影響します。シャードビット数が増加すると、自動インクリメントビット数は減少し、逆もまた同様です。したがって、自動インクリメント値のランダム性と利用可能な自動インクリメント領域のバランスをとる必要があります。
  • ベストプラクティスは、シャードビットをlog(2, x)に設定することです。ここで、 xクラスター内の TiKV ノードの数です。例えば、TiDB クラスターに TiKV ノードが 16 個ある場合、シャードビットをlog(2, 16) (つまり4に設定することをお勧めします。すべてのリージョンが各 TiKV ノードに均等にスケジュールされると、一括書き込みの負荷を異なる TiKV ノードに均等に分散し、リソース使用率を最大化できます。

使用方法の詳細についてはホットスポットの問題のトラブルシューティングガイド参照してください。

CREATE TABLE t ( id INT PRIMARY KEY NONCLUSTERED ) SHARD_ROW_ID_BITS = 4;
ALTER TABLE t SHARD_ROW_ID_BITS = 4;

このページは役に立ちましたか?