Data Virtualizationではテーブル統計は収集されない

最終更新: 2025年3月17日
Data Virtualizationではテーブル統計は収集されない

仮想表を作成するときに、一部の表の統計が正しく収集されません。

症状

仮想テーブル作成時に、表統計が収集されないことがあります。 表の統計が欠落すると、照会のパフォーマンスに重大な影響が及ぶ可能性があります。

問題の解決

この問題を解決するには、次のステップを実行します。
  1. 次のコマンドを実行して、表統計が欠落しているかどうかを判別します。
    select cast(TABNAME as varchar(25)),  TYPE, COLCOUNT,  STATS_TIME from SYSCAT.TABLES 
               where TABSCHEMA='<schema>'   
                       and CARD = -1;

    <schema> を仮想テーブルのスキーマ名に置き換えます。 このコマンドは、CARD が -1 であるスキーマ内のすべてのオブジェクトをリストします。これは、統計が収集されていないことを示します。

  2. カーディナリティーが -1のテーブルでは、以下のコマンドを実行し、 <schema><table_name> を仮想化オブジェクトの名前に置き換えてください。
    call SYSPROC.NNSTAT(NULL'<schema>',
              '<table_name>',
              '<list_of_columns_commonly_used_in_predicates>',
              '',
              2,
              '/tmp/<table_name>.log',
              ?,
              1);

    この呼び出しは、<list_of_columns_commonly_used_in_predicates>内の指定された列について、表レベルの統計と列レベルの統計を収集します。 表に列が少ない場合は、列リスト引数として NULL を渡すことによって、表内のすべての列の統計を収集できます。 この呼び出しでは、データ・ベースの統計収集方式を使用します。これは、実行にコストがかかる場合があります。 統計は、ピーク時以外の時間に収集できます。 詳細については、 SYSPROC.NNSTAT ストアード・プロシージャーを参照してください。

  3. ステップ 1 を繰り返して、すべての表統計が収集されるようにします。

詳細については、 Data Virtualizationにおけるクエリ・パフォーマンスの向上を参照してください。