※ 本記事は、Gregg Christmanによる”New Advanced Index Compression Capability with Oracle Database 23c“を翻訳したものです。
2024年4月23日
Advanced Compressionの機能であるアドバンスト索引圧縮により、索引の圧縮が簡略化されます。アドバンスト索引圧縮は、企業クラスで最高レベルのデータ圧縮を可能にし、I/Oの削減によるストレージの節約と問合せのパフォーマンスの向上を企業に提供します。アドバンスト索引圧縮は、複数の圧縮レベル(LOWおよびHIGH)に対して有効なテクノロジです。
この説明では、索引圧縮のLOWレベルに焦点を当てます。
アドバンスト索引圧縮LOWは、圧縮索引の接頭辞(キー)の列数を計算します。すべての索引リーフ・ブロックに静的接頭辞数を使用するのではなく、索引リーフ・ブロックごとに最適な接頭辞数を計算することを目的としています。接頭辞列の正確かつ最適な数は、ブロック単位で自動的に計算されるため、可能なかぎり最適な圧縮率が生成されます。異なる接頭辞列数で異なる索引リーフ・ブロックを圧縮することも、繰返し接頭辞がない場合はまったく圧縮しないこともできます。
Oracle Database 23cでのアドバンスト索引圧縮LOWの新機能
索引構成表(IOT)のアドバンスト索引圧縮LOW
索引構成表は、Bツリー索引構造の形式で格納されている表です。一方、ヒープ構成表では、収まる場所に行が挿入されます。
索引構成表では、行は表の主キーで定義された索引に格納されます。Bツリーの各索引エントリには、非キー列の値も格納されます。したがって、索引はデータであり、データは索引です。アプリケーションは、ヒープ構成表と同様に、SQL文を使用して索引構成表を操作します。
IOTが人気があるのは、ヒープ表と索引という2つの構造で主キー列を重複させることなく、主キーによる高速ランダム・アクセスを提供するからです。索引構成表をアドバンスト索引圧縮(LOW)で圧縮できるようになりました。アドバンスト索引圧縮LOWは、索引のCOMPRESSオプションを指定することで簡単に有効化できます。
次に例を示します:
create table tiot (c1 number, c2 number, c3 number, c4 number, primary key (c1, c2)) organization index compress advanced low;
以前のリリースでは、IOTは索引圧縮に対してOracleの接頭辞キー圧縮のみをサポートしていました。接頭辞キー圧縮の使用にはユーザー分析が必要で、負の圧縮の(圧縮のオーバーヘッドが圧縮のメリットを上回る)可能性がありました。
この新機能により、アドバンスト索引圧縮(LOW)がIOTに拡張され、ユーザーは負の圧縮やユーザー分析を必要とせずに、すべてのIOTに対して圧縮を有効にできます。
これはあなたの組織にとって意味があるのでしょうか?
IOTストレージの平均的な削減幅は、2倍から5倍です。これは、例として2倍とすると、圧縮されていないデータで消費される領域の量が、圧縮されたデータの2倍になることを意味します。IOTストレージ要件を削減することで、IT管理者は新しいストレージを購入する必要性を軽減し、場合によっては不要にできます。
アドバンスト索引圧縮LOWで圧縮されたブロックを解凍するコストは、ほとんどのシナリオで、データベースがスキャンするブロックが少なくなることになり、補われます。そのため、通常、IOT圧縮では問合せのパフォーマンスは低下しません(大幅な低下はありません)。
空き圧縮アドバイザを使用して、索引の圧縮状況を確認
PL/SQLパッケージ「DBMS_COMPRESSION」 (通常は圧縮アドバイザと呼ばれます)は、Oracle Database Enterprise Editionに含まれており、データベース環境内で圧縮関連情報を収集します。
圧縮アドバイザの実行結果は、圧縮アドバイザの対象となった特定の表またはパーティションの圧縮率の推定値です。圧縮アドバイザは、圧縮関連の使用状況を決定するに必要なストレージ削減情報を組織に提供します。
