OceanBaseデータベースは、MySQLモードとOracleモードのテナントをサポートしています。異なるユーザー層の使い勝手に対応するため、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以降、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に設定した後、手動でメジャーコンパクションを1回発生させることができます。手動でメジャーコンパクションを発生させる操作については、手動でメジャーコンパクションをトリガーするを参照してください。
圧縮オプションを変更します。
MySQLモードで圧縮オプションを変更する操作については、このセクションの MySQLモードでのデータ圧縮とエンコーディング方式の設定 を参照してください。
Oracleモードで圧縮オプションを変更する操作については、このセクションの Oracleモードでのデータ圧縮とエンコーディング方式の設定 を参照してください。