大量のデータをオフラインでインポートした後、または多数の DELETE または UPDATE 操作を実行した後は、データファイルの断片化が原因でデータの読み取りおよび書き込みパフォーマンスが低下する可能性があります。 この場合、圧縮操作を実行する必要があります。 圧縮操作では、複数のデータファイルを大きなデータファイルにマージして、データの書き込みと読み取りの効率を向上させます。 圧縮では、データストレージ構造が再編成されます。 このトピックでは、Hologres で圧縮操作を実行する方法について説明します。
背景情報
Hologres データ書き込みモデルのデータ構造は、ログ構造化マージツリー (LSM ツリー) に似ています。データは追加専用モードでストレージに書き込まれます。このデータ構造により、ランダム書き込みを順次書き込みに変更できます。これは書き込み指向のデータ構造であり、書き込みスループットを効果的に向上させることができます。書き込まれたデータファイルをより大きなデータファイルにマージするには、コンパクションが必要です。
Hologres は、2 種類のコンパクション操作をサポートしています。
自動コンパクション
Hologres の自動コンパクションは階層型です。最大 5 つのレベルが許可されます。1 つのレベルに 5 つを超えるファイルが存在する場合、コンパクションがトリガーされます。コンパクション後に生成された大きなファイルは、次のレベルに配置されます。たとえば、レベル 0 のファイル数が 5 に達すると、コンパクションがトリガーされて 5 つのファイルがマージされます。デフォルトでは、マージされたファイルの最大サイズは 64 MB です。マージされたファイルのサイズが 64 MB を超える場合、コンパクション後に複数のファイルが生成されます。マージされたファイルは、次の図に示すように、レベル 1 に配置されます。

フルコンパクション
自動コンパクションは特定のレベル内でのみ有効であり、レベル間でファイルをマージしません。フルコンパクションは、すべてのレベルのすべてのファイルをマージします。デフォルトでは、マージされたファイルの最大サイズは 64 MB です。マージされたファイルは最後のレベルに配置されます。
制限事項
Hologres V2.1 以後でのみ、フルコンパクションを手動でトリガーできます。Hologres インスタンスのバージョンが V2.1 より前の場合は、Hologres コンソールで Hologres インスタンスを手動でアップグレードするか、Hologres DingTalk グループに参加してインスタンスのアップグレードを申請してください。Hologres インスタンスを手動でアップグレードする方法の詳細については、インスタンスのアップグレード をご参照ください。Hologres DingTalk グループへの参加方法の詳細については、Hologres のオンラインサポートを受ける をご参照ください。
列指向テーブルと行 - 列ハイブリッドテーブルに対してのみ、フルコンパクションをトリガーできます。
行 - 列ハイブリッドテーブルでフルコンパクションを実行する場合、フルコンパクションは列指向ストレージモードで保存されているデータに対してのみ実行されます。
使用上の注意
シナリオ
小さなファイルをマージしてクエリ効率を向上させるために、次のシナリオでフルコンパクションをトリガーできます。
大量のデータがオフラインモードでインポートされます。
DELETEまたはUPDATE操作が何度も実行されます。
説明フルコンパクションは、大量の I/O リソースと CPU リソースを消費します。書き込み操作のオフピーク時にフルコンパクションを実行することをお勧めします。ほとんどの場合、フルコンパクションは 10 分以上続きます。
構文
SELECT hologres.hg_full_compact_table( '<schema_name.table_name>' [,'max_file_size_mb=<value>'] );パラメーター
パラメーター
説明
必須
デフォルト値
スキーマ名.テーブル名
フルコンパクションを実行するテーブルの名前。
はい
デフォルト値なし
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' );
サーバーレスコンピューティングを使用して圧縮を実行する
サーバーレスコンピューティング のデータインポート後の圧縮のサポートは次のとおりです。
V3.1.11 より前のバージョンでは、サーバーレスコンピューティングを使用してデータインポートタスクを実行する場合、バックグラウンドの非同期圧縮タスクは引き続き現在のインスタンスのローカルリソースを使用して実行されます。
V3.1.11 以降では、サーバーレスコンピューティングを使用してデータインポートタスクを実行する場合、現在のインスタンスのローカルリソースを消費することなく、サーバーレスリソースを使用して新しくインポートされたデータファイルに対して同期圧縮を実行できます。 この機能により、データのインポート時間はわずかに長くなりますが、インスタンスの安定性が大幅に向上します。 以下の点に注意してください。
この機能を使用するには、GUC パラメーター
hg_serverless_computing_run_compaction_before_commit_bulk_loadを有効にする必要があります。同期圧縮は、新しくインポートされたデータファイルに対してのみサポートされています。 テーブルに TTL の有効期限切れのためにクリーンアップが必要な古いファイルが含まれている場合、圧縮は引き続き現在のインスタンスのローカルリソースを使用して非同期に実行されます。
同期圧縮は、ホットストレージ (標準ストレージ) へのデータのインポートのみをサポートし、コールドストレージ (低頻度アクセスストレージ) はサポートしていません。