大量のオフラインデータをインポートした後、または多数の delete や update 操作を実行した後、データファイルの断片化により、読み取り/書き込みパフォーマンスが低下する可能性があります。このような場合、圧縮操作を実行できます。圧縮は、複数のデータファイルをより大きなファイルにマージし、データストレージ構造を再編成して、読み取り/書き込み効率を向上させます。このトピックでは、Hologres で圧縮を実行する方法について説明します。
背景情報
Hologres は、データ書き込みに LSM-Tree に似たデータ構造を使用しています。すべてのデータは、追記専用方式でストレージに書き込まれます。この構造は、ランダム書き込みをシーケンシャル書き込みに変換し、書き込みスループットを最適化します。データファイルは、圧縮によってより大きなファイルにマージする必要があります。
Hologres は、次の 2 種類の圧縮をサポートしています。
自動圧縮
Hologres は、最大 5 レベルの階層型自動圧縮を使用しています。あるレベルに 5 つを超えるファイルが含まれている場合、圧縮は自動的にトリガーされます。結果のファイルは次のレベルに移動します。たとえば、レベル 0 が 5 つのファイルに達すると、それらは自動的にマージされます。マージされたファイルのデフォルトの最大サイズは 64 MB です。64 MB を超える場合、複数のファイルが作成され、レベル 1 に移動します。以下に示します。

フル圧縮
自動圧縮は、同じレベル内のファイルのみをマージし、レベルをまたいでマージすることはありません。フル圧縮は、すべてのレベルのすべてのファイルを新しいファイルにマージします。各ファイルのデフォルトの最大サイズは 64 MB で、最終レベルに配置されます。
制限事項
Hologres V2.1 以降のみが、手動でのフル圧縮のトリガーをサポートしています。ご利用のインスタンスが以前のバージョンを実行している場合は、インスタンスをスペックアップする か、Hologres ユーザーグループに参加してスペックアップをリクエストできます。詳細については、「オンラインサポートをさらに利用するにはどうすればよいですか?」をご参照ください。
列指向テーブルとハイブリッド行指向・列指向テーブルのみが、手動でのフル圧縮をサポートしています。
ハイブリッド行指向・列指向テーブルの場合、フル圧縮は列のストア部分にのみ適用されます。
使用方法
シナリオ:
以下のシナリオで手動でフル圧縮をトリガーして、小さなファイルをマージし、クエリパフォーマンスを向上させることができます。
大量のオフラインデータをインポートした後。
多数の
deleteまたはupdate操作を実行した後。
説明フル圧縮は、I/O および CPU リソースを大量に消費します。書き込みが少ない期間に実行できます。通常、実行には 10 分以上かかります。
構文:
SELECT hologres.hg_full_compact_table( '<schema_name.table_name>' [,'max_file_size_mb=<value>'] );説明:
パラメーター名
説明
必須
デフォルト
schema_name.table_name
圧縮するテーブルの名前。
はい
なし
max_file_size_mb
(必要がない限り、この値を変更しないでください。) フル圧縮後に生成されるファイルの
MB単位の最大サイズ。値は正の整数である必要があります。この値を低く設定しすぎると、ファイルが多すぎることになり、クエリの速度が低下します。
いいえ
64
例:
テーブル
public.lineitemでフル圧縮を実行できます。SELECT hologres.hg_full_compact_table( 'public.lineitem');テーブル
public.lineitemでフル圧縮を実行し、最大出力ファイルサイズを 256 MB に設定できます。SELECT hologres.hg_full_compact_table( 'public.lineitem', 'max_file_size_mb=256' );
Serverless Computing を使用した圧縮の実行
詳細については、「Serverless Computing を使用した圧縮タスクの実行」をご参照ください。