テーブル属性
テーブル属性機能は、TiDBv5.3.0で導入されました。この機能を使用すると、特定の属性をテーブルまたはパーティションに追加して、属性に対応する操作を実行できます。たとえば、テーブル属性を使用して、リージョンのマージ動作を制御できます。
現在、TiDBは、リージョンのマージ動作を制御するために、テーブルまたはパーティションにmerge_option
属性を追加することのみをサポートしています。 merge_option
属性は、ホットスポットの処理方法の一部にすぎません。詳細については、 ホットスポットの問題のトラブルシューティングを参照してください。
ノート:
- TiDB BinlogまたはTiCDCを使用してレプリケーションを実行するか、BRを使用して増分バックアップを実行する場合、レプリケーションまたはバックアップ操作は、テーブル属性を設定するDDLステートメントをスキップします。ダウンストリームまたはバックアップクラスターでテーブル属性を使用するには、ダウンストリームまたはバックアップクラスタでDDLステートメントを手動で実行する必要がありクラスタ。
- TiDBv5.4.0はインデックスリージョンをサポートしていません。インデックスリージョンの詳細については、 スプリットインデックスリージョンを参照してください。
- TiDB v5.4.0では、テーブル属性の追加は既存のパーティションでのみ有効です。テーブル属性を追加した後にパーティションを追加または削除するには、テーブル属性をリセットする必要があります。詳細な方法については、 テーブル属性の使用方法を参照してください。
使用法
テーブル属性はkey=value
の形式です。複数の属性はコンマで区切られます。次の例では、 t
は変更するテーブルの名前、 p
は変更するパーティションの名前です。 []
の項目はオプションです。
テーブルまたはパーティションの属性を設定します。
ALTER TABLE t [PARTITION p] ATTRIBUTES [=] 'key=value[, key1=value1...]';テーブルまたはパーティションの属性をリセットします。
ALTER TABLE t [PARTITION p] ATTRIBUTES [=] DEFAULT;すべてのテーブルとパーティションの属性を確認してください。
SELECT * FROM information_schema.attributes;テーブルまたはパーティションに構成されている属性を参照してください。
SELECT * FROM information_schema.attributes WHERE id='schema/t[/p]';特定の属性を持つすべてのテーブルとパーティションを表示します。
SELECT * FROM information_schema.attributes WHERE attributes LIKE '%key%';
属性オーバーライドルール
テーブルに設定された属性は、テーブルのすべてのパーティションで有効になります。ただし、例外が1つあります。テーブルとパーティションが同じ属性で構成されているが、属性値が異なる場合、パーティション属性はテーブル属性をオーバーライドします。たとえば、テーブルt
がkey=value
属性で構成され、パーティションp
がkey=value1
で構成されているとします。
ALTER TABLE t ATTRIBUTES[=]'key=value';
ALTER TABLE t PARTITION p ATTRIBUTES[=]'key=value1';
この場合、 key=value1
はp1
パーティションで実際に有効になる属性です。
テーブル属性を使用してリージョンのマージ動作を制御する
ユーザーシナリオ
書き込みホットスポットまたは読み取りホットスポットがある場合は、テーブル属性を使用してリージョンのマージ動作を制御できます。最初にmerge_option
属性をテーブルまたはパーティションに追加してから、その値をdeny
に設定できます。 2つのシナリオは次のとおりです。
新しく作成されたテーブルまたはパーティションにホットスポットを書き込む
新しく作成されたテーブルまたはパーティションにデータが書き込まれるときにホットスポットの問題が発生した場合は、通常、リージョンを分割して分散させる必要があります。ただし、分割/分散操作と書き込みの間に一定の時間間隔がある場合、これらの操作は書き込みホットスポットを真に回避しません。これは、テーブルまたはパーティションの作成時に実行される分割操作によって空のリージョンが生成されるため、時間間隔が存在する場合、分割されたリージョンがマージされる可能性があるためです。この場合を処理するには、 merge_option
属性をテーブルまたはパーティションに追加し、属性値をdeny
に設定します。
読み取り専用シナリオでの定期的な読み取りホットスポット
読み取り専用のシナリオで、リージョンを手動で分割することにより、テーブルまたはパーティションで発生する定期的な読み取りホットスポットを削減しようとし、ホットスポットの問題が解決された後に手動で分割されたリージョンをマージしたくないとします。この場合、 merge_option
属性をテーブルまたはパーティションに追加し、その値をdeny
に設定できます。
使用法
テーブルのリージョンがマージされないようにします。
ALTER TABLE t ATTRIBUTES 'merge_option=deny';テーブルに属するリージョンのマージを許可します。
ALTER TABLE t ATTRIBUTES 'merge_option=allow';テーブルの属性をリセットします。
ALTER TABLE t ATTRIBUTES DEFAULT;パーティションのリージョンがマージされないようにします。
ALTER TABLE t PARTITION p ATTRIBUTES 'merge_option=deny';パーティションに属するリージョンのマージを許可します。
ALTER TABLE t PARTITION p ATTRIBUTES 'merge_option=allow';merge_option
の属性を構成するすべてのテーブルまたはパーティションを表示します。SELECT * FROM information_schema.attributes WHERE attributes LIKE '%merge_option%';
属性オーバーライドルール
ALTER TABLE t ATTRIBUTES 'merge_option=deny';
ALTER TABLE t PARTITION p ATTRIBUTES 'merge_option=allow';
上記の2つの属性を同時に構成すると、パーティションp
に属するリージョンを実際にマージできます。パーティションの属性がリセットされると、パーティションp
はテーブルt
から属性を継承し、リージョンをマージできなくなります。
ノート:
- パーティションの属性のみが存在する場合、
merge_option=allow
の属性が構成されていても、パーティションは、実際のパーティション数に応じて、デフォルトで複数のリージョンに分割されます。すべてのリージョンをマージするには、 テーブルの属性をリセットしますにする必要があります。merge_option
属性を使用する場合は、PD構成パラメーターsplit-merge-interval
に注意する必要があります。merge_option
属性が構成されていないとします。この場合、リージョンが条件を満たす場合、リージョンはsplit-merge-interval
で指定された間隔の後にマージできます。merge_option
属性が構成されている場合、PDは、merge_option
構成に従って、指定された間隔の後にリージョンをマージするかどうかを決定します。