この記事では、メジャーコンパクションの分類、状態、圧縮アルゴリズムについて説明します。
メジャーコンパクション(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データベースは、自動トリガー、スケジュールトリガー、適応型トリガー、手動トリガーのメジャーコンパクションをサポートしています。