ヘッダーをスキップ
Oracle Rdb for OpenVMS Oracle RMUリファレンス・マニュアル
リリース7.2
E06177-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

1.15 RMU Collect Optimizer_Statisticsコマンド

Oracle Rdbオプティマイザ用にカーディナリティおよび記憶域の統計情報が収集されます。作業負荷プロファイルが生成されている場合は、作業負荷統計情報も収集されます。

形式



説明

オプティマイザ統計情報の収集は、Oracle Rdbオプティマイザで問合せを最適化する際のソリューション・コストおよびカーディナリティの決定に使用する統計情報を最新にするためです。

カーディナリティと記憶域の統計情報は、RMU Collect Optimizer_Statisticsコマンドを発行して収集できます。Tables、System_RelationsまたはIndexes修飾子を使用して特定の表または索引に関するこれらの統計情報を収集するようOracle RMUに指定できます。

作業負荷統計情報を収集するには、まずSQLで作業負荷プロファイルを生成する必要があります。次のリストに、作業負荷プロファイルの生成および作業負荷統計情報の収集の一般的な手順を示します。

  1. SQL ALTER DATABASEまたはSQL CREATE DATABASE文でWORKLOAD COLLECTION IS ENABLED句を指定して作業負荷プロファイルを有効にします。
    SQLでRDB$WORKLOADという名前のシステム表が新たに作成されます。

  2. Oracle Rdbオプティマイザで最良の統計を得られる問合せを実行します。
    問合せを実行すると、問合せの最適化処理に重要な列のグループがオプティマイザで決定されます。この列のグループは、作業負荷列グループと呼ばれます。作業負荷列グループには、実際は列が1つのみ含まれることに注意してください。
    作業負荷列グループの各セットが、RDB$WORKLOADシステム表に行として挿入されます。
    この時点では、RDB$WORKLOADシステム表のデータは、作業負荷列グループ、列グループが関連付けられている表と、これらが表に挿入された日付のみです。統計情報は、RDB$WORKLOADシステム表に記録されていません。

  3. ここで、大抵の場合、SQL ALTER DATABASE WORKLOAD COLLECTION IS DISABLED句を使用して作業負荷プロファイルを無効にします。
    作業負荷プロファイルを無効にした後実行された問合せは、Oracle Rdbオプティマイザで作業負荷列グループ用にスキャンされません。同じ問合せが常に実行される場合、作業負荷列グループを有効のままにすることもできます。この場合、RDB$WORKLOADシステム表に新たな行は挿入されません。ただし、作業負荷プロファイルを有効にしたくない問合せの実行が予想される場合、作業負荷の収集を無効にする必要があります。

  4. Statistics=(Workload)修飾子を指定してRMU Collect Optimizer_Statisticsコマンドを実行します。
    Oracle RMUでRDB$WORKLOADシステム表が読み取られ、統計情報を収集する列グループが決定されて、統計情報が収集されます。

  5. 前述でプロファイルした問合せを再度実行します。
    Oracle RMUで収集された統計情報がオプティマイザで使用され、最大の効果が得られるようプロファイルした問合せが最適化されます。

次のリストに、RMU Collect Optimizer_Statisticsコマンドを発行するタイミングおよび使用するStatistics修飾子のオプションについてのガイドラインを示します。

表1-6に、RMU Collect Optimizer_Statisticsコマンドで収集できる統計情報と、これらの統計情報のオプティマイザでの使用方法の説明をまとめます。

表1-6 RMU Collect Optimizer_Statisticsコマンドで収集される統計情報
カーディナリティ統計
収集される統計 定義 オプティマイザでの使用方法
表カーディナリティ 表内の行の数。 ソリューション・カーディナリティの決定。
索引カーディナリティ 索引内の異なるキー値の数。 返される索引キーの数の見積り。
索引接頭辞カーディナリティ 複数セグメントに分かれたBツリー索引で、先行する部分にある異なるキー値の数。 ソート索引範囲を基に返される索引キーの数の見積り。
作業負荷統計
収集される統計 定義 オプティマイザでの使用方法
列グループ重複係数 列グループ内の値ごとの重複の平均数。これは、概算値である。 等価選択(IS NULL条件を使用した選択または等価(=)演算子を使用した条件の選択)、等価結合、グループ集計(SQL GROUP BY句など)または射影演算(SQL DISTINCT句など)の方法の決定。
列グループNULL係数 列グループのうち、最低1つの列にNULL値を持つ表の行の数。これは、概算値である。 等価結合および等価選択でのNULLデータの影響(NULL値を持つ行が除外される可能性があるため)の評価。外部結合の結果のカーディナリティの評価にも使用される。
記憶域統計
収集される統計 定義 オプティマイザでの使用方法
索引の平均の深さ
(ソート索引のみ)
Bツリーを何レベル下りるかの平均。 Bツリーの降下のコストの評価。(ソート索引によってアクセスされる内部表を使用するクロス結合で、Bツリーの降下が繰り返し行われる。)
索引キー・クラスタ化係数 ハッシュ・キー参照またはBツリー降下を除くBツリー索引のスキャン中、1つの索引キーと関連付けられているすべてのdbkeyの読取りに必要なI/Oの平均数。 ハッシュ索引およびソート索引に対する索引のみの検索のコスト評価の改善。
索引データ・クラスタ化係数 索引キーに関連付けられているdbkeyを使用したデータ行のフェッチに必要なI/Oの平均数。 ソート索引またはハッシュ・バケットからのデータ行のフェッチに対するコストの評価。
表の行クラスタ化係数 表の順次スキャンで、1行の読取りに必要なI/Oの平均数。 表の順次スキャンのコストの評価。


コマンド・パラメータ

root-file-spec

統計情報を収集するデータベースを指定します。デフォルトのファイル・タイプは.rdbです。

コマンド修飾子

Exclude_Tables

Exclude_Tables=(table-list)

統計情報の収集と、Rdb問合せオプティマイザによって使用される統計情報に対する更新から除外するデータベース表のリストを指定します。少なくとも1つのリストを指定する必要があります。表のリストのかわりに、オプション・ファイルを指定できます。

1つのRMU Collect OptimizerコマンドでExclude_Tables修飾子とTables修飾子が使用された場合、Exclude_Tables修飾子が優先されます。両方の修飾子に同じ表が指定された場合、その表は、統計情報の収集および更新から除外されます。

Indexes

Indexes=(index-list)

Noindex

統計情報を収集する索引を指定します。index-listを指定しない場合、Tables修飾子で指定された表に定義されたすべての索引の統計情報が収集されます。index-listを指定した場合、指定した索引の統計情報のみが収集されます。Noindex修飾子を指定した場合、索引カーディナリティ、索引の平均の深さ、索引キー・クラスタ化係数および索引データ・クラスタ化係数に関する統計情報は収集されません。

表の統計情報を収集しない場合は、Notable修飾子を指定します。(table-listを指定しないTables修飾子がデフォルトであることに注意してください。)

デフォルトは、index-listを指定しないIndexes修飾子です。

Log

Log=file-name

Nolog

統計用に計算された値の記録方法を指定します。SYS$OUTPUTに情報を出力する場合は、Log修飾子を指定します。情報をファイルに出力する場合は、Log=file-spec修飾子を指定します。情報を出力しない場合は、Nolog修飾子を指定します。どの種のLog修飾子も指定しない場合、デフォルトはDCL検証スイッチの現在の設定です。(DCL SET VERIFYコマンドでDCL検証スイッチを制御します。)

Row_Count=n

作業負荷統計情報を収集する際、1つのI/Oリクエストで送られる行の数を指定します。データベースと環境にとって最良のパフォーマンスとメモリー使用状況を得られるnの値は、テストをして見つけます。

nの値を増やすと、パフォーマンスは改善しますが、メモリーとオーバーヘッドが増えます。

nに指定できる最小値は1です。nのデフォルト値は100です。

Statistics[=(options)]

Tables、System_RelationsおよびIndexes修飾子で指定した事項に関して収集する統計情報のタイプを指定します。optionsリストを指定せずにStatistics修飾子を指定した場合、指定した事項に関するすべての統計情報が収集されます。

optionsリストを指定してStatistics修飾子を指定した場合、次に説明するタイプの統計情報がOracle RMUで収集されます。複数のオプションを指定する場合、オプション間をカンマで区切り、オプション全体をカッコで囲みます。

Statistics修飾子のオプションは次のとおりです。

System_Relations

Nosystem_Relations

システム表(リレーション)とこれに関連付けられている索引に関するオプティマイザ統計情報を収集するよう指定します。

System_Relations修飾子を指定しない場合、またはNosystem_Relations修飾子を指定した場合、システム表とこれに関連付けられている索引に関するオプティマイザ統計情報は収集されません。

システム表に定義されている索引に関する統計情報を収集しない場合は、Noindex修飾子を指定します。

デフォルトはNosystem_Relations修飾子です。

Tables

Tables[=(table-list)]

Notables

統計情報を収集する表を指定します。table-listを指定した場合、表とこれに関連付けられている索引に関する統計情報が収集されます。table-listを指定しない場合、すべての表とデータベース内の関連付けられているすべての索引に関する統計情報が収集されます。Table修飾子を指定しない場合、すべての表に関する統計情報が収集されます。Notables修飾子を指定した場合、表カーディナリティ、表の行クラスタ化係数、列グループ重複係数および列グループNULL係数に関する統計情報が収集されます。

索引の統計情報を収集しない場合は、Noindex修飾子を指定します。

table-listを指定しないTables修飾子がデフォルトです。

Transaction_Type=option

統計情報の収集に使用されるトランザクションのモードを指定できます。有効なオプションは次のとおりです。

この修飾子を使用する場合、オプションを指定する必要があります。

この修飾子のどの形式も使用しない場合、Transaction_Type=Automatic修飾子がデフォルトです。この修飾子は、統計情報の収集に使用されるトランザクション・モードをOracle RMUで決定するよう指定します。データベース内の記憶領域(統計情報の収集でアクセスされないものも含む)でスナップショットが無効の場合、データの収集に使用されるトランザクションは、読取り/書込みモードに設定されます。そうでない場合は、データを収集するトランザクションは読取り専用モードに設定されます。

Transaction_Type=Read_Only修飾子は、統計情報の収集に使用されるトランザクションを読取り専用モードに設定するよう指定します。トランザクション・タイプを明示的に読取り専用に指定する場合、データベース内のすべての記憶領域でスナップショットが有効である必要はありませんが、統計情報が収集される記憶領域では有効である必要があります。そうでない場合、エラーが返され、オプティマイザ統計情報の収集操作は失敗します。

すべての記憶領域でスナップショットが有効になっておらず、スナップショットが有効な記憶領域でのみ統計情報を収集する場合、このオプションを選択します。この場合、Transaction_Type=Read_Only修飾子を使用することによって、統計情報が収集され、データベースの他のユーザーに対しては最小限のロックが課されます。

Transaction_Type=Noread_Only修飾子は、統計情報の収集に使用されるトランザクションを読取り/書込みモードに設定するよう指定します。読取り専用トランザクションで起こるスナップショット・ファイルの増大化を避け、読取り/書込みトランザクションで起こるロックの増加というコストを甘受できる場合、このオプションを選択します。


使用上の注意

表1-7 オプティマイザ統計情報の格納に使用されるシステム表
統計 システム表名 列名
表カーディナリティ RDB$RELATIONS RDB$CARDINALITY
表の行クラスタ化係数 RDB$RELATIONS RDB$ROW_CLUSTER_FACTOR
列グループ重複係数 RDB$WORKLOAD RDB$DUPLICITY_FACTOR
列グループNULL係数 RDB$WORKLOAD RDB$NULL_FACTOR
索引カーディナリティ RDB$INDICES RDB$CARDINALITY
索引接頭辞カーディナリティ RDB$INDEX_SEGMENTS RDB$CARDINALITY
索引の平均の深さ
(Bツリーのみ)
RDB$INDICES RDB$INDEX_DEPTH
索引キー・クラスタ化係数 RDB$INDICES RDB$KEY_CLUSTER_FACTOR
索引データ・クラスタ化係数 RDB$INDICES RDB$DATA_CLUSTER_FACTOR


例1

次の例では、EMPLOYEESおよびJOB_HISTORY表とこれに関連付けられている索引のカーディナリティ統計情報が収集されます。索引接頭辞カーディナリティに対する値0の説明は「使用上の注意」を参照してください。


$ RMU/COLLECT OPTIMIZER_STATISTICS mf_personnel.rdb -
_$ /STATISTICS=(CARDINALITY)/TABLES=(EMPLOYEES, JOB_HISTORY) -
_$ /INDEXES=(EMP_LAST_NAME,EMP_EMPLOYEE_ID, EMPLOYEES_HASH, -
_$  JH_EMPLOYEE_ID, JOB_HISTORY_HASH)/LOG
Start loading tables... at  3-JUL-1996 09:35:25.19
Done loading tables.... at  3-JUL-1996 09:35:25.91
Start loading indexes... at  3-JUL-1996 09:35:25.92
Done loading indexes.... at  3-JUL-1996 09:35:26.49
Start collecting btree index stats... at  3-JUL-1996 09:35:28.17
Done collecting btree index stats.... at  3-JUL-1996 09:35:28.23
Start collecting table & hash index stats... at  3-JUL-1996 09:35:28.23
Done collecting table & hash index stats.... at  3-JUL-1996 09:35:28.52
Start calculating stats... at  3-JUL-1996 09:35:28.76
Done calculating stats.... at  3-JUL-1996 09:35:28.76
Start writing stats... at  3-JUL-1996 09:35:30.16
----------------------------------------------------------------------

Optimizer Statistics collected for table : EMPLOYEES

  Cardinality            : 100

Index name : EMP_LAST_NAME
  Index Cardinality      : 83
  Segment Column                 Prefix cardinality
    LAST_NAME                       0

Index name : EMP_EMPLOYEE_ID
  Index Cardinality      : 100
  Segment Column                 Prefix cardinality
    EMPLOYEE_ID                     0

Index name : EMPLOYEES_HASH
  Index Cardinality      : 100

----------------------------------------------------------------------

Optimizer Statistics collected for table : JOB_HISTORY

  Cardinality            : 274

Index name : JH_EMPLOYEE_ID
  Index Cardinality      : 100
  Segment Column                 Prefix cardinality
    EMPLOYEE_ID                     0

Index name : JOB_HISTORY_HASH
  Index Cardinality      : 100
Done writing stats.... at  3-JUL-1996 09:35:30.83

例2

次の例では、EMPLOYEESおよびJOB_HISTORY表とこれに関連付けられている索引の記憶域統計情報が収集されます。


$ RMU/COLLECT OPTIMIZER_STATISTICS mf_personnel -
_$ /STATISTICS=(STORAGE)/TABLES=(EMPLOYEES, JOB_HISTORY) -
_$ /INDEXES=(EMP_LAST_NAME,EMP_EMPLOYEE_ID, EMPLOYEES_HASH, -
_$ JH_EMPLOYEE_ID, JOB_HISTORY_HASH)/LOG
Start loading tables... at  3-JUL-1996 10:28:49.39
Done loading tables.... at  3-JUL-1996 10:28:50.30
Start loading indexes... at  3-JUL-1996 10:28:50.30
Done loading indexes.... at  3-JUL-1996 10:28:51.03
Start collecting btree index stats... at  3-JUL-1996 10:28:53.27
Done collecting btree index stats.... at  3-JUL-1996 10:28:53.37
Start collecting table & hash index stats... at  3-JUL-1996 10:28:53.38
Done collecting table & hash index stats.... at  3-JUL-1996 10:28:53.80
Start calculating stats... at  3-JUL-1996 10:28:54.07
Done calculating stats.... at  3-JUL-1996 10:28:54.07
Start writing stats... at  3-JUL-1996 10:28:55.61
----------------------------------------------------------------------

Optimizer Statistics collected for table : EMPLOYEES

  Row clustering factor  : 0.2550000

Index name : EMP_LAST_NAME
  Average Depth          : 2.0000000
  Key clustering factor  : 0.0481928
  Data clustering factor : 1.1686747

Index name : EMP_EMPLOYEE_ID
  Average Depth          : 2.0000000
  Key clustering factor  : 0.0100000
  Data clustering factor : 0.9500000

Index name : EMPLOYEES_HASH
  Key clustering factor  : 1.0000000
  Data clustering factor : 1.0000000

--------------------------------------------------------------------

Optimizer Statistics collected for table : JOB_HISTORY

  Row clustering factor  : 0.0930657

Index name : JH_EMPLOYEE_ID
  Average Depth          : 2.0000000
  Key clustering factor  : 0.0500000
  Data clustering factor : 0.9500000

Index name : JOB_HISTORY_HASH
  Key clustering factor  : 1.0000000
  Data clustering factor : 1.0000000
Done writing stats.... at  3-JUL-1996 10:28:56.41

例3

次の例では、SQL ALTER DATABASE文を使用して作業負荷の収集を有効にします。頻繁に実行される問合せを実行して作業負荷プロファイルを生成し、EMPLOYEESおよびJOB_HISTORY表(および関連付けられている索引)の作業負荷統計情報が収集されます。収集された統計情報が表示されます。

SQLの自然左側外部結合によって、1番目と3番目の作業負荷列グループが作成されます。SQL DISTINCT句によって、2番目と4番目の作業負荷列グループが作成されます。


$ ! Enable workload collection:
$ SQL
SQL> ALTER DATABASE FILENAME mf_personnel.rdb
cont> WORKLOAD COLLECTION IS ENABLED;
SQL> --
SQL> -- Execute frequently run SQL queries.
SQL> --
SQL> ATTACH 'FILENAME mf_personnel.rdb';
SQL> SELECT DISTINCT *
cont> FROM JOB_HISTORY NATURAL LEFT OUTER JOIN EMPLOYEES;
   .
   .
   .
SQL> DISCONNECT DEFAULT;
SQL> -- Disable workload collection:
SQL> ALTER DATABASE FILENAME mf_personnel.rdb
cont> WORKLOAD COLLECTION IS DISABLED;
SQL> EXIT;
$
$ ! Direct  Oracle RMU  to collect statistics for the EMPLOYEES and
$ ! JOB_HISTORY tables.
$ !
$ RMU/COLLECT OPTIMIZER_STATISTICS mf_personnel.rdb -
_$ /TABLE=(EMPLOYEES, JOB_HISTORY)/STATISTICS=(WORKLOAD)/LOG
Start loading tables... at  3-JUL-1996 10:40:00.22
Done loading tables.... at  3-JUL-1996 10:40:00.90
Start collecting workload stats... at  3-JUL-1996 10:40:03.43
Maximum memory required (bytes) = 6810
Done collecting workload stats.... at  3-JUL-1996 10:40:05.03
Start calculating stats... at  3-JUL-1996 10:40:05.32
Done calculating stats.... at  3-JUL-1996 10:40:05.32
Start writing stats... at  3-JUL-1996 10:40:06.91

----------------------------------------------------------------------

Optimizer Statistics collected for table : EMPLOYEES


  Workload Column group  :      EMPLOYEE_ID
  Duplicity factor       : 1.0000000
  Null factor            : 0.0000000

  Workload Column group  : LAST_NAME,   FIRST_NAME,     MIDDLE_INITIAL,
ADDRESS_DATA_1, ADDRESS_DATA_2, CITY,   STATE,  POSTAL_CODE,    SEX,
BIRTHDAY,       STATUS_CODE
  Duplicity factor       : 1.5625000
  Null factor            : 0.3600000

----------------------------------------------------------------------
Optimizer Statistics collected for table : JOB_HISTORY


  Workload Column group  :      EMPLOYEE_ID
  Duplicity factor       : 2.7040000
  Null factor            : 0.0000000

  Workload Column group  : EMPLOYEE_ID,    JOB_CODE,       JOB_START,
JOB_END,        DEPARTMENT_CODE,        SUPERVISOR_ID
  Duplicity factor       : 1.5420582
  Null factor            : 0.3649635
Done writing stats.... at  3-JUL-1996 10:40:07.46

例4

次の例では、システム・リレーション以外のデータベースのすべての表と索引のすべての統計情報(カーディナリティ、作業負荷、記憶域)が収集されます。出力は、ファイルstats_nosys.logに書き込まれます。


$ RMU/COLLECT OPTIMIZER_STATISTICS mf_personnel.rdb -
_$ /LOG=stats_nosys.log

例5

次の例では、すべての表、索引およびシステム・リレーションのすべての統計情報(カーディナリティ、作業負荷、記憶域)が収集されます。出力は、ファイルstats_all.logに書き込まれます。


$ RMU/COLLECT OPTIMIZER_STATISTICS mf_personnel.rdb/SYSTEM_RELATIONS -
_$ /LOG=stats_all.log

例6

次の例では、統計情報の収集からEmployeesおよびDepartments表が除外されます。


$ RMU/COLLECT OPTIMIZER_STATISTICS MF_PERSONNEL /LOG -
_$ /EXCLUDE_TABLES=(EMPLOYEES,DEPARTMENTS)