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モードでのデータ圧縮とエンコーディング方式の設定を参照してください。