システム・カタログの統計情報 2 システム・カタログの統計情報 2-1 統計情報の収集 2-3 詳細な索引統計情報
by user
Comments
Transcript
システム・カタログの統計情報 2 システム・カタログの統計情報 2-1 統計情報の収集 2-3 詳細な索引統計情報
DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 システム・カタログの統計情報 <第1.00版>2001年1月 お断り:当資料は、DB2 UDB V7.1(AIX,NT,OS2) をベースに作成されています。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 2 システム・カタログの統計情報 2-1 統計情報の収集 2-3 詳細な索引統計情報 統計情報の収集 RUNSTATSユーティリティー 更新されるカタログ表 詳細な索引統計情報の使用 PAGE_FETCH_PAIRS統計収集の例 2-4 ユーザー更新が可能なカタログ統計 2-2 非一様分布統計情報 非一様分布統計情報の使用 頻出値統計情報の取得例 頻出値統計情報を使用した行数の見積もり例 行数の見積もり計算(頻度の統計情報がある場合) 行数の見積もり計算(頻度の統計情報がない場合) 行数の見積もり計算結果 変位値統計情報の取得例 変位値統計情報を使用した行数の見積もり例 行数の見積もり計算(変位値の統計情報がある場合) 行数の見積もり計算(変位値の統計情報がない場合) 行数の見積もり計算結果 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 109-110 ) 統計情報の更新 "TABLE1" の表統計を更新する例 ユーザーが更新可能な統計情報 実動データベースのモデル化 (参考) db2look 出力例 DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-1 統計情報の収集 データ表(table1) SQL照会 SELECT FROM WHERE AND c1 c2 C1, C2 table1 C1= 'NEW YORK' C2 <= 10 アクセス・プラン 統計情報の収集 RUNSTATS LOAD (STATISTIC YES) SQL UPDATE ステートメント オプティマイザー システム・カタログ表 統計情報 表統計 列統計 列分布統計 索引統計 ユーザー定義関数(UDF) 最適なアクセス・プラン (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 統計情報の収集 SQL照会を最適化する場合、最適化プログラムはデータベースの内容をモデル化し、最適なアクセス・プランを選択します。このモ デルの鍵となる要素は表データの統計情報であり、それらはシステム・カタログ表に保管されます。収集される統計は、表、索引、 列、ユーザー定義関数(UDF) に関する情報です。 システム・カタログ表の統計情報は以下の場合に一部、または全部が更新されます。 RUNSTATS ユーティリティーを使用した場合 統計収集オプションを指定して(STATISTICS YES) LOAD を使用した場合 (LOAD が REPLACE モードの場合のみ) システム・カタログ視点に対する SQL UPDATE ステートメントをコーディングした場合 SYSCAT カタログと SYSSTAT カタログには以下の情報が保管されます。 表統計に関する情報 列統計に関する情報 列分布統計に関する情報 索引統計に関する情報 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 111-112 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-1 統計情報の収集 RUNSTATSユーティリティー >>─ RUNSTATS ON TABLE ─ table-name ─────────────────────> >──┬┬────────────────────────────────┬┬─> │└ WITH DISTRIBUTION ┬────────────────────┬┘│ │ └ AND ┬─────┬┬ INDEXES ALL ──┬┘ │ │ │ └ DETAILED ┘└INDEX index-name ┘ └┬───────────────────────────┬─────┘ └─┬ AND ┬─┬─────┬─┬ INDEXES ALL ────┬┘ └ FOR ┘ └ DETAILED ┘ └ INDEX index-name ─┘ >──┬─────────────┬──────────────────────>< │ ┌ CHANGE ──┐│ └ SHRLEVEL ┴ REFERENCE ┴┘ 統計情報を可能な限り多く収集する例 RUNSTATS ON TABLE table-name WITH DISTRIBUTION AND DETAILED INDEXES ALL (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: RUNSTATSユーティリティー RUNSTATS ユーティリティーを使用するとシステム・カタログ表の統計情報を更新することができます。この統計情報はデータベー ス・マネージャーが照会処理を最適化するときに用いられます。 RUNSTATS ユーティリティーが収集する統計は、表に入っているデータ、索引に入っているデータ、または表と索引の両方に入っ ているデータに関する統計です。 以下の状況で最適なアクセス・プランを選択するためには、RUNSTATSユーティリティーを使用して統計情報を正確な値にしておく 必要があります。 表にデータがロードされており、索引が作成済みの場合。 表がREORGユーティリティーによって再編成されている場合。 表データと索引データの10∼20パーセント程度が影響を受けるようなデータの更新、削除、挿入が行われた場合。 パフォーマンスが重要なアプリケーション・プログラムをバインド/リバインドする前。 以前の統計と比較したい場合。定期的に統計情報を収集するとパフォーマンス上の問題を早期発見できることがあります。 REDISTRIBUTE NODEGROUP ユーティリティーを使用している場合。 RUNSTATS ユーティリティーでは収集する統計のレベルを選択することができます。表の統計を収集する場合は、基本レベルの 統計に加えて、表内の列の値に関する分布統計も収集することができます。索引の統計を収集する場合は、基本レベルの統計に 加えて、詳細な統計を収集することもできます。この詳細な統計は最適化プログラムが索引走査の入出力コストを正確に見積もる 際に使用されます。 表の分布統計と詳細な索引統計を収集する例として、次の文を挙げます。これは、統計情報を可能な限り多く収集する例です。 RUNSTATS ON TABLE table-name WITH DISTRIBUTION AND DETAILED INDEXES ALL WITH DISTRIBUTION 文節および DETAILED 文節で収集される統計情報に関しては2-2 および 2-3 で詳しく述べます。 LONGまたはラージ・オブジェクト(LOB)列の場合は、統計は収集されません。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 113-114 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-1 統計情報の収集 更新されるカタログ表 表統計 (SYSCAT.TABLES / SYSSTAT.TABLES) 統計 FPAGES NPAGES OVERFLOW CARD 説明 表が使用しているページ数 行のデータが入っているページ数 オーバーフローしている行の数 表内の行の数(カーディナリティー) RUNSTATSによる更新 表 索引 ○ ○ ○ ○ ○ × ○ ○ 索引統計 (SYSCAT.INDEXES / SYSSTAT.INDEXES) 統計 NLEAF NLEVELS CLUSTERRATIO CLUSTERFACTO R DENSITY FIRSTKEYCARD FIRST2KEYCARD FIRST3KEYCARD FIRST4KEYCARD FU LLKEYCARD PAGE_FETCH _PAIRS 説明 索 引 葉 ページの 数 索 引 レ ベル の 数 表 データの クラス ター化 の 程 度 クラス ター化 の 詳 細 の 程 度 索 引 の 対 象 とな るページ範 囲 にあるページ数 に対 する SEQ U EN TIAL_PAGESの 比 率 (% ) 索引の最初の列の個別値の数 索 引 の 最 初 の 2つの 列 の 個 別 値 の 数 索 引 の 最 初 の 3つの 列 の 個 別 値 の 数 索 引 の 最 初 の 4つの 列 の 個 別 値 の 数 索引の全ての列の個別値の数 異 な るバ ッファー・サ イズで の 取 り出 し見 積 もり RU NSTATSによ る更 新 表 索引 × ○ × ○ × ○ × ○ × ○ × × × × × × ○ ○ ○ ○ ○ ○ (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 更新されるカタログ表 RUNSTATS ユーティリティーによって更新されるカタログ統計には次のものがあります。 表統計 (SYSCAT.TABLES / SYSSTAT.TABLES) ……… FPAGES、NPAGES、OVERFLOW、CARD 索引統計 (SYSCAT.INDEXES / SYSSTAT.INDEXES) …… NLEAF、NLEVELS、CLUSTERRATIO、CLUSTERFACTOR、 DENSITY、FIRSTKEYCARD、 FIRST2KEYCARD,FIRST3KEYCARD、 FIRST4KEYCARD、FULLKEYCARD、PAGE_FETCH_PAIRS、 SEQUENTIAL_PAGES 列統計 (SYSCAT.COLUMNS / SYSSTAT.COLUMNS) …… COLCARD、AVGCOLLEN、HIGH2KEY、LOW2KEY、NUMNULLS 列分布統計 (SYSCAT.COLDIST / SYSSTAT.COLDIST) … DISTCOUNT、TYPE、SEQNO、COLVALUE、VALCOUNT 表統計について 表統計に関する情報は SYSCAT.TABLES または SYSSTAT.TABLES カタログ視点を通じて参照・更新することができます。 区分データベースの場合、各統計値はそのデータベース区画での値にデータベース区画の数を乗じて推定値を計算します。 索引統計について 索引統計に関する情報は SYSCAT.INDEXES または SYSSTAT.INDEXES カタログ視点を通じて参照・更新することができま す。 詳細索引統計は、RUNSTATS でDETAILED 文節を指定するか、またはRUNSTATS API を呼び出すときに statsopt パラメー タにA、Y、X のいずれかを指定することによって収集することができます。 表のサイズが相当大きいものでない限り、DETAILED 文節を指定しても CLUSTERFACTOR および PAGE_FETCH_PAIRS 統 計は収集されません。具体的には、表のページ数が約25ページより大きいと CLUSTERFACTOR および PAGE_FETCH_PAIRS 統計が収集されることになります。この場合、CLUSTERRATIOは収集されません。(値は-1になりま す。) 表が小さい場合には、RUNSTATS ユーティリティーはCLUSTERRATIO のみを収集し、CLUSTERFACTOR および PAGE_FETCH_PAIRS は収集されません。 DETAILED 文節を指定しない場合には、CLUSTERRATIO 統計のみが収集されます。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 115-116 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-1 統計情報の収集 更新されるカタログ表 (続き) 列統計 (SYSCAT.COLUMNS / SYSSTAT.COLUMNS) 統計 COLCARD AVGCOLLEN HIGH2KEY LOW2KEY NUMNULLS 説明 列カーディナリティー 列の平均長 列内で2番目に高い値 列内で2番目に低い値 列内のNULLの数 RUNSTATSによる更新 表 索引 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 列分布統計 (SYSCAT.COLDIST / SYSSTAT.COLDIST) 統計 DISTCOUNT TYPE SEQNO COLVALUE VALCOUNT 説明 TYPEがQの場合はCOLVALUE統計以下の個別値 の数 行の統計が頻出値統計または変位値統計かの標 識(F:頻出値統計、Q:変位値統計) TYPEがFの場合はN番目に頻度が高い値、TYPE がQの場合にはN番目の変位値 頻出値統計または変位値統計を収集する際のデー タ値 TYPEがFの場合は列内でデータ値(COLVALUE)が 発生する頻度、TYPEがQの場合はデータ値以下の 値を持つ行の数 RUNSTATSによる更新 表 索引 分布 × 分布 × 分布 × 分布 × 分布 × (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 更新されるカタログ表 (続き) 列統計について 列統計に関する情報は SYSCAT.COLUMNS または SYSSTAT.COLUMNS カタログ視点を通じて参照・更新することができま す。 COLCARD は表内の全ての列について見積もられます。区分データベースの場合、列がその表の単一列区分化キーである ときには、COLCARDの値はデータベース区画での値にデータベース区画の数を乗じて見積もります。 索引の統計を収集する場合、列統計は索引の中の最初の列の統計のみが収集されます。 列分布統計について 列分布統計に関する情報は SYSCAT.COLDIST または SYSSTAT.COLDIST カタログ視点を通じて参照・更新することができ ます。 列分布統計は、RUNSTATS コマンドに WITH DISTRIBUTION 文節を指定するか、または RUNSTATS API を呼び出すとき に、 statsopt パラメータに A、D、Y のいずれかを指定することによって収集することができます。 列の値が一様な場合には分布統計は収集されません。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 117-118 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 非一様分布統計情報の使用 目的 等号述部、範囲述部を満たす行数をより正確に見積もる 種類 「頻出値」の統計 ・・・ 繰り返しのデータが多い場合 「変位値」の統計 ・・・ データ値に大きなバラツキがある場合 方法 RUNSTATS コマンドで WITH DISTRIBUTION 文節を指定 内容 SYSCAT.COLDIST / SYSSTAT.COLDIST カタログ視点から参照 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 非一様分布統計情報の使用 最適化プログラムは、表の列内のデータ値の分布に関する統計情報を使用すると、その列を対象とした等号述部または範囲述 部を満たす行数をより正確に見積もることができるようになります。これにより、最適化プログラムは最善のアクセス・プランを選 択する可能性が大きくなります。 該当行数が少ない場合にはアクセス経路としてマッチング索引スキャンを行い、該当行数が多い場合には表スキャンを行うのが 効率がよいであろうという考えに基づいています。(「1-3 アクセス経路の種類」参照) データ値の分布に関する統計情報としては、「頻出値」の統計情報と「変位値」の統計情報の2種類があります。 「頻出値」統計は、列に繰り返しのデータが多い時に等号述部を満たす行数を見積る場合に有効です。 「変位値」統計は、表のデータ値に大きなバラツキがある時に、範囲述部を満たす行数を見積る場合に有効です。 この分布統計情報を収集するには、RUNSTATS コマンドで WITH DISTRIBUTION 文節を指定するか、RUNSTATS API を呼び出 す時に、statsopt パラメーターにA、D、Y のいずれかを指定します。 収集された統計情報は SYSCAT.COLDIST または SYSSTAT.COLDIST カタログ視点から参照することができます。 以下の場合は、分布統計情報が収集されず、エラーも戻りません。 構成パラメーター num_freqvalues および num_quantiles を 0(ゼロ)に設定し、分布統計を収集しないことを指定している場合 LONG、またはラージ・オブジェクト(LOB) の列である場合 列の中に同じデータ値が複数個存在しない場合(頻出値統計) 列の中に非NULL値が1つしか存在しない場合(変位値) 分布統計はホスト変数を使用しない動的SQLおよび静的SQLで最も有効です。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 119-120 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 非一様分布統計情報の使用(続き) table1 1. SELECT FROM WHERE AND C1, C2 table1 C1 = 'NEW YORK' ・・・① C2 <= 10 ・・・② ①を満たす行を取り出して、 ②を満たすか調べる ②を満たす行を取り出して、 ①を満たすか調べる オプティマイザーは最初に取り出す行数が少ない方 (=入出力コストが小さい方)を選択する 取り出す行数を見積るため、分布統計情報を使用する C1 C2 ---------- -----TOKYO 0.0 NEW YORK 5.1 HONG KONG 5.3 PARIS 5.4 NEW YORK 5.5 TOKYO 5.7 NEW YORK 5.9 : : : : LONDON 10.5 NEW YORK 11.2 NEW YORK 90.5 TOKYO 97.5 NEW YORK 99.3 NEW YORK 100.0 ---------- -----全40行 (C1、C2にそれぞれ索引がある) (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 非一様分布統計情報の使用(続き) 例えば、次のような照会文があり、C1とC2にそれぞれ索引が1つずつ存在するとします。 SELECT C1, C2 FROM table1 WHERE C1='NEW YORK' AND C2 <= 10 この場合、可能なアクセス・プランは2つ考えられます。 C1の索引を使用してC1='NEW YORK'の行をすべて検索してから、取り出された行についてC2<=10を満たすか調べる C2の索引を使用してC2<=10の行をすべて検索してから、取り出された行についてC1='NEW YORK'を満たすか調べる 最小限の数の検索で済むプランを選択するためには、各述部を満たす行の数を見積もることが必要です。 分布統計を使用しない場合には、最適化プログラムには、ある列の2番目に高いデータ値(HIGH2KEY)、2番目に低いデータ値 (LOW2KEY)、その列に存在する値の種類の数(COLCARD)、行数(CARD)の情報のみが提供されます。そして、列内の各デー タ値の頻度はすべて等しく、区間(LOW2KEY, HIGH2KEY)に渡って均等に分布すると仮定されます。 この時、最適化プログラムは 等号述部 C1=KEY を満たす行の数は CARD/COLCARD 範囲述部 C1 BETWEEN KEY1 AND KEY2 を満たす行の数は (KEY2 - KEY1) / (HIGH2KEY - LOW2KEY) * CARD と見積もります。 しかし、データ値の頻度が大きく偏っている場合や、データ値が幅の狭い間隔の中に集中して存在するような場合には上の見積 もりは桁違いのものになり、最適なプランを選択できない可能性が大きくなります。 分布統計が使用できる時には、次項で説明するように行の数の見積もりをより正確なものにすることが可能となります。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 121-122 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 頻出値統計情報の取得例 繰り返しのデータが多い (頻度が不均一)・・・「NEW YORK」 の頻度が他に比べて非常に大きい。 頻度統計情報を上位から構成パラメーター num_freqvalues で指定した数まで収集する (num_freqvalues のデフォルトは10) 下の例ではnum_freqvalues =2 に設定 table1 SYSSTAT.COLDIST (抜粋) 1. C1 -------TOKYO NEW YORK HONG KON PARIS NEW YORK TOKYO NEW YORK : : LONDON NEW YORK NEW YORK TOKYO NEW YORK NEW YORK TABNAME COLNAME TYPE SEQNO ------- ------- ---- -----TABLE1 C1 F 1 TABLE1 C1 F 2 列データの分布 HONG KONG LONDON NEW YORK COLVALUE VALCOUNT ------------ -------'NEW YORK ' 24 'TOKYO ' 7 3 2 24 4 7 PARIS TOKYO 「NEW YORK」 の頻度が 他に比べて非常に大きい 頻度 0 30 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 頻出値統計情報の取得例 頻度が不均一であるとは、特定のデータ値の頻度が他のデータ値の頻度よりはるかに高い場合です。例えば、上のtable1では、 データ値 'NEW YORK' の頻度が他に比べてかなり高くなっています。この不均一のタイプは、頻出値の統計情報を使用するとよ り正確に照会のコストを見積もることができます。 頻出値の統計情報とは、繰り返しの多い列の値とその頻度(繰り返しの回数)を頻度の多い順にN(>=1) 番目まで収集したもので す。すなわち、N 個の最大頻出値とは頻度が最高のデータ値、2番目のデータ値、・・・、N番目のデータ値で構成されます。そし て、頻出値統計は、そのN個のデータ値と頻度のことを言います。 分布統計の収集を指定した時、データベースマネージャーにより収集される頻出値の数は num_freqvalues 構成パラメーターに よって設定することができます。省略時値は1つの列に関して10です。つまり、データベースマネージャーはある列に関して、デ フォルトで頻度の高い順に10個のデータ値とその頻度を保存していることになります。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 123-124 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 頻出値統計情報を使用した行数の見積もり例 データベースマネージャーが持っている情報(抜粋) table1 分布統計情報 (最大頻出値) 1. C1 -------TOKYO NEW YORK HONG KON PARIS NEW YORK TOKYO NEW YORK : : LONDON NEW YORK NEW YORK TOKYO NEW YORK NEW YORK SYSCAT.COLDIST SEQNO COLVALUE VALCOUNT ------ ------------ -------1 'NEW YORK ' 24 2 'TOKYO 統計情報の収集 (num_freqvalues = 2 に設定した場合) SYSCAT.TABLES CARD ----40 ' 7 分布統計情報を収集しない 場合でも収集される統計情報 SYSCAT.COLUMNS COLCARD ------5 HIGH2KEY LOW2KEY -------- ------'PARIS' 'LONDON' (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 頻出値統計情報を使用した行数の見積もり例 頻度が不均一な場合の例として、C1=value の形式の等価述部を満たす行の数について考えます。この場合、value の値によって 次の2つが考えられます。 a. value が N最大頻出値のうちの一つと等しい場合 b. value が N最大頻出値のいずれにも等しくない場合 a.では、条件①を満たす行数はあらかじめカタログ内に収集済みのvalue の頻出値となります。 b.では、N個の最大頻出値以外の値が均等に分布していると仮定して計算します。すなわち、表全体からN最大頻出値のいずれ かと等しい値の行を抜いた残りの行を考え、それらの行では値は均一に分布しているという仮定のもとで次のように計算します。 CARD - NUM_FREQ_ROWS -----------------------…式(1) COLCARD - N ここで、CARD は全体の行数、NUM_FREQ_ROWS は値がN最大頻出値のいずれかと等しい行数、COLCARD は列に含まれる値 の種類の数を表しています。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 125-126 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 行数の見積もり計算(頻度の統計情報がある場合) C1 = 'NEW YORK' C1 = 'PARIS' 頻出値統計情報に 存在する 頻出値統計情報に 存在しない SYSCAT.COLDIST SYSCAT.COLDIST SEQNO COLVALUE VALCOUNT ------ ------------ -------1 'NEW YORK ' 24 SEQNO COLVALUE VALCOUNT ------ ------------ -------1 'NEW YORK ' 24 2 'TOKYO ' 7 2 'TOKYO C1 ' 7 C1 頻出値統計情報からそのまま 見積りを計算 統計情報に存在する行 (C1='NEW YORK' と C1='TOKYO')を 除いた行の行数は均等に分布と仮定 3 3 NEW YORK 24 24 NEW YORK 3 PARIS 7 TOKYO 0 30 0 C1='NEW YORK' を満たす行数の 見積もりは24行 C1='PARIS' を満たす行数の 見積もりは3行 30 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 行数の見積もり計算(頻度の統計情報がある場合) 上の例では、N=2 の頻出値統計が使用可能であるとしています。すなわち、データ値が 'NEW YORK'である行の頻度が24であ るという情報とデータ値が 'TOKYO'である行の頻度が7であるという情報を最適化プログラムは提供されています。 まず、C1 = 'NEW YORK' ・・・① である場合について考えます。頻出値統計を使用すると、条件①を満たす行数はカタログに 収集されている情報より24行であるということがわかります。 次に、C1 = 'PARIS' ・・・② を考えます。 この'PARIS'の頻度に関する情報は頻出値統計情報には存在しません。頻出値統 計情報からは、C1 = 'NEW YORK' 満たす行数が24行であることとC1 = 'TOKYO' 満たす行数が7行であることはわかりま す。そこで、C1 = 'NEW YORK'とC1 = 'TOKYO' 以外の行は各データ値に関して均等に分布していると仮定します。即ち、 C1 = 'NEW YORK'と C1 = 'TOKYO'以外の3種類のデータは全体(40行)から'NEW YORK'である行数(24行)と'TOKYO' である行数(7行)を引いた残りの行数(9行)に均等に分布していると考えます。すると、各データ値はそれぞれ3行ずつであると見 積ることができます。以上より、C1 = 'PARIS'を満たす行数の見積もりは3行となります。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 127-128 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 行数の見積もり計算(頻度の統計情報がない場合) C1 = 'NEW YORK' C1 = 'PARIS' C1 8 8 NEW YORK 8 PARIS 8 TOKYO 8 0 各データ値の行数は均等に分布 と仮定 30 各データ値の行数の 見積もりは8行 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 行数の見積もり計算(頻度の統計情報がない場合) 頻出値統計を使用しない場合は、各データ値はそれぞれ等しい行数ずつ存在すると仮定されるため、各データ値の行数は 40÷5=8 行 と計算されます。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 129-130 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 行数の見積もり計算結果 a b C1='NEW YORK' (=最大頻出値の一つ) C1='PARIS'(≠最大頻出値の一つ) 実際の該当行数 24行 4行 頻度の統計情報がある場合 24行 (頻出値統計より) 3行 ((CARD - (24+7))/(COLCARD - 2)=3) 頻度の統計情報がない場合 8行 (CARD/COLCARD = 8) 8行 (CARD/COLCARD = 8) (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 行数の見積もり計算結果 上記の例では、C1='NEW YORK' を満たす行数の見積もりについて、頻出値統計情報を使用した場合には、エラーがゼロである のに対し、使用しない場合には非常に大きなエラーが発生します。 また、C1='PARIS' を満たす行数の見積もりに対しても、頻出値統計情報を使用した場合の方が、使用しない場合と比較してエ ラーが減少していることがわかります。 このように、頻度のばらつきが大きいデータ値の場合、等価述部を満たす行数の見積もりにおいて、頻出値統計情報の使用が非 常に有効であるということがわかります。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 131-132 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 変位値統計情報の取得例 表のデータのバラツキが大きい ・・・最小値(0.0)と最大値(100.0)の間に均一に分布せず、 (変位値が不均一) 範囲 (5,10)の中に集中している 列全体のデータ値を昇順に並べた時に、全体の行数を構成パラメーター num_quantiles で指定した数で分割する各 行について、列データ値(COLVALUE)とその行が上から何番目にあるか(VALCOUNT)という統計情報を収集する。 (num_quantiles のデフォルトは20) SYSSTAT.COLDIST (抜粋) TABNAME ------TABLE1 TABLE1 TABLE1 TABLE1 table1 1. C2 -----0.0 5.1 5.3 5.4 5.5 5.7 5.9 : : 10.5 11.2 90.5 97.5 99.3 100.0 COLNAME ------C2 C2 C2 C2 TYPE SEQNO COLVALUE VALCOUNT ---- ----- ------------ -------Q 1 +000.0 1 Q 2 +006.8 13 Q 3 +008.5 27 Q 4 +100.0 40 列データの分布 1 0∼ 5 33 5∼ 10 2 10∼ 15 1 85∼ 90 データ値が均一に分布せず、 範囲 (5,10)の中に集中している 2 90∼ 95 1 95∼100 0 10 30 行数 20 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 変位値統計情報の取得例 変位値が不均一であるとは、データ値が最高データ値と最低データ値の間に均一に分布しておらず、ある限られた範囲内にデー タ値が多く存在する場合です。例えば、上の table1 では、データ値は最小値(0.0)と最大値(100.0)の間に均一に分布せず、範囲 (5,10)の中に集中しています。この不均一のタイプは、変位値の統計情報を使用するとより正確に照会コストを見積もることがで きます。 変位値の統計情報とは、列の値を昇順に並べた時の分布状況(行番号と値)を収集したものです。変位値の統計における列のK 変位値とは、データ値がその値以下である行がK個以上あるような最小のデータ値のことをいいます。すなわち、K変位値は、 データ値の昇順で並べた時のK番目の行にあるデータ値に等しくなります。 分布統計の収集を指定した時、データベースマネージャーにより収集される変位値は num_quantiles 構成パラメーターによって設 定することができます。省略時値は1つの列に関して20です。つまり、データベースマネージャーはある列について、デフォルトで 列全体を20等分する行の行番号とそのデータ値を保存しようとします。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 133-134 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 変位値統計情報を使用した行数の見積もり例 データベースマネージャーが持っている情報(抜粋) table1 SYSCAT.COLDIST 1. C2 -----0.0 5.1 5.3 5.4 5.5 5.7 5.9 : : 10.5 11.2 90.5 97.5 99.3 100.0 SEQNO COLVALUE VALCOUNT ----- ------------ -------1 +000.0 1 2 +006.8 13 3 +008.5 27 4 +100.0 40 統計情報の収集 (num_quantiles = 4 に設定した場合) SYSCAT.TABLES CARD ----40 分布統計情報 (変位値) 分布統計情報を収集しない場 合でも収集される統計情報 SYSCAT.COLUMNS COLCARD HIGH2KEY LOW2KEY ------- -------- ------40 +099.3 +005.1 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 変位値統計情報を使用した行数の見積もり例 変位値が不均一である場合の例として、C2<=value の形式の範囲述部を満たす行の数を考えます。この場合、value の値によっ て次の2つの場合が考えられます。 a. value が収集されている変位値のうちの一つと等しい場合。 b. value が収集されている変位値のいずれとも等しくない場合。 a. の場合は収集されている変位値の一つである value の値に対応するVALCOUNT の値が、範囲述部を満たす行数となります。 b. の場合は見積もりの行数をさらに二つに分けて考えます。 b-1.「C1<=(value 以下で最大の変位値) 」を満たす行数 ( = r_1) b-2.「(value 以下で最大の変位値) < C1 <= value」 を満たす行数 ( = r_2) b-1. に関しては a. と同様で、r_1 は変位値に対応するVALCOUNT の値です。 b-2. に関しては線形補完により、r_2 の値を見積もります。すなわち、(value 以下で最大の変位値)とその次の変位値の間では列 の値は均一に分布していると仮定し、比例関係により計算します。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 135-136 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 行数の見積もり計算(変位値の統計情報がある場合) C2<=8.5 C2<=10.0 変位値統計情報に 存在する SYSCAT.COLDIST SYSCAT.COLDIST SEQNO COLVALUE VALCOUNT ----- ------------ -------1 +000.0 1 2 +006.8 13 3 +008.5 27 4 +100.0 40 SEQNO COLVALUE VALCOUNT ----- ------------ -------1 +000.0 1 2 +006.8 13 3 +008.5 27 4 +100.0 40 40 線形補完 40 累積行数 累積行数 変位値統計情報に 存在しない 27 r2 27 r1 0 0.0 C2 ∼ 6.8 ∼ 8.5 ∼ 100..0 C2<=8.5 を満たす行数の 見積もりは27行 0 C2 0.0 ∼ 6.8 ∼ 8.5 ∼ 10.0 ∼ 100..0 C2<=10.0 を満たす行数の 見積もりは27行 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 行数の見積もり計算(変位値の統計情報がある場合) 上の例では、収集される変位数が4の場合(num_quantiles = 4)で、1、13、27、40 番目のデータ値がデータベースマネージャーに 提供されています。 まず、C1 <= 8.5 である場合の行数を見積もることを考えます。実際の該当行数は27行です。 統計情報を使用する場合は、8.5 は収集されている統計情報のCOLVALUEの一つであるため、対応する行のVALCOUNT値であ る27 を見積もりとして使用します。 続いて、C1 <= 10 である場合の行数を見積もることを考えます。実際の該当行数は34行です。 統計情報を使用する場合には、述部を 「C1 <= 8.5 を満たす行数 (= r_1)」 と 「8.5 < C1 <= 10.0 を満たす行数 (= r_2)」 に分けて考えます。 上記により r_1 = 27 です。 r_2 を見積もるために、最適化プログラムでは線形補完を使用します。つまり、変位値が8.5 から 100.0 までの間にデータ値が 均一に分布していると考えます。8.5 から 100.0 までの間には(40 - 27) = 13行ある事が分かっているため、8.5 から 10.0 まで の間には、 (10.0 - 8.5) / (100.0 - 8.5) * (40-27) ≒ 0 (行) 存在すると見積もることができます。従って、条件②を満たす行数は、r_1 + r_2 ≒ 27 + 0 = 27 行と見積もることができます。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 137-138 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 行数の見積もり計算(変位値の統計情報がない場合) データ分布がLOW2KEY(=5.1) から HIGH2KEY(=99.3) の間で均一に分布していると仮定 C2<=8.5 C2<=10.0 累積行数 40 線形補完 2 1 0 ∼5.1 ∼8.5 C2<=8.5 を満たす行数の 見積もりは1行 ∼10.0 ∼99.3 C2 C2<=10.0 を満たす行数の 見積もりは2行 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 行数の見積もり計算(変位値の統計情報がない場合) 変位値の統計情報を使用しない場合は、データ分布がLOW2KEY(=5.1) から HIGH2KEY(=99.3) の間で均一に分布していると仮定 されます。 まず、C1 <= 8.5を満たす行数の見積もりを考えます。この見積もりは、 (8.5 - 5.1) / (99.3 - 5.1) * 40 ≒ 1(行) となります。 続いて、C1 <= 10.0 である場合の行数を見積もります。この場合は、 (10 - 5.1) / (99.3 - 5.1) * 40 ≒ 2(行) となります。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 139-140 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-2 非一様分布統計情報 行数の見積もり計算結果 a C2<=8.5 (=変位値の一つ) b C2<=10.0(≠変位値の一つ) 実際の該当行数 27行 34行 変位値統計情報がある場合 27行(変位値統計より) 27行 (r_1 + r_2 ≒ 27 + 0 = 27) 変位値統計情報がない場合 1行 ( (8.5-LOW2KEY)/(HIGH2KEY-LOW2K EY)*CARD≒1) 2行( (10.0-LOW2KEY)/(HIGH2KEY-LO W2KEY)*CARD≒2) (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 行数の見積もり計算結果 上記の例では、C2<=8.5 を満たす行数の見積もりについて、変位値統計情報を使用した場合には、エラーがゼロであるのに対 し、使用しない場合には非常に大きなエラーが発生します。 また、C2<=10.0 を満たす行数の見積もりに対しても、頻出値統計情報を使用した場合の方が、使用しない場合と比較してエラー が減少していることがわかります。 このように、列内のデータのばらつきが大きいデータ値の場合、範囲述部を満たす行数の見積もりにおいて、変位値統計情報の 使用が非常に有効であるということがわかります。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 141-142 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-3 詳細な索引統計情報 詳細な索引統計情報の使用 目的 索引を使用して表にアクセスする際のコストをより正確に見積もる 方法 RUNSTATS コマンドで DETAILED 文節を指定 内容 物理入出力数をバッファー・サイズの関数としてモデル化 SYSCAT.INDEXES/SYSSTAT.INDEXES カタログ視点に以下の統計情報を収集 CLUSTERRATIO (表のサイズが約25ページより小さい場合) PAGE_FETCH_PAIRS、CLUSTERFACTOR (表のサイズが約25ページ以上の場合) (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 詳細な索引統計情報の使用 索引に関するより詳細な統計の収集を行うと、最適化プログラムがその索引を使用して表にアクセスする際のコストをより正確に 見積もることができます。 詳細な索引統計を収集するには、次の2つの方法があります。 RUNSTATS コマンドで DETAILED 文節を使用する RUNSTATS API の呼び出し時に statsopt パラメータに A,Y,X のいずれかを指定する 詳細な索引統計では、バッファー・サイズを変化させて完全な索引走査をした時に、表のデータ・ページへのアクセスに必要な物 理入出力の数を見積もります。この見積もりに曲線をあてはめ、この曲線上の11個の座標点(”仮定バッファーサイズ、そのバッ ファーサイズの時における索引走査の物理入出力数” のペア11組) を PAGE_FETCH_PAIRS 統計として保管します。 SYSCAT.INDEXES または、SYSSTAT.INDEXES カタログ視点の PAGE_FETCH_PAIRS と CLUSTERFACTOR は表のサイズが約 25ページ以上の時に収集されます。表のサイズが約25ページより小さい時は、CLUSTERRATIO が代りに収集されます。 CLUSTERRATIO 索引のクラスター化の程度を表す。 PAGE_FETCH_PAIRS 11対の整数を表すストリング。各対の最初の値は仮想バッファーサイズを表し、2番目の値はそのバッファーサイズをすべて索 引の走査に使うことができると仮定した時に、1回の索引走査でデータページを取り出す際の物理入出力数の見積もりを表す。 CLUSTERFACTOR CLUSTERRATIO より高い計算精度のもの。 クラスター化 データページが索引のリーフノードの値の順番に物理的に並んでいる度合いが高い時、その索引はクラスター化されていると 言う。詳細は「索引設計」を参照。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 143-144 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-3 詳細な索引統計情報 PAGE_FETCH_PAIRS 統計の収集例 索引 使用可能なバッファー・ページが1ページのみ バッファー・ページ … 物理入出力回数が 非常に多い 物理入出力 バッファー・ページが表全体を含む大きさ バッファー・ページ データ・ページ 物理入出力 … … 各データページを1回ずつ 読み込むだけで済む 物理入出力の数とバッファー・サイズの見積もりの値の11個のペアを PAGE_FETCH_PAIRS 統計 として保管 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: PAGE_FETCH_PAIRS 統計の収集例 バッファー・サイズのモデルとして次の二通りを考えます。 a. 使用可能なバッファー・ページが1ページのみの場合 b. バッファーが表全体を含む大きさの場合 a. の場合には、索引によって新しくページが参照されるたびにページ不在が生じることになるため、入出力数が非常に大きくなり ます。入出力数が一番大きい場合は、各行がそれぞれ異なるページを参照する場合で、その入出力数は索引列の行数に等しく なります。 b. の場合には、表のNPAGES ページはそれぞれ完全に1回の物理入出力で済むため、入出力数は最小となり、完全な索引走査 に必要な入出力数は NPAGES 回です。 一般的な場合は、a. と b. の間であり、物理入出力の見積もりの数はバッファー・サイズの単調な減少関数となります。 RUNSTATSはこの見積もりに曲線をあてはめ、この曲線上の11個の座標点を PAGE_FETCH_PAIRS 統計として保管します。 PAGE_FETCH_PAIRS の11個の各座標点の最初の値は仮定バッファー・サイズであり、2番目の値はそのサイズのバッファーがす べて索引の走査に使用可能であるとした時、1回の索引走査でデータベース・ページを取り出すのに必要な物理入出力の見積も り数です。最適化プログラムはこの PAGE_FETCH_PAIRS 統計を使用して、その索引を使用した際の物理入出力の数を見積もり ます。 PAGE_FETCH_PAIRS は例えば次のような形になります。 PAGE_FETCH_PAIRS = '100 380 120 360 140 340 160 330 180 320 200 310 220 305 240 300 260 300 280 300 300 300' 但し、PAGE_FETCH_PAIRS と CLUSTERFACTOR は表のサイズが十分に大きい(約25ページ以上)の場合にのみ収集されま す。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 145-146 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 統計情報の更新 カタログ更新の目的 開発システム上で、実動システムの統計情報を使用したパフォーマンスのモデル化 「what if」照会パフォーマンスの分析 更新できる統計 SYSSTATスキーマに定義された視点 方法 SQL UPDATE ステートメントを使用 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 統計情報の更新 システム・カタログを更新することによって、以下のことが可能になります。 開発システム上で、実動システムの統計情報を使用してパフォーマンスをモデル化する。 「what if」照会パフォーマンス分析を実行する。 これらの統計列の値を更新するためには、SYSSTAT スキーマに定義されたカタログ視点に SQL UPDATE ステートメントを使用 します。明示的な CONTROL 特権を付与されている表、通称に対して統計情報を更新できます。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 147-148 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 "TABLE1" の表統計を更新する例 SYSSTAT.TABLES カタログ視点 更新前 TABSCHEMA TABNAME CARD NPAGES FPAGES OVERFLOW --------- ------- ---- ------ ------ -------USERID TABLE1 40 1 1 0 UPDATE SYSSTAT.TABLES SET CARD = 10000, NPAGES = 1000, FPAGES = 1000, OVERFLOW = 2 WHERE TABSCHEMA = 'USERID' AND TABNAME = 'TABLE1' "TABLE1"表に対してSQL UPDATE ステートメントを発行 更新後 TABSCHEMA TABNAME CARD NPAGES FPAGES OVERFLOW --------- ------- ----- ------ ------ -------USERID TABLE1 10000 1000 1000 2 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: "TABLE1" の表統計を更新する例 TABLE1 表の表統計を更新する例を示します。これは、USERID スキーマの TABLE1 表に関して、行数を 10,000行、表のページ 数および行データを含むページ数を1,000ページ、オーバーフローしている行の数を2行に更新しています。 UPDATE SYSSTAT.TABLES SET CARD = 10000, NPAGES = 1000, FPAGES = 1000, OVERFLOW = 2 WHERE TABSCHEMA = 'USERID' AND TABNAME = 'TABLE1' カタログ統計を更新した後、適用した更新をすべて置換するには次の方法があります。 作業単位のROLLBACK(作業単位がコミットされていない場合) RUNSTATS ユーティリティーによるカタログ統計の再計算 カタログ統計を -1 に更新して、統計が収集されていない状態に設定 カタログ統計を更新前のデータで置換 (あらかじめ db2look ツール使用して更新前の統計をキャプチャーしている場合) カタログ統計を更新する場合は、各種統計相互間の関係に一貫性を保つよう注意する必要があります。 (p.126、128「ユーザー更新が可能なカタログ統計」参照) (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 149-150 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 ユーザーが更新可能な統計情報 SYSSTAT.TABLES SYSSTAT.INDEXES 統計 説明 FPAGES 表が使用しているページ数 NPAGES 行のデータが入っているページ数 OVERFLOW オーバーフローしている行の数 CARD 表内の行の数(カーディナリティー) 統計 説明 NLEAF 索引葉ページの数 NLEVELS 索引レベルの数 CLUSTERRATIO 表データのクラスター化の程度 CLUSTERFACTOR FIRSTKEYCARD クラスター化の詳細の程度 索引の対象となるページ範囲にあるページ数に 対する SEQUENTIAL_PAGESの比率(%) 索引の最初の列の個別値の数 FIRST2KEYCARD 索引の最初の2つの列の個別値の数 FIRST3KEYCARD 索引の最初の3つの列の個別値の数 FIRST4KEYCARD 索引の最初の4つの列の個別値の数 FULLKEYCARD 索引の全ての列の個別値の数 索引キー順にディスク上に位置しているリーフ ページの数 異なるバッファー・サイズでの取り出し見積もり DENSITY SEQUENTIAL_PAGES PAGE_FETCH_PAIRS (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: ユーザーが更新可能な統計情報 SYSSTAT.TABLES 内で更新可能な統計情報は CARD、FPAGES、NPAGES、OVERFLOW の各値です。 更新にあたっては以下の注意が必要です。 CARD はその表に対応する SYSSTAT.COLUMNS 内の全ての COLCARD の値よりも大きい必要があります。 CARD は NPAGES より大きい必要があります。 FPAGES は NPAGESより大きい必要があります。 SYSSTAT.INDEXES 内で更新可能な統計情報は NLEAF、NLEVELS、CLUSTERRATIO、CLUSTERFACTOR、DENSITY、 FIRSTKEYCARD、FIRST2KEYCARD、FIRST3KEYCARD、FIRST4KEYCARD、FULLKEYCARD、SEQUENTIAL_PAGES、 PAGE_FETCH_PAIRS の各値です。 これらの更新にあたっては以下の注意が必要です。 PAGE_FETCH_PAIRS 統計内の各値は、10桁以下で最大整数値(MAXINT=2147483647) より小さい値であり、一連のブランク 区切り文字で区切る必要があります。その中のバッファーサイズの項目は値の昇順に、「物理入出力数」の項目は値の降順 に並ぶ必要がります。 CLUSTERRATIO の有効な値は -1 か 0 ∼ 100 です。 CLUSTERFACTOR の有効な値は -1 か 0 ∼ 1 です。 CLUSTERRATIO の値と CLUSTERFACTOR の値のうち少なくとも一つは -1 である必要があります。CLUSTERFACTOR が -1 でない場合には、PAGE_FETCH_PAIRS 統計の値が有効である必要があります。 FIRSTKEYCARD は、単一列索引の場合には FULLKEYCARD と等しい必要があります。 FIRSTKEYCARD は対応する列の COLCARD と等しい必要があります。 複数の列索引の場合、全ての統計が必要ならば、それらの間には以下の関係がある必要があります。 FIRSTKEYCARD <= FIRST2KEYCARD <= FIRST3KEYCARD <= FIRST4KEYCARD <= FULLKEYCARD <= CARD 特に、ユニーク索引の場合は FULLKEYCARD = CARD です。 SEQUENTIAL_PAGES の有効な値は -1 か 0 ∼ NLEAF です。 DENSITY の有効な値は -1 か 0 ∼ 100 です。 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 151-152 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 ユーザーが更新可能な統計情報(続き) SYSSTAT.COLUMNS SYSSTAT.COLDIST 統計 説明 COLCARD 列カーディナリティー AVGCOLLEN 列の平均長 HIGH2KEY 列内で2番目に高い値 LOW2KEY 列内で2番目に低い値 NUMNULLS 列のヌル値の数 統計 説明 DISTCOUNT TYPEがQの場合はCOLVALUE統計以下の 個別値の数 COLVALUE 頻出値統計または変位値統計を収集する 際のデータ値 VALCOUNT TYPEがFの場合は列内でデータ値 (COLVALUE)が発生する頻度、TYPEがQ の場合はデータ値以下の値を持つ行の数 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: ユーザーが更新可能な統計情報(続き) SYSSTAT.COLUMNS 内で更新可能な統計情報は COLCARD、AVGCOLLEN、HIGH2KEY、LOW2KEY、NUMNULLS の各値で す。 更新にあたっては次の注意が必要です。 HIGH2KEY と LOW2KEY は統計が取得されるユーザー列のデータ・タイプに対応していなくてはなりません。HIGH2KEY、 LOW2KEYは VARCHAR 列であるため、値は引用符で囲む必要があります。 HIGH2KEYとLOW2KEYを設定する他の方法としては、想定した値を設定したダミー行を挿入(INSERT)した後、RUNSTATSを 実行してその値をカタログ表に記録してからダミー行を削除するという方法もあります。この方法のメリットとして、上記の方法 のようにデータタイプの変換を気にする必要がないという点が挙げられます。 HIGH2KEY の値は LOW2KEY の値以上である必要があります。 COLCARD は SYSSTAT.TABLESのCARD より大きくすることはできません。 SYSSTAT.COLDIST 内で更新可能な統計情報はDISTCOUNT、COLVALUE、VALCOUNT の各値です。 更新にあたっては次の注意が必要です。 頻出値統計について VALCOUNT の値は SEQNO の値が増加するにつれて単調減少である必要があります。 COLVALUE の値は SYSSTAT.COLUMNS 内の COLCARD 以下である必要があります。 VAOCOUNTの値の合計数は SYSSTAT.TABLES 内のCARD 以下である必要があります。 変位値統計について COLVALUE の値は SEQNO の値が増加するにつれて単調増加である必要があります。 VALCOUNT の値は SEQNO の値が増加するにつれて単調増加である必要があります。 COLVALUE の最大値に対応するVALCOUNT の値はその列の行数と等しい必要があります。 その他、ユーザーが更新可能な統計情報としては、ユーザー定義関数の情報を保管している SYSSTAT.FUNCTIONS 視点内の 情報があります。(詳細は省略) (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 153-154 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 実動データベースのモデル化 テスト・システム 実動システム カタログ統計 構成パラメーター 同じではない データ・サブセット カタログ統計 構成パラメーター データ・サブセット 同じデータ・サブセット テスト・システムと実動システムでアクセス・プランが必ずしも同じにならない db2look ツールを用いてテスト・システムの環境を実動システムの環境と同じに することが可能 CITIES データベースのDDLと全てのカタログ統計項目をファイル out.sql に出力する例 db2look -a -d CITIES -e -m -o out (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 解説: 実動データベースのモデル化 テスト・システムにおいて、実動システムと同じデータのサブセットを用いてアクセス・プランの見積もりをする必要が生じる場合が あります。しかし、テストシステムと実動システムではカタログ統計と構成パラメータが異なるため、テストシステムで選択されたア クセス・プランは実動システムで選択されるアクセス・プランと必ずしも同じにはなりません。 db2look ツールは実動システムにおけるデータベースのデータ定義言語(DDL)やカタログ統計を更新するスクリプトを生成しま す。これを用いて、テスト・システムの環境を実動システムと同じ環境にすることが可能です。 db2look を模擬モード(-m オプション) で使用すると、データベースのカタログ統計情報を模造するのに必要なステートメントをす べて含むコマンド・プロセッサー・スクリプトを生成します。 db2look を -e オプションで使用すると、表、視点、索引、データベース内の他のオブジェクトを含むデータベース・データ・オブジェ クトを再作成するのに必要なDDLステートメントを作成することが可能です。 db2look により生成された更新ステートメントをテスト・システムに使用することで、実動システムで生成されるアクセス・プランの妥 当性を検査できます。但し、最適化プログラムは表スペースのタイプと構成の情報を使用して入出力コストを見積もるため、テス ト・システムの表スペースには、実動システムと同じタイプ(SMSまたはDMS)のコンテナーが同じ数だけ存在している必要があり ます。 db2look ツールの使用方法は、 db2look -h で参照できます。 主なオプション -d: データベース名: 対象データベース名を指定する -a: すべての作成者に統計を生成する -e: DDL ステートメントを含むスクリプトを生成 (データベースの複製には、DDLが抽出が必要です。) -h: 詳細ヘルプ・メッセージ -m: すべての統計をキャプチャーする SQL UPDATE ステートメントを含むスクリプトを生成 -o: 出力を与えられたファイル名にリダイレクトする。指定されていない場合は stdout に出力 -l: データベース・レイアウトの作成:ノード・グループ、バッファー・プール、および表スペース -x: 許可ステートメントDDLを生成 -f: 構成パラメータおよび環境変数の抽出 -u: 作成者 ID: -a オプションが指定された場合、-u オプションは無視される -i: データベースが存在するサーバーにログオンするためのユーザー ID -w: データベースが存在するサーバーにログオンするためのパスワード (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 155-156 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 (参考) db2look 出力例 (1/7) # db2look -u USERID -d CITIES -e -m -- この CLP ファイルは DB2LOOK バージョンを使用して作成されました 7.1 -- タイム・スタンプ: 2001/02/27 15:21:55 -- データベース名: CITIES -- データベース・マネージャーのバージョン: DB2/NT Version 7.1.0 -- データベース・コード・ページ: 943 CONNECT TO CITIES; データベースに接続 ------------------------------------------------- 表の DDL ステートメント "USERID "."TABLE1" -----------------------------------------------CREATE TABLE "USERID "."TABLE1" ( "C1" CHAR(10) , "C2" DECIMAL(4,1) ) IN "USERSPACE1" ; -- 表の索引の DDL ステートメント "USERID "."TABLE1" 表"TABLE1"を作成 CREATE INDEX "USERID "."C1X" ON "USERID "."TABLE1" ("C1" ASC); C1列に索引を作成 -- 表の索引の DDL ステートメント "USERID "."TABLE1" CREATE INDEX "USERID "."C2X" ON "USERID "."TABLE1" ("C2" ASC); C2列に索引を作成 (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 2-4 ユーザー更新が可能なカタログ統計 (参考) db2look 出力例 (2/7) ---------------------------------------------- 模倣表、列、索引および列分散 ---------------------------------------------- Mimic 表 TABLE1 RUNSTATS ON TABLE "USERID "."TABLE1" WITH DISTRIBUTION; RUNSTATS コマンドを実行 UPDATE SYSSTAT.INDEXES SET NLEAF=-1, NLEVELS=-1, FIRSTKEYCARD=-1, FIRST2KEYCARD=-1, FIRST3KEYCARD=-1, FIRST4KEYCARD=-1, FULLKEYCARD=-1, CLUSTERFACTOR=-1, CLUSTERRATIO=-1, SEQUENTIAL_PAGES=-1, DENSITY=-1 WHERE TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID '; UPDATE SYSSTAT.COLUMNS SET COLCARD=-1, NUMNULLS=-1 WHERE TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID '; (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 157-158 ) SYSSTAT.INDEXES を更新 SYSSTAT.COLUMNS を更新 DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 (参考) db2look 出力例 (3/7) SYSSTAT.TABLES を更新 UPDATE SYSSTAT.TABLES SET CARD=40, NPAGES=1, FPAGES=1, OVERFLOW=0 WHERE TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID '; UPDATE SYSSTAT.COLUMNS SET COLCARD=5, NUMNULLS=0, --SUB_COUNT=-1, --SUB_DELIM_LENGTH=-1, HIGH2KEY='PARIS ', LOW2KEY='LONDON ', AVGCOLLEN=11 WHERE COLNAME = 'C1' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID '; SYSSTAT.COLUMNS を更新 UPDATE SYSSTAT.COLUMNS SET COLCARD=40, NUMNULLS=0, --SUB_COUNT=-1, --SUB_DELIM_LENGTH=-1, HIGH2KEY='+099.3', LOW2KEY='+005.1', AVGCOLLEN=4 WHERE COLNAME = 'C2' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID '; COMMIT WORK; (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 2-4 ユーザー更新が可能なカタログ統計 (参考) db2look 出力例 (4/7) UPDATE SYSSTAT.COLDIST SET COLVALUE='NEW YORK ', VALCOUNT=31 WHERE COLNAME = 'C1' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' AND TYPE = 'Q' AND SEQNO = 3; SYSSTAT.COLDIST を更新 UPDATE SYSSTAT.COLDIST SET COLVALUE='TOKYO ', VALCOUNT=40 WHERE COLNAME = 'C1' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' AND TYPE = 'Q' AND SEQNO = 4; COMMIT WORK; UPDATE SYSSTAT.COLDIST SET COLVALUE = NULL, VALCOUNT= -1 WHERE VALCOUNT <> -1 AND COLNAME = 'C2' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' ; UPDATE SYSSTAT.COLDIST SET COLVALUE='+000.0', VALCOUNT=1 WHERE COLNAME = 'C2' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' AND TYPE = 'Q' AND SEQNO = 1; (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 159-160 ) DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 (参考) db2look 出力例 (5/7) UPDATE SYSSTAT.COLDIST SET COLVALUE='+006.8', VALCOUNT=13 WHERE COLNAME = 'C2' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' AND TYPE = 'Q' AND SEQNO = 2; SYSSTAT.COLDIST を更新(続き) UPDATE SYSSTAT.COLDIST SET COLVALUE='+008.5', VALCOUNT=27 WHERE COLNAME = 'C2' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' AND TYPE = 'Q' AND SEQNO = 3; UPDATE SYSSTAT.COLDIST SET COLVALUE='+100.0', VALCOUNT=40 WHERE COLNAME = 'C2' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' AND TYPE = 'Q' AND SEQNO = 4; COMMIT WORK; (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 2-4 ユーザー更新が可能なカタログ統計 (参考) db2look 出力例 (6/7) UPDATE SYSSTAT.COLDIST SET COLVALUE='+100.0', VALCOUNT=40 WHERE COLNAME = 'C2' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID ' AND TYPE = 'Q' AND SEQNO = 4; SYSSTAT.COLDIST を更新(続き) COMMIT WORK; UPDATE SYSSTAT.INDEXES SET NLEAF=1, NLEVELS=1, FIRSTKEYCARD=40, FIRST2KEYCARD=-1, FIRST3KEYCARD=-1, FIRST4KEYCARD=-1, FULLKEYCARD=40, CLUSTERFACTOR=-1.000000, CLUSTERRATIO=100UPDATE SYSSTAT.INDEXES SET NLEAF=1, NLEVELS=1, FIRSTKEYCARD=5, FIRST2KEYCARD=-1, FIRST3KEYCARD=-1, FIRST4KEYCARD=-1, FULLKEYCARD=5, CLUSTERFACTOR=-1.000000, CLUSTERRATIO=100, SEQUENTIAL_PAGES=0, DENSITY=0 WHERE INDNAME = 'C1X' AND INDSCHEMA = 'USERID ' AND TABNAME = 'TABLE1' AND TABSCHEMA = 'USERID '; (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 第4章( 161-162 ) SYSSTAT.INDEXES を更新 DB2 UDB (PC&Unix) デザイン・ガイド 第4章.アクセス経路の選択 2-4 ユーザー更新が可能なカタログ統計 (参考) db2look 出力例 (7/7) -- Mimic 関数 UPDATE SYSSTAT.FUNCTIONS SET ios_per_invoc= -1.0, insts_per_invoc= -1.0, ios_per_argbyte= -1.0, insts_per_argbyte= -1.0, percent_argbytes= -1, initial_ios= -1.0, initial_insts= -1.0, cardinality= -1.0; SYSSTAT.FUNCTIONS を更新 COMMIT WORK; CONNECT をリセット CONNECT RESET; TERMINATE; (C)日本IBMシステムズ・エンジニアリング(株) データシステム部 ブランク・ページです 第4章( 163-164 )