このセクションでは、メジャーコンパクションの分類、状態、圧縮アルゴリズムについて説明します。
メジャーコンパクション(Major Compaction)は、動的データと静的データをマージする操作であり、時間がかかります。ダンプによって生成された増分データが一定量に達すると、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データベースは、自動トリガー、定期トリガー、適応型トリガー、手動トリガーのメジャーコンパクションをサポートしています。