このセクションでは、メジャーコンパクションの分類、状態、圧縮アルゴリズムについて説明します。
メジャーコンパクションは、動的データと静的データを統合する処理であり、時間がかかります。ダンプによって生成された増分データが一定量に達すると、Major Freezeを経てメジャーバージョンのコンパクションが実行されます。メジャーコンパクションとダンプの最大の違いは、メジャーコンパクションがテナントの統一されたスナップショットポイントと対応する静的データを統合する行為であり、最終的にはテナントレベルのスナップショットが形成されることです。
メジャーコンパクションの分類
メジャーコンパクションは、統合するデータ量に基づいて、以下のように分類されます:
フルコンパクション:静的データをすべて読み出し、動的データと統合して最終的な静的データを作成します。コンパクション時間が長く、I/OとCPUを消費します。
増分コンパクション:変更されたマクロブロックのみを統合し、変更されていないマクロブロックは再利用します。
増分コンパクションはメジャーコンパクションの作業量を大幅に削減し、現在のOceanBaseデータベースのデフォルトのメジャーコンパクションアルゴリズムです。
累積コンパクション:毎回データの一部をフルコンパクションし、数ラウンド後に全データを書き直します。
メジャーコンパクションに関する詳細情報については、メジャーコンパクションを参照してください。
メジャーコンパクションに関連するパラメータとその説明については、メジャーコンパクション設定の変更を参照してください。
メジャーコンパクションの状態
メジャーコンパクションの状態は、ビューDBA_OB_ZONE_MAJOR_COMPACTIONのstatus列で確認できます。
主なメジャーコンパクションの状態は以下のとおりです:
IDLE:メジャーコンパクションが実行されていないことを示します。COMPACTING:メジャーコンパクションが実行中であることを示します。VERIFYING:チェックサムの検証中であることを示します。
メジャーコンパクションの圧縮アルゴリズム
OceanBaseデータベースは、少量のデータをリアルタイムでディスクにフラッシュするのではなく、メジャーコンパクションを通じてデータを集中的にディスクにフラッシュします。そのため、圧縮を用いてディスクに書き込むことが可能であり、これによりディスクの空間利用率が向上します。圧縮アルゴリズムと圧縮機能の選択にあたっては、実際の状況に応じて、高い圧縮率ですがCPUを多く消費する方式と、通常の圧縮方式のいずれかを選択できます。
圧縮方式はパラメータdefault_compress_funcで設定でき、デフォルト値はzstd_1.3.8です。その他指定可能な値にはnone、lz4_1.0、snappy_1.0、zstd_1.0があります。
説明
より高い圧縮率はディスク容量を節約しますが、性能の犠牲も伴います。例えば、通常ZSTDはLZ4よりも多くの容量を節約しますが、ZSTDのメジャーコンパクション時間は長く、I/OクエリのRTも大きくなります。
個別のテーブルに対して特定の圧縮アルゴリズムを選択したい場合は、データテーブル作成時に圧縮アルゴリズムを指定できます。
テナントがテーブルを作成し、圧縮アルゴリズムを指定する構文については、CREATE TABLE(MySQLモード)およびCREATE TABLE(Oracleモード)を参照してください。
メジャーコンパクションのトリガー方法
OceanBaseデータベースは、自動トリガー、定期トリガー、適応型トリガー、手動トリガーのメジャーコンパクションをサポートしています。