OceanBaseデータベースは、MySQLおよびOracleの2種類のテナントモードをサポートしています。異なるユーザー層の利用習慣に対応するため、OceanBaseデータベースではそれぞれのモードでデータエンコーディングおよびデータ圧縮を行うためのさまざまな設定方法を提供しています。
OceanBaseデータベースでは、DDLを使用してテーブルレベルの圧縮またはエンコーディング方式を設定できます。
MySQLモードでのデータ圧縮およびエンコーディング方式の設定
MySQLモードでテーブルを作成または変更する際、row_format と compression を使用してエンコーディング形式および圧縮方式を設定できます。
ステートメントは以下のとおりです:
テーブル作成時に、テーブルのエンコーディング形式と圧縮方式を指定する
CREATE TABLE table_name table_definition_list ROW_FORMAT [=] row_format COMPRESSION [=] 'compression';CREATE TABLEステートメントの詳細については、CREATE TABLEを参照してください。テーブル変更時に、テーブルのエンコーディング形式と圧縮方式を変更する
ALTER TABLE table_name [alter_table_action_list] [SET] ROW_FORMAT [=]row_format COMPRESSION [=] 'compression';ALTER TABLEステートメントの詳細については、ALTER TABLEを参照してください。
row_format の値は以下のとおりです:
REDUNDANTおよびCOMPACT:データはエンコードされず、フラット形式で保存されることを示します。DYNAMIC:データがエンコードされ、encoding形式で保存されることを示します。デフォルト値はDYNAMICです。COMPRESSED:データがエンコードされ、encoding形式で保存されることを示します。CONDENSED:データがエンコードされ、selective encoding形式で保存されることを示します。selective encoding形式はencoding形式のサブセットであり、クエリにより適したエンコーディング方式のみを使用します。
compression の値は以下のとおりです:
説明
zlibの異なるバージョン間で圧縮アルゴリズムが異なるため、同一データに対して圧縮処理を行った場合、圧縮結果が一致しない可能性があります。このため、OceanBaseデータベースのアップグレード中にレプリカデータの復旧が不可能になる問題を回避するため、V4.3.x系ではV4.3.0以降、OceanBaseデータベースは zlib_1.0 圧縮アルゴリズムをサポートしなくなりました。
none:データを圧縮しないことを示します。lz4_1.0:指定された圧縮アルゴリズムがlz4_1.0であることを示します。snappy_1.0:指定された圧縮アルゴリズムがsnappy_1.0であることを示します。zstd_1.0:指定された圧縮アルゴリズムがzstd_1.0であることを示します。zstd_1.3.8:指定された圧縮アルゴリズムがzstd_1.3.8であることを示します。デフォルト値はzstd_1.3.8です。lz4_1.9.1:指定された圧縮アルゴリズムがlz4_1.9.1であることを示します。
例:
テーブル作成時にエンコーディング形式と圧縮方式を指定する
以下のステートメントを実行して、テーブル作成時にエンコーディング形式をencoding形式、圧縮方式をzstd_1.0と指定します。
obclient> CREATE TABLE test ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) ROW_FORMAT=CONDENSED COMPRESSION='zstd_1.0';テーブル変更時に、テーブルのエンコーディング形式と圧縮方式を変更する
以下のステートメントを実行して、テーブルのエンコーディング形式をselective encoding形式に、圧縮方式をlz4_1.0に変更します。
obclient> ALTER TABLE test SET ROW_FORMAT = CONDENSED COMPRESSION = 'lz4_1.0';
Oracleモードでのデータ圧縮およびエンコーディング方式の設定
Oracleモードでテーブルを作成または変更する際に、データのエンコーディング形式と圧縮方式を指定することもできます。
ステートメントは以下のとおりです:
テーブル作成時にエンコーディング形式と圧縮方式を指定する
CREATE TABLE table_name table_definition_list compression;CREATE TABLEステートメントの詳細については、CREATE TABLEを参照してください。テーブル変更時に、テーブルのエンコーディング形式と圧縮方式を変更する
ALTER TABLE table_name [alter_table_action_list] compression;ALTER TABLEステートメントの詳細については、ALTER TABLEを参照してください。
ここで、compression の値は以下のとおりです:
NOCOMPRESS:データはエンコードまたは圧縮されず、フラット形式で保存されることを示します。COMPRESS BASIC:データはエンコードされず、フラット形式で保存され、lz4_1.0を使用して圧縮されることを示します。COMPRESS FOR OLTP:データはエンコードされず、フラット形式で保存され、zstd_1.3.8を使用して圧縮されることを示します。COMPRESS FOR QUERY:データはエンコードされ、encoding形式で保存され、lz4_1.0を使用して圧縮されることを示します。COMPRESS FOR ARCHIVE:データはエンコードされ、encoding形式で保存され、zstd_1.3.8を使用して圧縮されることを示します。デフォルト値はCOMPRESS FOR ARCHIVEです。COMPRESS FOR ARCHIVE HIGH:データはエンコードされ、encoding形式で保存され、zstd_1.3.8を使用して圧縮されることを示します。COMPRESS FOR QUERY LOW:データはエンコードされ、selective encoding形式で保存され、lz4_1.0を使用して圧縮されることを示します。selective encoding形式はencoding形式のサブセットであり、クエリにより適したエンコーディング方式のみを使用します。
例:
テーブル作成時にエンコーディング形式と圧縮方式を指定する
以下のステートメントを実行して、テーブル作成時にテーブルのエンコーディング形式をencoding形式、圧縮方式をlz4_1.0と指定します。
obclient> CREATE TABLE test ( id number NOT NULL, fname VARCHAR2(30), lname VARCHAR2(30), hired DATE NOT NULL DEFAULT sysdate, separated DATE, job_code INT NOT NULL, store_id INT NOT NULL ) COMPRESS FOR QUERY;テーブル変更時に、テーブルのエンコーディング形式と圧縮方式を変更する
以下のステートメントを実行して、テーブルのエンコーディング形式をencoding形式に変更し、同時に圧縮方式をzstd_1.3.8に変更します。
obclient> ALTER TABLE test COMPRESS FOR ARCHIVE;
SSTableが生成されたテーブルの圧縮方式を変更する
SSTableが生成されたテーブルで圧縮オプションを変更する場合、一度のメジャーコンパクションに過度なI/O書き込み負荷をかけないよう、段階的なコンパクション(プログレッシブコンパクション)によって徐々にすべてのマイクロブロックデータを書き直し、圧縮方式の変更を完了する必要があります。プログレッシブコンパクションの回数は、ALTER TABLE ステートメント内で progressive_merge_num の値を設定することで指定できます。
具体的な手順は以下のとおりです:
テナント管理者がデータベースにログインします。
以下のステートメントを実行して、プログレッシブコンパクションの回数を設定します。
progressive_merge_numは、テーブルのプログレッシブコンパクションの回数を設定するために使用されます。デフォルトは0で、増分コンパクションを意味します。値を1に設定すると、フルコンパクションを意味します。プログレッシブコンパクションの回数を2回に設定する例は以下のとおりです:
obclient> ALTER TABLE t1 SET progressive_merge_num=2;設定が成功すると、その後のシステムは毎日のコンパクションで徐々にデータの書き直しを完了します。
説明
データの書き直しをできるだけ早く完了させたい場合は、progressive_merge_num の値を 1 に設定した後、手動でメジャーコンパクションを開始します。手動でコンパクションを開始する操作については、手動でコンパクションをトリガーする を参照してください。
圧縮オプションを変更します。
MySQLモードで圧縮オプションを変更する操作については、このセクションの MySQLモードでのデータ圧縮およびエンコーディング方式の設定 を参照してください。
Oracleモードで圧縮オプションを変更する操作については、このセクションの Oracleモードでのデータ圧縮およびエンコーディング方式の設定 を参照してください。