本記事では、SQLステートメントを使用してテーブルレベルのホットキャッシュポリシー(STORAGE_CACHE_POLICY)を変更する方法について説明します。
- 通常テーブルのホットキャッシュポリシーを変更する。
- インデックステーブルのホットキャッシュポリシーを変更する。
注意事項
テーブル/インデックスのホットキャッシュ戦略は、共有ストレージモードでのみ変更できます。
通常テーブルのホットキャッシュポリシーの変更
テーブル作成後、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 内の異なるプロパティはキーと値の形式で定義されます。各プロパティの意味は以下の通りです:
GLOBAL = {"hot" | "auto"}:テーブル全体のデータに対するホットキャッシュポリシーを指定します。取り得る値は以下の通りです:hot:指定したテーブルのすべてのデータがホットデータであることを意味します。キャッシュ用ディスク容量に余裕がある場合、テーブル内のすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定したテーブルのホットデータはシステムが自動的に識別することを意味します。
timeline_strategy_list:タイムライン戦略パラメータのリストを表します。各パラメータは半角カンマで区切られます。ホットキャッシュのタイムライン戦略は、時間を基準にパーティションデータがホットデータかどうかを判断するメカニズムをサポートしており、システムは設定された戦略に基づいて、ローカルキャッシュディスク上のパーティションデータを自動的に調整します。説明
タイムライン:Rangeパーティションで定義されたパーティション範囲の値に基づいてホットデータをキャッシュします。一定の時間条件を満たすと、そのパーティションのデータはホットデータとして判定されます。タイムライン戦略を使用する際は、以下の点に注意してください:
- Rangeパーティションテーブルのみがサポートされます(Rangeパーティションは1次または2次でも構いません)。期限切れの判断に時間が必要なためです。ただし、ダブル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);
インデックステーブルのホットキャッシュポリシーの変更
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次でも構いません)。期限切れの判断に時間が必要なためです。ただし、ダブル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");