本記事では、SQLステートメントを使用してテーブルレベルのホットスポットキャッシュポリシー(STORAGE_CACHE_POLICY)を変更する方法について説明します。
- 通常のテーブルのホットスポットキャッシュポリシーを変更します。
- インデックス付きテーブルのホットスポットキャッシュポリシーを変更します。
注意事項
共有ストレージモードでのみ、テーブル/インデックスのホットキャッシュ戦略を変更できます。
通常テーブルのホットキャッシュポリシーを変更する
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP2バージョン以降、共有ストレージモードでテーブル単位のホットキャッシュポリシーを変更する機能がサポートされています。
テーブル作成後、ALTER TABLE ステートメントを使用してテーブルのホットキャッシュポリシー(STORAGE_CACHE_POLICY)を変更できます。構文は以下のとおりです:
ALTER TABLE table_name SET STORAGE_CACHE_POLICY (storage_cache_policy_option);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto"}
| timeline_strategy_list
timeline_strategy_list:
BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
関連パラメータの説明
storage_cache_policy_option 内の異なるプロパティは、Key-Value形式で定義されます。各プロパティの意味は以下のとおりです:
GLOBAL = {"hot" | "auto"}:テーブル全体のデータに対するホットキャッシュポリシーを指定します。値は以下のとおりです:hot:指定されたテーブルのすべてのデータがホットデータであることを示します。キャッシュディスク容量に余裕がある場合、テーブル内のすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定されたテーブルのホットデータをシステムが自動的に識別することを示します。
timeline_strategy_list:タイムライン戦略パラメータリストを示します。各パラメータは英語のカンマで区切られます。ホットキャッシュタイムライン戦略は、時間に基づいてパーティションデータがホットデータであるかどうかを判断する仕組みをサポートしており、システムは設定された戦略に基づいて、ローカルキャッシュディスク上のパーティションデータを自動的に調整します。説明
タイムライン:Rangeパーティションで定義されたパーティション範囲の値に基づいてホットデータをキャッシュします。一定の時間条件を満たした場合、そのパーティションのデータはホットデータとして判定されます。タイムライン戦略を使用する際には、以下の点に注意する必要があります:
- 時間経過による有効期限の判定が必要なため、Rangeパーティションテーブルのみサポートされています(Rangeパーティションは1次または2次パーティションのいずれでも可)。ただし、Double Rangeパーティションは、どのRangeパーティションの時間を基準にするかが決まらないため、使用できません。
- タイムラインを使用する場合、パーティション式には列名のみを含めることができ、式の変換はサポートされていません。例えば
PARTITION BY RANGE COLUMNS(expr(col3))は使用できません。 BOUNDARY_COLUMNはパーティションキーでなければなりません。パーティションキーが複数の列の場合、BOUNDARY_COLUMNは最初の列であり、パーティションの有効期限を判断するために使用されます。
BOUNDARY_COLUMN = column_name:ホットデータを判定する列を指定します。整数型(BIGINTまたはINT型、フォーマットはUnixタイムスタンプ)と日付時刻型(TIMESTAMP、DATE、DATETIMEまたはYEAR型)をサポートします。BOUNDARY_COLUMNの型が整数型の場合、テーブルのパーティション方式はRange/Range Columnsパーティションタイプをサポートします。BOUNDARY_COLUMNの型が日付時刻型の場合、テーブルのパーティション方式はRange Columnsパーティションタイプのみをサポートします。
BOUNDARY_COLUMN_UNIT = {"s" | "ms"}:パラメータBOUNDARY_COLUMNの時間単位を指定します。このパラメータはBOUNDARY_COLUMNが整数型の場合にのみ設定できます。整数値をタイムスタンプとして使用する場合は、タイムスタンプの単位を指定する必要があります。そうしないと、誤った時間が解釈される可能性があります。値は以下のとおりです:パーティション列が
INT型の場合、BOUNDARY_COLUMN_UNITの値はsのみです。パーティション列が
BIGINT型の場合、BOUNDARY_COLUMN_UNITの値はsまたはmsにすることができます。注意
フォーマットがUnixタイムスタンプでない場合、
INT型で表される時間を正しく認識できません。
HOT_RETENTION = intnum retention_time_unit:ホットデータの時間範囲を設定します。intnum:整数を表します。retention_time_unit:時間単位を表します。値は以下のとおりです:YEAR:年を表します。MONTH:月を表します。WEEK:週を表します。DAY:日を表します。HOUR:時間を表します。MINUTE:分を表します。
例
テーブル
tbl1のホットキャッシュを、システムが自動的に識別するように変更します。ALTER TABLE tbl1 SET STORAGE_CACHE_POLICY (GLOBAL = "auto");テーブル
tbl2内のパーティションデータについて、col3を基準に現在時刻から2か月以内のデータをホットデータとして判断します。ALTER TABLE tbl2 SET STORAGE_CACHE_POLICY (BOUNDARY_COLUMN = col3, HOT_RETENTION = 2 MONTH);
インデックステーブルのホットキャッシュポリシーを変更する
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP2以降のバージョンから共有ストレージモードで、インデックスのテーブルレベルのホットキャッシュポリシー機能を変更できるようになりました。
ALTER TABLE ステートメントを使用して、既存のインデックスのホットキャッシュポリシー(STORAGE_CACHE_POLICY)を変更できます。構文は以下のとおりです:
ALTER TABLE table_name ALTER INDEX STORAGE_CACHE_POLICY (storage_cache_policy_option);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto" | "none"}
| timeline_strategy_list
timeline_strategy_list:
| BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
関連パラメータの説明
GLOBAL = {"hot" | "auto" | "none"}:インデックスのデータがホットデータであるかどうかを指定します。値は以下のとおりです:hot:指定されたインデックスをホットストレージとして設定します。キャッシュディスク容量に余裕がある場合、インデックステーブル内のすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定されたインデックステーブルのホットデータをシステムが自動的に識別することを示します。none:デフォルト値で、このインデックスのポリシーがプライマリテーブルのSTORAGE_CACHE_POLICYの値に従うことを示します。
timeline_strategy_list:タイムライン戦略パラメータリストを示します。各パラメータ間は英語のカンマで区切ります。ホットキャッシュタイムライン戦略は、時間を用いてパーティションデータがホットデータであるかどうかを判断する仕組みをサポートしています。システムは設定された戦略に基づいて、ローカルキャッシュディスク上のパーティションデータを自動的に調整します。このパラメータはローカルインデックスでは使用しないことを推奨します。説明
タイムライン:Rangeパーティションで定義されたパーティション範囲の値に基づいてホットデータをキャッシュします。一定の時間条件を満たした場合、そのパーティションのデータはホットデータとして判定されます。タイムライン戦略を使用する際は、以下の点に注意する必要があります:
- 時間経過による有効期限の判定が必要なため、Rangeパーティションテーブルのみでの使用が可能です(Rangeパーティションは1次または2次パーティションのいずれでも可)。ただし、Double Rangeパーティションは使用できません。これは、どのRangeパーティションの時間を基準にするかを決定できないためです。
- タイムラインを使用する場合、パーティション式には列名のみを含めることができ、式の変換はサポートされていません。例えば
PARTITION BY RANGE COLUMNS(expr(col3))は使用できません。 BOUNDARY_COLUMNはパーティションキーでなければなりません。パーティションキーが複数の列の場合、BOUNDARY_COLUMNは最初の列であり、パーティションの有効期限を判断するために使用されます。
BOUNDARY_COLUMN = column_name:ホットデータを判定する列を指定します。整数型(BIGINTまたはINTタイプ、形式はUnixタイムスタンプ)と日付時刻型(TIMESTAMP、DATE、DATETIMEまたはYEARタイプ)をサポートします。BOUNDARY_COLUMNのタイプが整数型の場合、テーブルのパーティション方式はRange/Range Columnsパーティションタイプをサポートします。BOUNDARY_COLUMNのタイプが日付時刻型の場合、テーブルのパーティション方式はRange Columnsパーティションタイプのみをサポートします。
BOUNDARY_COLUMN_UNIT = {"s" | "ms"}:パラメータBOUNDARY_COLUMNの時間単位を指定します。このパラメータはBOUNDARY_COLUMNが整数型の場合にのみ設定できます。整数値をタイムスタンプとして使用する場合は、タイムスタンプの単位を指定する必要があります。そうしないと、誤った時間が解析される可能性があります。値は以下のとおりです:- パーティション列が
INTタイプの場合、BOUNDARY_COLUMN_UNITの値はsのみです。 - パーティション列が
BIGINTタイプの場合、BOUNDARY_COLUMN_UNITの値はsまたはmsとなります。
- パーティション列が
HOT_RETENTION = intnum retention_time_unit:ホットデータの時間範囲を設定します。intnum:整数を表します。retention_time_unit:時間単位を表します。値は以下のとおりです:YEAR:年を表します。MONTH:月を表します。WEEK:週を表します。DAY:日を表します。HOUR:時間を表します。MINUTE:分を表します。
例
インデックス idx2 のホットデータをシステムが自動的に識別するように変更します。
ALTER TABLE test_tbl2 ALTER INDEX idx2
STORAGE_CACHE_POLICY (GLOBAL = "auto");