リリース情報


8.3 第 5 章 システム・カタログ統計

8.3.1 分配統計の収集と使用

"Example of Impact on Equality Predicates"というサブセクションで、 述部 C <= 10 に関する記述があります。 エラーは -86% の状態です。 これは正しくありません。 このセクションの最後の文まで読む必要があります。

      一様なデータ分布を想定し、(1) の公式を使用すると、
   その述部を満たす行数は -87.5% の誤りで 1 と見積もられます。

"Example of Impact on Equality Predicates" というサブセクションで、 述部 C > 8.5 AND C <= 10 に関する記述があります。 線形補間が利用している r_2 値の見積もりは、以下のように 変更してある必要があります:

                    10 - 8.5   
   r_2 *= ---------- x (number of rows with value > 8.5 and <= 100.0)
          100 - 8.5
          10 - 8.5   
   r_2 *= ---------- x (10 - 7)
          100 - 8.5
          1.5   
   r_2 *= ---- x (3)
          91.5
   r_2 *= 0

また、この新規の例に続く段落は読むためには、以下のように変更してある必要があります。

      最終見積もりは r_1 + r_2 *= 7 で、
   エラーは -12.5% のみです。

8.3.2 カタログ統計の更新規則

「"列統計の更新規則"」というセクション内で、 最初のリスト項目にある最後の黒丸付きリスト項目を次の内容に置き換えます。

HIGH2KEY は、対応する列に異なる値が 4 つ以上含まれるときは必ず LOW2KEY よりも 大きい値にする必要があります。列に含まれる値のうち異なる値が 3 つ以下の場合、 HIGH2KEY は LOW2KEY と同じにすることができます。

8.3.3 サブエレメント統計

フィックスパック 1 では、サブエレメント統計を収集して使用するため、オプションが提供されます。 ブランクで区切られた一連のサブフィールドまたはサブエレメントの フォームに構造がある場合、データ内容に関する統計が列にあります。

たとえば、データベースに、行ごとに文書の記述がある表 DOCUMENTS が含まれ、 DOCUMENTS には KEYWORDS という列があり、この列には、テキスト検索用に 文書に関連するキーワードのリストが 含まれているものとします。 KEYWORDS の値としては次のものがある可能性があります。

   'database simulation analytical business intelligence'
   'simulation model fruitfly reproduction temperature'
   'forestry spruce soil erosion rainfall'
   'forest temperature soil precipitation fire'

この例では、各列の値は 5 個のサブエレメントから構成され、 それぞれのエレメントにブランクで区切られたワード (キーワード) が あります。

For queries that specify LIKE predicates on such columns using the % match_all character:

      SELECT .... FROM DOCUMENTS WHERE KEYWORDS LIKE '%simulation%'

次の用語のような列のサブエレメント構造に 関して、最適化プログラムが基本統計を認識することが有効な場合がよくあります。

SUB_COUNT
サブエレメントの平均数。

SUB_DELIM_LENGTH
サブエレメントを区切っている区切り文字の平均長。 区切り文字は、ここでは 1 つ以上の 連続するブランク文字です。

KEYWORDS 列の例では、SUB_COUNT は 5 で、SUB_DELIM_LENGTH は 1 と なります。これは、区切り文字が 1 個のブランク文字であるためです。

フィックスパック 1 では、システム管理者は、 DB2_LIKE_VARCHAR レジストリー変数の拡張により、 この統計の収集と使用の制御を行います。 このレジストリー変数は、次の書式の述部を DB2 UDB 最適化プログラム が処理する方法に影響します。

      COLUMN LIKE '%xxxxxx'

xxxxxx には任意のストリングが入ります。つまり、この場合は、LIKE 述部の検索値は % 文字で始まります。 (% 文字で終了しないこともあります。) 下記の "wildcard LIKE predicates" として述べられます。 すべての述部に対して、最適化プログラムが 述部に一致する行の数を見積もる必要があります。 ワイルドカード LIKE 述部では、最適化プログラムは 一致する COLUMN に連結する一連のエレメントの構造があると推定し、 前後の % 文字を含まないストリングの長さに 基づいたエレメントの長さを見積もり ます。 新規構文は次の通りです。

      db2set  DB2_LIKE_VARCHAR=[Y|N|S|num1][,Y|N|num2]
 
      ここで、
   - 最初の用語 (コンマの前まで) は、次の意味を持ちますが、
     正の値のサブエレメント統計のない列に限ります。
      S                 アルゴリズムを DB2 バージョン 2 で使用されていたように使用する。
      N                 固定長サブエレメント・アルゴリズムを使用する。
      Y  (デフォルト)   アルゴリズム・パラメーター用のデフォルト値を指定して
                        可変長サブエレメント・アルゴリズムを使用する。
      num1              可変長サブエレメント・アルゴリズムを使用し、
                        num1 をアルゴリズム・パラメーターとして使用する。
   - 2 番目の用語 (コンマの次) は、次の意味を持ちます。
      N  (デフォルト)   サブエレメント統計を収集あるいは使用しない。
      Y                 サブエレメント統計を収集する。
                        正の値のサブエレメント統計を持つ列の場合に、
                        アルゴリズム・パラメーターのデフォルト値と
                        一緒に、この統計を使用する
                        可変長サブエレメント・アルゴリズムを使用する。
      num2              サブエレメント統計を収集する。
                        正の値のサブエレメント統計を持つ列の場合に、
                        アルゴリズム・パラメーターとしての num2 と
                        一緒に、この統計を使用する
                        可変長サブエレメント・アルゴリズムを使用する。

DB2_LIKE_VARCHAR が、最初の用語にのみ含まれていると、 サブエレメント統計は収集されず、前に収集されていた 統計は無視されます。 指定された値は、以前と同じように、ワイルドカード LIKE 述部 の選択肢の計算方法に影響を与えます。次の例で説明します。

DB2_LIKE_VARCHAR の値に 2 つの用語が含まれ、2 番目が Y または 浮動小数点定数であると、CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC の 1 バイト文字セット・ ストリング列にあるサブエレメント統計は、RUNSTATS 操作中に収集され、ワイルドカード LIKE 述部を含む照会のコンパイル中に 使用されます。 最適化プログラムがサブエレメント・モデルを想定するアルゴリズムを使用して SUB_COUNT と SUB_DELIM_LENGTH 統計と、アルゴリズム・パラメーターも 使用して述部長さお選択肢を計算します。 アルゴリズム・パラメーターは、次の例のように、推測されるアルゴリズムが 指定されるのと同じように指定されます。

最適化プログラムが、サブエレメント統計が照会に含まれる 列に収集されていないことをコンパイル中に検出した場合、 最適化プログラムは「推論上の」サブエレメント・アルゴリズムを使用します。 つまり、DB2_LIKE_VARCHAR の最初の用語のみが指定されている時に使用されるアルゴリズムです。 こうして、サブエレメント統計が最適化プログラムで使用されるには、 DB2_LIKE_VARCHAR の 2 番目の用語が RUNSTATS およびコンパイルの両方で設定されている必要があります。

サブエレメント統計の値は、 SYSIBM.SYSCOLUMNS を照会して表示されます。 例:

   select substr(NAME,1,16), SUB_COUNT, SUB_DELIM_LENGTH
      from sysibm.syscolumns where tbname = 'DOCUMENTS'

SUB_COUNT と SUB_DELIM_LENGTH 列が SYSSTAT.COLUMNS 統計表示にはないため、更新できません。

注:
このオプションが使用されると、RUNSTATS には時間がかかる可能性があります。 たとえば、DETAILED および DISTRIBUTION オプションを使用していないと、RUNSTATS は 5 文字の列のある表では 15 から 40% 長く時間がかかる可能性があります。 DETAILED または DISTRIBUTION オプションを指定していると、オーバーヘッドの絶対量が 同じでも、パーセントのオーバーヘッドは少なくなります。 このオプションの使用を考える場合、 照会パフォーマンスの改善に対して、このオーバーヘッドを評価する必要があります。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]