※ 本記事は、Gregg Christmanによる”New Automatic Storage Compression Capability with Oracle Database 23ai“を翻訳したものです。

2024年8月15日


組織は、スペースの節約と高速な分析パフォーマンスのためにハイブリッド列圧縮(HCC)を使用しています。ただし、ハイブリッド列圧縮の圧縮および解凍のオーバーヘッドは、直接ロード・パフォーマンスに影響する可能性があります。ダイレクト・ロード・パフォーマンスを向上させるために、自動ストレージ圧縮を使用すると、Oracle Databaseは最初にロード・データを非圧縮形式に誘導し、バックグラウンドで行をハイブリッド列圧縮形式に徐々に移動できます。

自動ストレージ圧縮が有効な場合、ハイブリッド列圧縮オブジェクトへのダイレクト・ロードでは、圧縮されていない形式を使用してロードを高速化します。データベースは、新しくロードされたデータに変更がなくなるまで、ユーザーが指定したDML非アクティブしきい値まで待機します。その時点で、非圧縮ダイレクト・ロードのデータは、バックグラウンドの自動圧縮AutoTaskを使用して徐々にHCC圧縮されます。

プロセスの概要は次のようになります:

                       HCC表に非圧縮データ直接ロード
                                                           |
      ユーザー指定の「DML非アクティブしきい値」に達するまでデータベース待機
                                                           |
  しきい値に達すると、データベースは自動的にデータを移動および圧縮
                                                           |
                 移動が完了すると、表は完全にHCC圧縮

これを既存の手動ILMプロセスと比較:

                          表への非圧縮データ直接ロード
                                                           |
                               HCC圧縮に使用可能な表
                                                           |
  表をHCC圧縮できるタイミングを指定するILMポリシーをユーザーが手動で作成
                                                           |
  ポリシー条件が満たされたときにセグメント全体を再構築して圧縮を有効に
                                                           |
 圧縮によって解放された領域がすぐに再利用されない(領域を再利用するには新しい挿入が必要)

使用の前提条件

表は、次のプロパティを持つ表領域内にある必要があります:

PDBで、HEAT_MAP=ON を設定

表は、HCCを指定して、SEGMENT SPACE MANAGEMENT AUTOおよびAUTOALLOCATEを使用する表領域に存在する必要があります。

自動ストレージ圧縮の使用: 使用例

自動ストレージ圧縮を有効にします。PDBレベルでDBMS_ILM_ADMIN.ENABLE_AUTO_OPTIMIZEを設定します。

exec dbms_ilm_admin.enable_auto_optimize;

HCC圧縮を使用しない表を作成します。

この例では、MYTABという表が例として使用されます。表は圧縮なしで作成されました。

表が圧縮されていないことを確認します。

この例では、表がまだ圧縮されていないことをデモンストレーションします..

select unique dbms_compression.get_compression_type(‘SCOTT’, ‘MYTAB’, rowid) from scott.mytab;

DBMS_COMPRESSION.GET_COMPRESSION_TYPE(‘SCOTT’,’MYTAB’,ROWID)                   
—————————————————————————————————                                                                                                                                                            
                                                                                                                                   1   

ノート: dbms_compression.get_compression_typeは、圧縮タイプの決定に使用できる定数を使用します。「1」は、表が現在圧縮されていないことを示します。詳細は、『Oracle PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ダイレクト・パスを使用してHCC圧縮およびロード・データを追加するALTER表。

この例では、表に追加されたHCC問合せLOW圧縮と、ダイレクト・パス・ロードの実行に使用される /*+ append */ を挿入します。

この例では、自動ストレージ圧縮の前に表の非圧縮サイズを決定します。

select bytes/1024/1024 MB from dba_segments where owner = ‘SCOTT’ and segment_name = ‘MYTAB’;

MB                                                                      
——–                                                                 
5.625 

5.625は、圧縮されていない表サイズ(MB)を示します。

「Auto compression data moved」システム統計をチェックして、自動圧縮の増分進行状況をモニターします。これは、データの移動および圧縮に伴って時間の経過とともに増加します。

1時間のデフォルトの非アクティブ間隔では、圧縮が開始される前にセグメント・サイズを観察できます。

「Auto compression data moved」の値は「0」を示します。これは、自動圧縮が開始されていないことを示しています。

select name, value from v$sysstat where name like ‘Auto compression data%’;

NAME                                                                                     VALUE
———————————————————————- ——–
Auto compression data movement success                   0
Auto compression data movement failure                     0
Auto compression data moved                                        0

v$sysstatには、自動圧縮を使用しているすべての表の値の合計が表示されます。複数の表を圧縮する場合、「Auto compression data moved」の値には、それらの表に対して移動されたデータも含まれます。また、切り上げが原因で、この値が長期間にわたって圧縮されていないデータの実際のサイズと正確に一致しない場合があります。

データの移動および圧縮が開始されると、「Auto compression data moved」の値が増加します。

select name, value from v$sysstat where name like ‘Auto compression data%’;

NAME                                                                                     VALUE
———————————————————————- ——–
Auto compression data movement success                   1
Auto compression data movement failure                     0
Auto compression data moved                                        6

この例では、「Auto compression data moved」の値(MB)は「6」を示し、これは、約6Mバイトの非圧縮データが圧縮に移動されたことを意味します。自動圧縮が開始されると、データの非圧縮サイズは5.625MBでした。

この例では、圧縮前のセグメント・サイズ、および圧縮中に移動されたデータの量が完全一致でないことが示されています。前述のとおり、v$sysstatは、自動圧縮を使用してすべての表の値の合計を示します。複数の表をロードする場合、「Auto compression data moved」の値には、それらの表のデータも含まれます。

また、切り上げが原因で、「Auto compression data moved」の値が、時間の経過とともに圧縮されていないデータの実際のサイズと正確に一致しない場合があります。値は、データの圧縮されていないサイズと似ています。

表の圧縮レベルと圧縮サイズを確認します。

select unique dbms_compression.get_compression_type(‘SCOTT’, ‘MYTAB’, rowid) from scott.mytab;

DBMS_COMPRESSION.GET_COMPRESSION_TYPE(‘SCOTT’,’MYTAB’,ROWID)                   
—————————————————————————————————                                                                                                                                                                       
                                                                                                                                    8   

ノート: dbms_compression.get_compression_typeは、圧縮タイプの決定に使用できる定数を使用します。「8」は、表がHCC問合せ低圧縮を使用して現在圧縮されていることを示します。詳細は、『Oracle PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

select bytes/1024/1024 MB from dba_segments where owner = ‘SCOTT’ and segment_name = ‘MYTAB’;

MB                                                                     
——–                                                                     
.3125

.3135は、HCC Query Lowへの自動圧縮後の表のサイズを示します。

ノート: 「Auto compression data movement failure」は、失敗したデータ移動(圧縮)試行の数です。1) 圧縮中にデータベースでエラーが発生した場合、または 2) さらに処理するために現在のバックグラウンド・タスクでデータベースの時間が不足した場合、この値が増分されます。この場合、圧縮は次のバックグラウンド・タスクで再開されます。

ノート: 「Auto compression data movement success」は、データ移動を正常に試行した回数です。自動圧縮では、単一のダイレクト・ロードのデータ移動作業が複数のバッチに分割される可能性があるため、セグメント数またはダイレクト・ロードと正確に一致しない場合があります。

まとめ

自動ストレージ圧縮は、スペースの節約や高速分析パフォーマンスなど、ハイブリッド・コラム圧縮の利点を維持しながら、ダイレクト・ロード・パフォーマンスを向上させます。

自動ストレージ圧縮の詳細および使用方法の詳細は、Oracleドキュメントを参照してください[こちら]。