テーブル属性

テーブル属性機能は、TiDB v5.3.0 で導入されました。この機能を使用すると、テーブルまたはパーティションに特定の属性を追加して、属性に対応する操作を実行できます。たとえば、テーブル属性を使用して、リージョンのマージ動作を制御できます。

現在、TiDB は、リージョンのマージ動作を制御するためにテーブルまたはパーティションにmerge_option属性を追加することのみをサポートしています。 merge_option属性は、ホットスポットを処理する方法の一部にすぎません。詳細については、 ホットスポットの問題のトラブルシューティングを参照してください。

ノート:

  • TiDB Binlogまたは TiCDC を使用してレプリケーションを実行するか、BR を使用して増分バックアップを実行する場合、レプリケーションまたはバックアップ操作は、テーブル属性を設定する DDL ステートメントをスキップします。ダウンストリームまたはバックアップ クラスターでテーブル属性を使用するには、ダウンストリームまたはバックアップ クラスターで DDL ステートメントを手動で実行する必要があります。

使用法

テーブル属性は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 つあります。テーブルとパーティションが同じ属性で異なる属性値で構成されている場合、パーティション属性がテーブル属性をオーバーライドします。たとえば、テーブルtkey=value属性で構成され、パーティションpkey=value1で構成されているとします。

ALTER TABLE t ATTRIBUTES[=]'key=value'; ALTER TABLE t PARTITION p ATTRIBUTES[=]'key=value1';

この場合、 key=value1p1パーティションで実際に有効になる属性です。

テーブル属性を使用してリージョン結合動作を制御する

ユーザー シナリオ

書き込みホットスポットまたは読み取りホットスポットがある場合は、テーブル属性を使用してリージョンのマージ動作を制御できます。最初に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属性がテーブル レベルでのみ構成されている場合、 merge_option=allowであっても、テーブルはデフォルトで実際のパーティション数に従って複数のリージョンに分割されます。すべてのリージョンをマージするには、 テーブルの属性をリセットしますする必要があります。
  • merge_option属性を使用する場合は、PD 構成パラメーターsplit-merge-intervalに注意する必要があります。 merge_option属性が構成されていないとします。この場合、リージョンが条件を満たしていれば、 split-merge-intervalで指定された間隔の後にリージョンをマージできます。 merge_option属性が構成されている場合、PD は、 merge_option構成に従って、指定された間隔の後にリージョンをマージするかどうかを決定します。