本記事では、SQL文を使用してテーブルレベルのホットスポットキャッシュポリシー(STORAGE_CACHE_POLICY)を作成する方法について説明します。
- 通常のテーブルのホットスポットキャッシュポリシーを作成します。
- インデックス付きテーブルのホットスポットキャッシュポリシーを作成します。
注意事項
共有ストレージモードでのみ、テーブル/インデックス作成時にホットキャッシュポリシーを指定できます。
通常テーブルのホットスポットキャッシュポリシーの作成
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP2以降のバージョンから共有ストレージモードで、テーブル作成時にテーブルレベルのホットスポットキャッシュポリシーを指定する機能がサポートされています。
テーブル作成時にテーブルレベルのホットスポットキャッシュポリシーを指定するには、CREATE TABLE ステートメントの後にテーブルオプション STORAGE_CACHE_POLICY を追加します。構文は以下のとおりです:
CREATE TABLE table_name (table_definition_list)
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 はオプションです。STORAGE_CACHE_POLICY パラメータを指定しない場合、テーブル作成時にデフォルトでテナント構成パラメータ default_storage_cache_policy の値が使用されます。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:分を表します。
例
ホットデータを手動で指定します。
CREATE TABLE tbl1 ( col1 INT, col2 INT) STORAGE_CACHE_POLICY (GLOBAL = "hot");タイムライン方式でホットデータを指定します。
CREATE TABLE tbl2 ( col1 BIGINT NOT NULL, col2 VARCHAR(50), col3 DATE NOT NULL) STORAGE_CACHE_POLICY ( BOUNDARY_COLUMN = col3, HOT_RETENTION = 1 MONTH) PARTITION BY RANGE COLUMNS(col3) ( PARTITION M202001 VALUES LESS THAN('2020/02/01'), PARTITION M202002 VALUES LESS THAN('2020/03/01'), PARTITION M202003 VALUES LESS THAN('2020/04/01'), PARTITION MMAX VALUES LESS THAN MAXVALUE);
インデックステーブルのホットキャッシュ戦略の作成
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP2バージョン以降、共有ストレージモードでインデックスのホットキャッシュ戦略を指定する機能がサポートされています。
インデックスのホットキャッシュ戦略は、以下の方法で指定できます:
- インデックス作成時に、インデックスのテーブルレベルのホットキャッシュ戦略を指定します。
- テーブル作成時にインデックスを作成し、インデックスのテーブルレベルのホットキャッシュ戦略を指定します。
- 既存のテーブルにインデックスを追加する際に、インデックスのテーブルレベルのホットキャッシュ戦略を指定します。
インデックス作成の詳細については、インデックスの作成を参照してください。
インデックス作成時に、インデックスのテーブルレベルホットキャッシュポリシーを指定する
構文は以下のとおりです:
CREATE INDEX index_name ON table_name (column_name)
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
テーブル作成時にインデックスを作成し、インデックスのテーブルレベルホットキャッシュポリシーを指定する
構文は以下のとおりです:
CREATE TABLE table_name (
column_name column_definition,
[column_name column_definition,...],
INDEX index_name(column_name) 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
既存のテーブルにインデックスを追加する際に、インデックスのテーブルレベルホットキャッシュポリシーを指定する
構文は以下のとおりです:
ALTER TABLE table_name ADD INDEX index_name(column_name)
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
関連パラメータの説明
インデックステーブルに対してホットキャッシュポリシーを設定できます。
ローカルインデックスについては、テーブルレベルの
STORAGE_CACHE_POLICYを指定できます。テーブルレベルのSTORAGE_CACHE_POLICYが指定されていない場合、デフォルトはnoneであり、これはデータテーブルのSTORAGE_CACHE_POLICY設定を使用することを意味します。ローカルインデックスパーティションのホットキャッシュポリシーは、データテーブルのパーティションルールに従います。グローバルインデックスについては、テーブルレベルの
STORAGE_CACHE_POLICYを指定するほか、インデックステーブルにパーティションがある場合は、インデックステーブルのパーティションレベルのSTORAGE_CACHE_POLICYも指定できます。グローバルインデックスでテーブルレベルのSTORAGE_CACHE_POLICYが指定されていない場合、デフォルトはnoneです。説明
V4.4.1以降のバージョンでは、グローバルインデックスでテーブルレベルの
STORAGE_CACHE_POLICYが指定されていない場合、プライマリテーブルがGlobalポリシーの場合は、プライマリテーブルのSTORAGE_CACHE_POLICYをデフォルトで使用し、プライマリテーブルがタイムラインポリシーの場合は、デフォルトでhotポリシーを使用します。
テーブルレベルの STORAGE_CACHE_POLICY を設定する際、パラメータ storage_cache_policy_option 内の異なるプロパティはKey-Value形式で定義されます。各プロパティの意味は以下の通りです:
GLOBAL = {"hot" | "auto" | "none"}:インデックスのデータがホットデータであるかどうかを指定します。値は以下のとおりです:hot:指定されたインデックスをホットストレージとして指定します。キャッシュディスク容量に余裕がある場合、インデックステーブル内のすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定されたインデックステーブルのホットデータをシステムが自動的に識別することを示します。none:デフォルト値であり、このインデックスのポリシーがプライマリテーブルのSTORAGE_CACHE_POLICYの値に従うことを示します。
timeline_strategy_list:タイムラインポリシーのパラメータリストを示します。各パラメータ間は英語のカンマで区切られます。ホットキャッシュタイムラインポリシーは、時間に基づいてパーティションデータがホットデータであるかどうかを判断する仕組みをサポートしており、システムは設定されたポリシーに基づいてローカルキャッシュディスク上のパーティションデータを自動的に調整します。ローカルインデックスでこのパラメータを使用することは推奨されません。説明
タイムライン: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:分を表します。
例
インデックスを作成する際に、インデックスのテーブルレベルの
STORAGE_CACHE_POLICYを指定します:テーブル
tbl3を作成します。CREATE TABLE tbl3 (col1 INT, col2 INT, col3 INT);インデックス
idx1_tbl3を作成し、インデックステーブルのデータをホットデータとして指定します。CREATE INDEX idx1_tbl3 ON tbl3 (col1) LOCAL STORAGE_CACHE_POLICY (GLOBAL = "hot");
テーブル作成時にインデックスを作成し、インデックステーブルのデータをホットデータとして指定します。
CREATE TABLE tbl4 (col1 INT, col2 INT, INDEX idx2 ((col1 + 1)) STORAGE_CACHE_POLICY (GLOBAL = "hot"), UNIQUE KEY ((col1 + col2)));既存のテーブルにインデックスを追加する際に、インデックステーブルのデータをホットデータとして指定します。
ALTER TABLE tbl4 ADD INDEX idx3(col1, col2) GLOBAL STORAGE_CACHE_POLICY (GLOBAL = "hot");