すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:MetaScanを使用した列指向テーブルのクエリの高速化

最終更新日:Sep 27, 2024

AnalyticDB for PostgreSQLは、より高いデータ圧縮率とクエリパフォーマンスを提供するために、カラムストアモデルをサポートしています。 ただし、AnalyticDB for PostgreSQLが少量のデータしか返さないクエリを処理する場合、列全体のデータを読み取るか、Bツリーインデックスを作成する必要があります。 Bツリーインデックスにも潜在的な問題があります。 たとえば、インデックスが圧縮されていないため、深刻なデータ膨張が発生する場合があります。 大量のクエリ結果が返された場合、インデックスはシーケンシャルスキャンよりもコストが高くなるか、失敗する可能性があります。 これらの問題を解決するために、AnalyticDB for PostgreSQLは優れたフィルターパフォーマンスを提供し、最小限のストレージ容量を占有するMetaScan機能を提供します。

重要
  • MetaScan機能は、20200826以降のマイナーバージョンで作成された、予約済みストレージモードのAnalyticDB for PostgreSQLインスタンスでのみサポートされます。

  • この機能は、エラスティックストレージモードのAnalyticDB for PostgreSQLインスタンスではサポートされていません。

MetaScanの有効化

MetaScan機能は、次のパラメータによって制御されます。

  • RDS_ENABLE_CS_ENHANCEMENT

    メタデータを収集するかどうかを指定します。 ONに設定すると、メタデータ収集が有効になります。 OFFに設定されている場合、メタデータ収集は無効になります。 デフォルトでは、このパラメータはONに設定されています。 値がONの場合、列指向テーブルのデータが変更されると、システムはテーブルのメタデータを自動的に収集します。 このパラメーターはインスタンスレベルのパラメーターです。 値を変更する場合は、チケットを起票してください。

  • RDS_ENABLE_COLUMN_META_SCAN

    クエリのMetaScan機能を有効にするかどうかを指定します。 ONに設定されている場合、この機能はクエリに対して有効になります。 OFFに設定されている場合、この機能はクエリに対して無効になります。 デフォルトでは、このパラメータはOFFに設定されています。 このパラメーターはセッションレベルのパラメーターです。 次のSQL文を実行することで、その値を表示および変更できます。

    • MetaScanが有効かどうかを確認します。

      SHOW RDS_ENABLE_COLUMN_META_SCAN;
    • MetaScanを無効にします。

      SET RDS_ENABLE_COLUMN_META_SCAN = OFF;
    • MetaScanを有効にします。

      SET RDS_ENABLE_COLUMN_META_SCAN = ON;
重要

RDS_ENABLE_CS_ENHANCEMENTがOFFに設定されている場合、すべての列指向テーブルのメタデータ収集は無効になります。 RDS_ENABLE_CS_ENHANCEMENTがONに設定されているときにMetaScan機能を使用する場合は、次のステートメントを実行してテーブルのメタデータを再収集します。

ALTER TABLE table_name SET WITH (REORGANIZE=TRUE);

MetaScanがクエリに使用されているかどうかを確認する

次の図に示すように、EXPLAINステートメントを使用して、SELECTステートメントがMetaScanを使用しているかどうかを確認できます。結果に表示される「追加のみの列メタスキャン」ノードは、MetaScanノードです。 これは、MetaScan機能がクエリに使用されることを示します。

MetaScanでサポートされているデータ型と演算子

MetaScanは次のデータ型をサポートしています。

  • INT2、INT4、およびINT8

  • FLOAT4とFLOAT8

  • TIME、TIMETZ、TIMESTAMP、およびTIMESTAMPTZ

  • VARCHAR、テキスト、およびBPCHAR

  • 現金

MetaScanは次の演算子をサポートしています。

  • =, <, <=, >, および>=

  • AND論理演算子

既存のインスタンスを更新してMetaScanを使用する

既存のインスタンスに対してMetaScanを使用する場合は、次の操作を実行します。

  1. AnalyticDB for PostgreSQLインスタンスのマイナーバージョンを更新する

    AnalyticDB for PostgreSQLコンソールで、マイナーバージョンを更新するインスタンスを見つけ、IDをクリックします。 表示されるページの右上隅にある [マイナーバージョンのアップグレード] をクリックします。

  2. テーブルのメタデータを更新する

    マイナーバージョンを更新した後、テーブルのメタデータを最新バージョンに更新します。 RDS_ENABLE_CS_ENHANCEMENTがOFFに設定されている場合、チケットを起票します。 RDS_ENABLE_CS_ENHANCEMENTがONに設定されている場合、次の操作を実行します。

    1. 更新機能を管理者として作成します。

      CREATE OR REPLACE FUNCTION UPGRADE_AOCS_TABLE_META(tname TEXT) RETURNS BOOL AS $$
      DECLARE
          tcount INT := 0;
      BEGIN
          -- CHECK TABLE NAME
          EXECUTE 'SELECT COUNT(1) FROM PG_AOCSMETA WHERE RELID = ''' || tname || '''::REGCLASS' INTO tcount;
          IF tcount IS NOT NULL THEN
              IF tcount > 1 THEN
                  RAISE EXCEPTION 'found more than one table of name %', tname;
              ELSEIF tcount = 0 THEN
                  RAISE EXCEPTION 'not found target table in pg_aocsmeta, table name:%', tname;
              END IF;
          END IF;
      
          EXECUTE 'ALTER TABLE ' || tname || ' SET WITH(REORGANIZE=TRUE)';
          RETURN TRUE;
      END;
      $$  LANGUAGE PLPGSQL;
    2. 次のSQL文を実行して、管理者またはテーブル所有者としてテーブルのメタデータを更新します。

      SELECT UPGRADE_AOCS_TABLE_META(table_name);
    3. 次のSQL文を実行してメタデータのバージョンを確認します。

      SELECT version = 4 AS is_latest_version  FROM pg_appendonly WHERE relid = 'test'::REGCLASS

ソートキーを使用してMetaScanのパフォーマンスを向上させる

AnalyticDB for PostgreSQLのソートキー機能は、テーブル内のデータを特定の列でソートします。 MetaScanとソートキー機能の組み合わせにより、MetaScanのパフォーマンスが向上します。 列指向テーブルはデータをブロック単位で格納します。 MetaScanはメタデータを使用して、ブロックがクエリ条件を満たすかどうかを確認し、クエリ条件を満たさないブロックをスキップします。 これにより、I/O操作が減り、スキャンパフォーマンスが向上します。 フィルタリングされた列のデータがすべてのブロックに分散している場合、クエリで少量のデータが返される場合でも、すべてのブロックをスキャンする必要があります。 フィルタリングされた各列にソートキーを作成すると、列内の同じデータが複数の連続したブロックに結合されます。 このように、MetaScanは、クエリ条件を満たさないブロックを除外することにより、スキャンパフォーマンスを向上させることができます。

ソートキーの作成方法の詳細については、「ソートキーとラフセットインデックスを使用して列指向テーブルでのクエリを高速化する」をご参照ください。

制限事項

ORCAオプティマイザが使用されている場合、MetaScanは使用できません。 次のステートメントを実行して、ORCAオプティマイザーが使用されているかどうかを確認できます。

SHOW OPTIMIZER;

onが返された場合、ORCAオプティマイザーが使用されます。 ORCAオプティマイザーの詳細については、「クエリオプティマイザーの選択」をご参照ください。