159 DBMS_STATS

DBMS_STATSパッケージを使用すると、データベース・オブジェクト用に収集したオプティマイザの統計情報を表示および変更できます。

ユーザーは、DBMS_STATSパッケージを使用して、グローバル一時表(GTT)の統計情報を収集することもできます。ただし、DBMS_STATSではプライベート一時表(PTT)の統計情報は収集できません。

この章のトピックは、次のとおりです:

159.1 DBMS_STATSの概要

パフォーマンスを向上させるために、データベースを使用して多くのタイプの統計情報を収集できます。このパッケージは、オプティマイザ統計情報にのみ関連しています。デフォルトでは、データベースにより統計情報が自動的に収集されるため、このパッケージは特殊な場合のみに使用します。

オプティマイザ統計情報は、ユーザーのスキーマに作成したデータ・ディクショナリや表に常駐させることができます。また、このパッケージを使用して、表およびドメイン索引に関するユーザー定義の統計情報を収集および管理できます。たとえば、関連性が定義されている列に対してDELETE_COLUMN_STATSプロシージャを起動すると、この列にあるユーザー定義の統計情報と標準的な統計情報の両方が削除されます。

コストベースのオプティマイザに影響を与える統計情報は、ディクショナリに格納されている統計情報のみです。また、DBMS_STATSを使用して、並列的に統計情報を収集できます。

Oracle Database 12cリリース2 (12.2)以降では、オプティマイザ統計アドバイザは、統計収集プロセスを調査し、統計を収集する既存のプラクティスの問題を自動的に診断し、結果および推奨事項のレポートを生成します。アドバイザ・タスクがメンテナンス・ウィンドウで自動的に実行されますが、必要に応じて実行することもできます。

参照:

オプティマイザ統計情報の管理方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.2 DBMS_STATSの推奨されないサブプログラム

推奨されないサブプログラムは、使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

Oracle Database 11gリリース2 (11.2)以降では、次のサブプログラムが廃止されました。

Oracle Database 12c以降では、次のサブプログラムの使用は推奨されていません。

159.3 DBMS_STATSのタイプ

ヒストグラム、失効した表、統計情報の違いのレポート、およびオプティマイザ統計アドバイザのDBMS_STATSタイプは、次のとおりです。

ヒストグラム

最小値と最大値およびヒストグラム終点のタイプは、次のとおりです。

TYPE numarray  IS VARRAY(2050) OF NUMBER;
TYPE datearray IS VARRAY(2050) OF DATE;
TYPE chararray IS VARRAY(2050) OF VARCHAR2(4000);
TYPE rawarray  IS VARRAY(2050) OF RAW(2000);
TYPE fltarray  IS VARRAY(2050) OF BINARY_FLOAT;
TYPE dblarray  IS VARRAY(2050) OF BINARY_DOUBLE;

失効した表

失効した表を表示するタイプは、次のとおりです。

TYPE ObjectElem IS RECORD (
  ownname     VARCHAR2(30),     -- owner
  objtype     VARCHAR2(6),      -- 'TABLE' or 'INDEX'
  objname     VARCHAR2(30),     -- table/index
  partname    VARCHAR2(30),     -- partition
  subpartname VARCHAR2(30));    -- subpartition
TYPE ObjectTab IS TABLE OF ObjectElem;

統計情報の違いのレポート

統計情報の違いのレポートを表示するには、次のタイプを使用します。

TYPE DiffRepElem IS RECORD (
  report      CLOB,            -- stats difference report
  maxdiffpct  NUMBER);         -- max stats difference (percentage)
TYPE DiffRepTab IS TABLE OF DiffRepElem; 

オプティマイザ統計アドバイザ

次のタイプにより、統計情報を収集できるデータベース・オブジェクトが表現されます。

TYPE ObjectElem IS RECORD (
  ownname     dbms_quoted_id, -- owner
  objtype     VARCHAR2(6), -- 'TABLE' or 'INDEX'
  objname     dbms_quoted_id, -- table/index
  partname    dbms_quoted_id, -- partition
  subpartname dbms_quoted_id -- subpartition
);
TYPE ObjectTab IS TABLE OF ObjectElem;

ノート:

ObjectElemタイプが変更された場合は、必ずsatisfy_obj_filterをメンテナンスします。

次のタイプにより、操作が表現されます。

TYPE StatsAdvOpr IS RECORD (
  name  VARCHAR2(64), -- name of the operation
  param VARCHAR2(4000)
); -- XML containing parameters and their values
TYPE StatsAdvOprTab IS TABLE OF StatsAdvOpr;

次のタイプにより、フィルタ・リストが表現されます。

TYPE StatsAdvFilter IS RECORD (
  rulename VARCHAR2(64),   -- rule name
  objlist  ObjectTab,      -- object filter list
  oprlist  StatsAdvOprTab, -- operation filter list
  include  BOOLEAN);       -- include/exclude elements in the list
TYPE StatsAdvFilterTab IS TABLE OF StatsAdvFilter;

159.4 DBMS_STATSの定数

DBMS_STATSパッケージは、パラメータ値の指定に使用するいくつかの定数を定義します。

表159-1 DBMS_STATSの定数

名前 タイプ 説明

ADD_GLOBAL_PREFS

NUMBER

グローバル・プリファレンスをコピーします。

AUTO_CASCADE

BOOLEAN

索引の統計情報を収集するかどうかを選択できます。

AUTO_DEGREE

NUMBER

オブジェクトのサイズ、CPU数および初期化パラメータを基に並列度を選択できます。

AUTO_INVALIDATE

BOOLEAN

Oracleで依存カーソルを無効化するタイミングを決定できます。

AUTO_SAMPLE_SIZE

NUMBER

自動サンプル・サイズのアルゴリズムを使用することを示します。

PURGE_ALL

TIMESTAMPWITHTIMEZONE

PURGE_STATSプロシージャに渡すことが可能で、すべての履歴統計を無条件に削除するフラグ。削除では、統計の履歴を保持する様々なディクショナリ統計表に対してTRUNCATE文が使用されます。

RECLAIM_SYNOPSIS

TIMESTAMPWITHTIMEZONE

シノプシス表領域の再要求に使用される定数。

159.5 DBMS_STATSの操作上のノート

DBMS_STATSパッケージを使用する際は次の操作上のノートに従ってください。

DBMS_STATSサブプログラムでは、次に示す一般的な操作を実行します。

ほとんどのDBMS_STATSプロシージャには、statownstattabおよびstatidの3つのパラメータが含まれています。これらのパラメータによって、ユーザーはオプティマイザに影響を与えない自分自身の表(ディクショナリ外)に統計情報を格納できます。したがって、ユーザーは統計情報のセットをメンテナンスおよび試用することができます。

stattabパラメータは、統計情報を保持する表の名前を指定し、この表は、(statownパラメータが指定されていないかぎり)統計情報が収集されるオブジェクトと同じスキーマ内に常駐しているとみなされます。異なるstattab識別子で複数の表を作成し、統計情報セットを別々に保持できます。

さらに、statidパラメータを使用して1つのstattab内で複数の統計情報セットをメンテナンスできるため、ユーザーのスキーマが混乱するのを回避できます。

SETおよびGETプロシージャでは、stattabを指定しない場合(つまりNULLの場合)、操作はディクショナリ統計上で直接動作するため、ディクショナリを直接変更することだけが目的の場合は、これらの統計表を作成する必要はありません。ただし、stattabNULLでない場合、SETまたはGET操作は、ディクショナリではなく、指定したユーザー統計表に対して行われます。

SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用して、DBMS_STATSプロシージャのいくつかのパラメータのデフォルト値を変更できます。

このパッケージのほとんどのプロシージャは、現行のトランザクションをコミットし、操作を実行してから再度コミットします。

ほとんどのプロシージャには、統計情報のロックを無視できるforceパラメータがあります。ディクショナリ内で統計が変更されるたびに、後でリストアできるように前のバージョンの統計が自動的に保存されます。

オプティマイザ統計情報の収集

次のサブプログラムを使用して、特定のクラスのオプティマイザ統計情報を収集し、ANALYZEコマンドの潜在的なパフォーマンスを向上させます。

GATHER_*プロシージャは、列およびドメイン索引に関するユーザー定義の統計情報も収集します。

statownstattabおよびstatidの各パラメータは、パッケージに対して、新規の統計情報を収集する前に、指定した表内の現行の統計情報をバックアップするように指示します。

関連オブジェクトに十分な統計情報がある場合、導出オブジェクトの統計情報を生成するために、Oracleは次のプロシージャも提供します。

GENERATE_STATSプロシージャ

統計情報の設定または取得

次のサブプログラムを使用して、個別の列、索引および表に関連する統計情報を格納および取り出します。

ユーザー定義の統計情報を設定する特別バージョンのSET_*_STATSプロシージャでは、次の情報(提供された場合)がディレクトリまたはユーザー統計表に格納されます。

  • ユーザー定義の統計情報

  • 統計タイプの所有者

  • 統計タイプの名前。

ユーザー定義の統計情報と対応する統計タイプは、USTATS$ディクショナリ表に挿入されます。ユーザー定義の統計情報は、統計タイプ名の指定なしに指定できます。

特別バージョンのGET_*_STATSプロシージャは、ユーザー定義の統計情報および統計タイプの所有者と名前を、指定したスキーマ・オブジェクトに対応するOUT引数として戻します。ユーザー定義の統計情報が収集されていない場合は、NULL値が戻ります。

統計情報の削除

DELETE_*プロシージャは、ユーザー定義の統計情報、および指定したスキーマ・オブジェクトに関する標準的な統計情報の両方を削除します。

ノート:

Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

統計情報のロックまたはロック解除

オブジェクトの統計情報をロックおよびロック解除するには、次のプロシージャを使用します。

LOCK_*プロシージャは、統計情報の現在のセットをアクセス制限するか、統計情報を不変のままにします。表の統計情報がロックされている場合、表統計情報、列統計情報、ヒストグラムおよび統計情報など、すべての依存索引に関する情報も含めて、表に依存するすべての統計情報はロックされているとみなされます。

統計履歴のリストアおよびパージ

指定したタイムスタンプの統計情報をリストアするには、次のプロシージャを使用します。これは、新規に収集された統計では不適切な実行計画が作成され、管理者が前の統計セットに戻す必要がある場合に役立ちます。

ディクショナリ内で統計が変更されるたびに、後でリストアできるように前のバージョンの統計が自動的に保存されます。古い統計情報は、統計履歴のリテンション設定とシステムで実行された最新の統計情報収集の時間に基づいて、一定の周期で自動的にパージされます。ALTER_STATS_HISTORY_RETENTIONプロシージャを使用して、保存を設定できます。

この他、DBMS_STATSプロシージャで統計情報のリストアに関連するものには、次のものがあります。

RESTORE_*操作は、ユーザー定義の統計情報ではサポートされていません。

ユーザー定義の統計情報

DBMS_STATSパッケージは、ユーザー定義の統計情報に関する操作をサポートしています。ドメイン索引または列が(associateを使用して)統計タイプに関連付けられている場合は、索引または列に関する操作によって、ユーザー定義の統計情報が操作されます。たとえば、GET_INDEX_STATSプロシージャを使用して(統計タイプに関連付けられている)ドメイン索引の統計情報を収集すると、関連付けられている統計タイプに対応するユーザー定義の統計情報収集メソッドが起動されます。同様に、削除、転送、インポートおよびエクスポートの各操作によって、ユーザー定義の統計情報が操作されます。

ユーザー定義の統計情報に対するSET_*およびGET_*操作も、列および索引に対する特別バージョンのSETおよびGETインタフェースを使用してサポートされます。

EXPORT_*IMPORT_*およびRESTORE_*操作は、ユーザー定義の統計情報ではサポートされていません。

保留中の統計情報

デフォルトでは、このパッケージは統計情報を収集してディクショナリに格納します。ユーザーは、SET*PREFSプロシージャを使用してPUBLISHオプションをFALSEにすることによって、これらの統計情報を、ディクショナリではなくシステムのプライベート・エリアに格納できます。PUBLISHのデフォルト値はTRUEです。プライベート領域に格納された統計情報は、パラメータoptimizer_use_pending_statisticsTRUEに設定されないかぎり、コスト・ベース・オプティマイザでは使用されません。このパラメータのデフォルト値はFALSEで、このブール・パラメータは、セッション/システム・レベルで設定できます。ユーザーは、セッションの保留中の統計情報を使用することによって、クエリー・プランに対する新しい統計情報の影響を確認できます。

保留中の統計情報には、新しい統計情報を一般的に使用できるようにする前にクエリー・プランに対するそれらの統計情報の影響を確認するメカニズムが用意されています。クエリー・プランを確認するには、次の2つの方法があります。

  • 保留中の統計情報を(EXPORT_PENDING_STATSプロシージャを使用して)テスト・システムにエクスポートし、問合せワークロードを実行してパフォーマンスまたは計画をチェックします。

  • 保留中の統計情報が収集されたシステムのセッションでoptimizer_use_pending_statisticsTRUEに設定し、ワークロードを実行してパフォーマンスまたは計画をチェックします。

パフォーマンスまたはクエリー・プランの確認後、パフォーマンスに問題がない場合は、PUBLISH_PENDING_STATSプロシージャを使用して保留中の統計情報をパブリッシュできます。問題がある場合は、DELETE_PENDING_STATSプロシージャを使用して保留中の統計情報を削除できます。

保留中の統計情報は、パブリッシュ、エクスポートまたは削除できます。保留中の統計情報を管理するために、次のプロシージャが用意されています。

統計情報の比較

DIFF_TABLE_STATS_*統計情報を使用すると、2つの異なるソースの表の統計情報を比較できます。統計情報のソースは、次のいずれかです。

  • 2つの異なるユーザー統計表

  • statidsを使用して識別可能な2つの統計情報のセットが含まれている単一のユーザー統計表

  • ユーザー統計表とディクショナリ履歴

  • 保留中の統計情報

これらのファンクションでは、依存オブジェクト(索引、列、パーティション)の統計情報も比較します。これらの統計間の差分が特定のしきい値を超える場合、両方のソースのオブジェクトの統計が表示されます。しきい値は、デフォルトが10%で、ファンクションの引数として指定できます。データベースでは、最初のソース(stattab1またはtime1)に対応する統計情報が、差分のパーセントを計算する基礎として使用されます。

拡張統計情報

このパッケージでは、列グループおよび式の統計情報の収集を実行できます。列グループおよび式に対して収集された統計情報は、拡張統計情報と呼ばれます。

列グループの統計情報は、列間の相関関係の評価のためにオプティマイザによって使用されます。たとえば、問合せにc1=1およびc2=1という述語が含まれ、列グループ(c1, c2)に関する統計がある場合、オプティマイザは、これらの統計を使用して述語の組合せのカーディナリティを見積もります。オプティマイザは、式の統計を使用してその式の述語のカーディナリティを見積もります。拡張統計情報は、列の統計情報に似ています。列名を取るプロシージャは列名のかわりに拡張統計情報名を受け入れます。

関連サブプログラム:

オプティマイザ統計アドバイザ

オプティマイザ統計アドバイザは、オプティマイザ統計情報を管理するベスト・プラクティスを使用する上で役立つ組込みの診断ソフトウェアです。アドバイザは、現在統計を収集している方法(手動のスクリプトの使用、明示的なパラメータの設定など)、既存の統計収集ジョブの効果および収集された統計の品質を分析します。アドバイザで、検出したすべての問題の検索結果が生成されます。これらの検索結果に基づいて、アドバイザは、DBA_ADVISOR_RECOMMENDATIONSに推奨事項を格納します。

アドバイザは、次のクラスにルールを編成します。

  • システム

    このクラスは、統計収集のプリファレンス、自動統計収集ジョブのステータス、SQL計画ディレクティブの使用などを確認します。このクラスのルールでは、V$STATS_ADVISOR_RULES.RULE_TYPESYSTEM値があります。

  • 操作

    このクラスは、統計収集がデフォルトを使用しているか、テスト統計がSET_*_STATSプロシージャなどを使用して作成されているかを確認します。このクラスのルールでは、V$STATS_ADVISOR_RULES.RULE_TYPEOPERATION値があります。

  • オブジェクト

    このクラスは、統計の品質、統計の失効、統計の不要な収集などを確認します。このクラスのルールでは、V$STATS_ADVISOR_RULES.RULE_TYPEOBJECT値があります。

すべてのオプティマイザ統計アドバイザのサブプログラムで、ADVISOR権限が必要になります。すべてのプロシージャおよびファンクションは、タスク所有者の権限ではなく、操作の実行者の権限を使用して実行されます。たとえば、ANALYZE ANY DICTIONARY権限のないユーザーがタスクt1を作成し、その後DBAがこのタスクを実行すると、タスク実行でSYSオブジェクトがチェックされます。別の例としては、user1によって実行され、中断されて、user2によって再開されるタスクがあります。この場合、再開された実行のチェックは、user1ではなくuser2の権限に基づきます。

次のサブプログラムを使用すると、オプティマイザ統計アドバイザを管理できます。

参照:

オプティマイザ統計アドバイザを使用して統計情報を分析する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.6 DBMS_STATSのデータ構造

DBMS_STATSパッケージは、レコード・タイプを定義します。

レコード・タイプ

159.6.1 DBMS_STATS STAT_RECレコード・タイプ

このレコード・タイプは、ユーザーが列の統計を手動で設定する場合のために提供されています。フィールドを使用して、列の最小/最大値、および列のヒストグラムを指定できます。

構文

TYPE STATREC IS RECORD (
  epc    NUMBER,
  minval RAW(2000),
  maxval RAW(2000),
  bkvals NUMARRAY,
  novals NUMARRAY,
  chvals CHARARRAY,
  eavals RAWARRAY,
  rpcnts NUMARRAY,
  eavs   NUMBER);

COMPARISON_TYPEレコード・タイプのフィールド(STAT_RECの属性)

表159-2 STAT_RECの属性

フィールド 説明

epc

ヒストグラム内のバケット数

minval

最小値

maxval

最大値

bkvals

バケット数の配列

novals

正規化エンドポイント値の配列

chvals

ダンプされたエンドポイント値の配列

eavals

エンドポイント実際値の配列

rpcnts

エンドポイント値の頻度の配列

eavs

実際のエンドポイント値がヒストグラムで必要になるかどうかを示す数値。PREPARE_COLUMN_VALUESプロシージャを使用している場合、このフィールドは自動的に入力されます。

159.7 DBMS_STATSサブプログラムの要約

この表は、DBMS_STATSサブプログラムを示し、簡単に説明しています。

表159-3 DBMS_STATSパッケージのサブプログラム

サブプログラム 説明

ALTER_STATS_HISTORY_RETENTIONプロシージャ

統計履歴のリテンション値を変更します。

CANCEL_ADVISOR_TASKプロシージャ

オプティマイザ統計アドバイザの実行を取り消します。

CONFIGURE_ADVISOR_FILTERファンクション

オプティマイザ統計アドバイザ・タスクのフィルタ・リストを構成します。

CONFIGURE_ADVISOR_OBJ_FILTERファンクション

オプティマイザ統計アドバイザ・タスクのオブジェクト・フィルタを構成します。

CONFIGURE_ADVISOR_OPR_FILTERファンクション

オプティマイザ統計アドバイザ・タスクの操作フィルタを構成します。

CONFIGURE_ADVISOR_RULE_FILTERファンクション

オプティマイザ統計アドバイザ・タスクのルール・フィルタを構成します。

CREATE_ADVISOR_TASKファンクション

オプティマイザ統計アドバイザのアドバイザ・タスクを作成します。

CONVERT_RAW_VALUEプロシージャ

最小値、最大値またはヒストグラム終点の実際の値の内部表記を、データ・タイプ固有の値に変換します。

CONVERT_RAW_VALUE_NVARCHARプロシージャ

最小値、最大値またはヒストグラム終点の実際の値の内部表記を、データ・タイプ固有の値に変換します。

CONVERT_RAW_VALUE_ROWIDプロシージャ

最小値、最大値またはヒストグラム終点の実際の値の内部表記を、データ・タイプ固有の値に変換します。

COPY_TABLE_STATSプロシージャ

スケーリング後に、ソース・(サブ・)パーティションの統計情報を宛先(サブ・)パーティションにコピーします。

CREATE_EXTENDED_STATSファンクション

ユーザー指定の列グループまたは式の仮想列を表に作成します。

CREATE_STAT_TABLEプロシージャ

統計情報を保持できるownnameのスキーマにstattabの名前で表を作成します。

DELETE_COLUMN_STATSプロシージャ

列に関連する統計情報を削除します。

DELETE_DATABASE_PREFSプロシージャ

すべての表の統計プリファレンスを削除します。

DELETE_DATABASE_STATSプロシージャ

データベース全体に関する統計情報を削除します。

DELETE_DICTIONARY_STATSプロシージャ

すべてのディクショナリのスキーマ(SYSSYSTEMおよびデータベース・コンポーネントのスキーマ)に関する統計情報を削除します。

DELETE_FIXED_OBJECTS_STATSプロシージャ

すべての固定表の統計情報を削除します。

DELETE_INDEX_STATSプロシージャ

索引に関連する統計情報を削除します。

DELETE_PENDING_STATSプロシージャ

収集され、パブリッシュされなかったプライベート統計を削除します。

DELETE_PROCESSING_RATEプロシージャ

指定した統計情報のソースの処理速度を削除します。ソースが指定されていない場合、すべてのソースの統計情報が削除されます。

DELETE_SCHEMA_PREFSプロシージャ

指定した所有者名で所有されているすべての表の統計プリファレンスを削除します。

DELETE_SCHEMA_STATSプロシージャ

スキーマに関連する統計情報を削除します。

DELETE_SYSTEM_STATSプロシージャ

システムの統計情報を削除します。

DELETE_TABLE_PREFSプロシージャ

指定したスキーマ内の指定した表の統計プリファレンスを削除します。

DELETE_TABLE_STATSプロシージャ

表に関連する統計情報を削除します。

DIFF_TABLE_STATS_IN_HISTORYファンクション

過去の2つのタイムスタンプからの表の統計情報の比較、およびそれらのタイムスタンプの時点の統計情報の比較を行います。

DIFF_TABLE_STATS_IN_PENDINGファンクション

保留中の統計情報とタイムスタンプの時点の統計情報またはディクショナリの統計情報を比較します。

DIFF_TABLE_STATS_IN_STATTABファンクション

2つの異なるソースの表の統計情報を比較します。

DROP_ADVISOR_TASKプロシージャ

指定したオプティマイザ統計アドバイザ・タスクを削除します。

DROP_EXTENDED_STATSプロシージャ

ユーザー指定の拡張に対して作成された統計情報エントリを削除します。

DROP_STAT_TABLEプロシージャ

CREATE_STAT_TABLEで作成したユーザー統計表を削除します。

EXECUTE_ADVISOR_TASKファンクション

以前に作成されたオプティマイザ統計アドバイザ・タスクを実行します

EXPORT_COLUMN_STATSプロシージャ

特定の列に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

EXPORT_DATABASE_PREFSプロシージャ

すべての表の統計プリファレンスをエクスポートします。

EXPORT_DATABASE_STATSプロシージャ

データベース内のすべてのオブジェクトに関する統計情報を取り出し、statown.stattabで識別されるユーザー統計表に格納します。

EXPORT_DICTIONARY_STATSプロシージャ

すべてのディクショナリのスキーマ('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

EXPORT_FIXED_OBJECTS_STATSプロシージャ

固定表に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

EXPORT_INDEX_STATSプロシージャ

特定の索引に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

EXPORT_PENDING_STATSプロシージャ

保留中として収集および格納された統計情報をエクスポートします。

EXPORT_SCHEMA_PREFSプロシージャ

指定した所有者名で所有されているすべての表の統計プリファレンスをエクスポートします。

EXPORT_SCHEMA_STATSプロシージャ

ownnameで識別されるスキーマ内のすべてのオブジェクトに関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

EXPORT_SYSTEM_STATSプロシージャ

システムの統計情報を取り出し、ユーザー統計表に格納します。

EXPORT_TABLE_PREFSプロシージャ

指定したスキーマ内の指定した表の統計プリファレンスを、指定した統計表にエクスポートします。

EXPORT_TABLE_STATSプロシージャ

特定の表に関する統計情報を取り出し、ユーザー統計表に格納します。

FLUSH_DATABASE_MONITORING_INFOプロシージャ

インメモリーのすべての表の監視情報をディクショナリにフラッシュします。

GATHER_DATABASE_STATSプロシージャ

データベース内のすべてのオブジェクトに関する統計情報を収集します。

GATHER_DICTIONARY_STATSプロシージャ

ディクショナリのスキーマ('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)に関する統計情報を収集します。

GATHER_FIXED_OBJECTS_STATSプロシージャ

固定オブジェクトの統計情報を収集します。

GATHER_INDEX_STATSプロシージャ

索引の統計情報を収集します。

GATHER_PROCESSING_RATEプロシージャ

interval分後に終了する処理率の収集ジョブを開始します。

GATHER_SCHEMA_STATSプロシージャ

スキーマ内のすべてのオブジェクトに関する統計情報を収集します。

GATHER_SYSTEM_STATSプロシージャ

システムの統計情報を収集します。

GATHER_TABLE_STATSプロシージャ

表と列(および索引)の統計情報を収集します。

GENERATE_STATSプロシージャ

関連するオブジェクトに関して以前に収集した統計情報から、オブジェクトの統計情報を生成します。

GET_ADVISOR_OPR_FILTERプロシージャ

オプティマイザ統計アドバイザ操作の操作フィルタを作成します。

GET_ADVISOR_RECSファンクション

指定された項目の推奨レポートを生成します。

GET_COLUMN_STATSプロシージャ

列に関連するすべての情報を取得します。

GET_INDEX_STATSプロシージャ

索引に関連するすべての情報を取得します。

GET_PARAMファンクション

DBMS_STATSプロシージャのパラメータのデフォルト値を取得します(「DBMS_STATSの推奨されないサブプログラム」を参照)。

GET_PREFSファンクション

指定したプリファレンスのデフォルト値を取得します。

GET_STATS_HISTORY_AVAILABILITYファンクション

統計履歴を使用できる最も古いタイムスタンプを取得します。

GET_STATS_HISTORY_RETENTIONファンクション

現在の統計履歴のリテンション値を戻します。

GET_SYSTEM_STATSプロシージャ

stattab(stattabNULLの場合はディクショナリ)からシステムの統計情報を取得します。

GET_TABLE_STATSプロシージャ

表に関連するすべての情報を取得します。

IMPLEMENT_ADVISOR_TASKファンクション

オプティマイザ統計アドバイザによって作成された推奨事項を実装します。

IMPORT_COLUMN_STATSプロシージャ

stattabで識別されるユーザー統計表から特定の列に関する統計情報を取り出し、ディクショナリに格納します。

IMPORT_DATABASE_PREFSプロシージャ

すべての表の統計プリファレンスをインポートします。

IMPORT_DATABASE_STATSプロシージャ

データベース内のすべてのオブジェクトに関する統計情報をユーザー統計表から取り出し、ディクショナリに格納します。

IMPORT_DICTIONARY_STATSプロシージャ

すべてのディクショナリのスキーマ('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)に関する統計情報をユーザー統計表から取り出し、ディクショナリに格納します。

IMPORT_FIXED_OBJECTS_STATSプロシージャ

stattabで識別されるユーザー統計表から固定表に関する統計情報を取り出し、ディクショナリに格納します。

IMPORT_INDEX_STATSプロシージャ

stattabで識別されるユーザー統計表から特定の索引に関する統計情報を取り出し、ディクショナリに格納します。

IMPORT_SCHEMA_PREFSプロシージャ

指定した所有者名で所有されているすべての表の統計プリファレンスをインポートします。

IMPORT_SCHEMA_STATSプロシージャ

ownnameで識別されるスキーマ内のすべてのオブジェクトに関する統計情報をユーザー統計表から取り出し、ディクショナリに格納します。

IMPORT_SYSTEM_STATSプロシージャ

ユーザー統計表からシステムの統計情報を取り出し、ディクショナリに格納します。

IMPORT_TABLE_PREFSプロシージャ

指定したスキーマ内の指定した表の統計プリファレンスを設定します。

IMPORT_TABLE_STATSプロシージャ

stattabで識別されるユーザー統計表から特定の表に関する統計情報を取り出し、ディクショナリに格納します。

INTERRUPT_ADVISOR_TASKプロシージャ

現在実行しているオプティマイザ統計アドバイザ・タスクを割り込みます。

LOCK_PARTITION_STATSプロシージャ

パーティションの統計情報をロックします。

LOCK_SCHEMA_STATSプロシージャ

スキーマのすべての表の統計情報をロックします。

LOCK_TABLE_STATSプロシージャ

表の統計情報をロックします。

MERGE_COL_USAGEプロシージャ

dblinkを使用して、列使用情報をソース・データベースからローカル・データベースにマージします。

PREPARE_COLUMN_VALUESプロシージャ

ユーザー指定の最小値、最大値およびヒストグラム終点のデータ・タイプ固有の値を、SEED_COL_USAGEプロシージャを使用して将来格納するためにOracleの内部表記に変換します。

PREPARE_COLUMN_VALUES_NVARCHARプロシージャ

ユーザー指定の最小値、最大値およびヒストグラム終点のデータ・タイプ固有の値を、SEED_COL_USAGEプロシージャを使用して将来格納するためにOracleの内部表記に変換します。

PREPARE_COLUMN_VALUES_ROWIDプロシージャ

ユーザー指定の最小値、最大値およびヒストグラム終点のデータ・タイプ固有の値を、SEED_COL_USAGEプロシージャを使用して将来格納するためにOracleの内部表記に変換します。

PUBLISH_PENDING_STATSプロシージャ

保留中として収集および格納された統計情報をパブリッシュします。

PURGE_STATSプロシージャ

ディクショナリに保存されている統計情報の古いバージョンをパージします。

REMAP_STAT_TABLEプロシージャ

ユーザー統計表のオブジェクトの名前を再マップします。

REPORT_ADVISOR_TASKファンクション

オプティマイザ・アドバイザ・タスクの結果をレポートします。

REPORT_COL_USAGEファンクション

記録された列(グループ)使用情報をレポートします。

REPORT_GATHER_AUTO_STATSファンクション

自動統計情報収集ジョブをレポート・モードで実行します。

REPORT_GATHER_DATABASE_STATSファンクション

GATHER_DATABASE_STATSプロシージャをレポート・モードで実行します。

REPORT_GATHER_DICTIONARY_STATSファンクション

GATHER_DICTIONARY_STATSプロシージャをレポート・モードで実行します。

REPORT_GATHER_FIXED_OBJ_STATSファンクション

GATHER_FIXED_OBJECTS_STATSプロシージャをレポート・モードで実行します。

REPORT_GATHER_SCHEMA_STATSファンクション

GATHER_SCHEMA_STATSプロシージャをレポート・モードで実行します。

REPORT_GATHER_TABLE_STATSファンクション

GATHER_TABLE_STATSプロシージャをレポート・モードで実行します。

REPORT_STATS_OPERATIONSファンクション

2つのタイムスタンプ(指定されている場合と指定されていない場合がある)の間に実行されるすべての統計操作のレポートを生成します。

RESET_ADVISOR_TASKプロシージャ

オプティマイザ統計アドバイザ・タスクの実行を初期状態にリセットします。現在実行されていないタスクのみをリセットします。

RESET_COL_USAGEプロシージャ

記録された列(グループ)使用情報をリセットします。

RESET_GLOBAL_PREF_DEFAULTSプロシージャ

すべてのパラメータのデフォルト値をOracleの推奨値にリセットします。

RESET_PARAM_DEFAULTSプロシージャ

グローバル・プリファレンスをデフォルト値にリセットします(「DBMS_STATSの推奨されないサブプログラム」を参照)。

RESTORE_DICTIONARY_STATSプロシージャ

すべてのディクショナリ表('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)の統計情報を、指定したタイムスタンプでリストアします。

RESTORE_FIXED_OBJECTS_STATSプロシージャ

すべての固定表の統計情報を、指定したタイムスタンプでリストアします。

RESTORE_SCHEMA_STATSプロシージャ

スキーマのすべての表の統計情報を、指定したタイムスタンプでリストアします。

RESTORE_SYSTEM_STATSプロシージャ

スキーマのすべての表の統計情報を、指定したタイムスタンプでリストアします。

RESTORE_TABLE_STATSプロシージャ

指定したタイムスタンプ(as_of_timestamp)で、表の統計情報および関連する索引と列の統計情報をリストアします。

RESUME_ADVISOR_TASKプロシージャ

中断したタスクを再開します。最後に中断した実行のみを再開します。

SCRIPT_ADVISOR_TASKファンクション

オプティマイザ統計アドバイザで検出された問題に対して推奨されるアクションを実装するスクリプトを取得します。

SEED_COL_USAGEプロシージャ

指定したSQLチューニング・セットでSQL文を繰り返し、それらをコンパイルして、その文に表示される列に関する列使用情報をシードします。

SET_ADVISOR_TASK_PARAMETERプロシージャ

オプティマイザ統計アドバイザ・タスク・パラメータの値を更新します

SET_COLUMN_STATSプロシージャ

列に関連する情報を設定します。

SET_DATABASE_PREFSプロシージャ

すべての表の統計プリファレンスを設定します。

SET_GLOBAL_PREFSプロシージャ

グローバルな統計プリファレンスを設定します。

SET_INDEX_STATSプロシージャ

索引に関連する情報を設定します。

SET_PARAMプロシージャ

DBMS_STATSプロシージャのパラメータのデフォルト値を設定します(「DBMS_STATSの推奨されないサブプログラム」を参照)。

SET_PROCESSING_RATEプロシージャ

特定の操作の処理速度の値を設定します。

SET_SCHEMA_PREFSプロシージャ

指定した所有者名で所有されているすべての表の統計プリファレンスを設定します。

SET_SYSTEM_STATSプロシージャ

システムの統計情報を設定します。

SET_TABLE_PREFSプロシージャ

指定したスキーマ内の指定した表の統計プリファレンスを設定します。

SET_TABLE_STATSプロシージャ

表に関連する情報を設定します。

SHOW_EXTENDED_STATS_NAMEファンクション

ユーザー指定の拡張に対して作成された仮想列の名前を戻します。

TRANSFER_STATSプロシージャ

指定した表の統計情報を、dblinkによって指定されたリモート・データベースからローカル・データベースに転送します。

UNLOCK_PARTITION_STATSプロシージャ

パーティションの統計情報をロック解除します。

UNLOCK_SCHEMA_STATSプロシージャ

スキーマ内にあるすべての表の統計情報をロック解除します。

UNLOCK_TABLE_STATSプロシージャ

表の統計情報をロック解除します。

UPGRADE_STAT_TABLEプロシージャ

古い表のユーザー統計情報をアップグレードします。

159.7.1 ALTER_STATS_HISTORY_RETENTIONプロシージャ

このプロシージャは、統計履歴のリテンション値を変更します。

統計履歴保存は、自動パージおよびPURGE_STATSプロシージャの両方で使用されます。

構文

DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (
   retention       IN     NUMBER);

パラメータ

表159-4 ALTER_STATS_HISTORY_RETENTIONプロシージャのパラメータ

パラメータ 説明

retention

リテンション期間を日数で指定します。少なくとも指定された期間は、統計履歴が保持されます。有効範囲は1から365000です。また、次の値を特定の目的に使用できます。

  • -1: 自動パージで統計履歴を削除しない。

  • 0: 古い統計情報を保存しない。自動パージですべての統計履歴を削除する。

  • NULL: 統計履歴のリテンションをデフォルト値に変更する。

使用上のノート

このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

159.7.2 CANCEL_ADVISOR_TASKプロシージャ

このプロシージャは、オプティマイザ統計アドバイザの実行を取り消します。アドバイザにより、現在の実行のすべての中間結果がタスクから削除されます。

構文

DBMS_STATS.CANCEL_ADVISOR_TASK (
  task_name IN VARCHAR2);

パラメータ

表159-5 CANCEL_ADVISOR_TASKプロシージャのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

ユーザーによってタスクが実行され、中断されて、別のユーザーによって再開されるケースについて考えます。この場合、オプティマイザ統計アドバイザでは、タスクを再開したユーザーの権限に基づいて、再開された実行をチェックします。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

使用上のノート

取り消す場合または中断する場合は、指定したタスクが現在実行されている必要があります。

例159-1 オプティマイザ統計アドバイザの取消し

この例では、SQL*Plusセッションを開始して、my_taskというアドバイザ・タスクを作成して実行します。

DECLARE
  v_tname   VARCHAR2(128) := 'my_task';
  v_ename   VARCHAR2(128) := NULL;
BEGIN
  -- create a task
  v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);

  -- execute the task
  v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
/

個々の端末で、2つ目のSQL*Plusセッションを開始して、次のプログラムを実行します。

EXEC DBMS_STATS.CANCEL_ADVISOR_TASK('my_task');

最初のセッションでは、タスクの取消しを示すORA-13632が戻されます。

ORA-13632: The user cancelled the current operation.

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.3 CONFIGURE_ADVISOR_FILTERファンクション

このファンクションは、オプティマイザ統計アドバイザ・タスクのフィルタ・リストを構成します。フィルタは、無関係な検索結果をレポートから除外する場合に便利です。

構文

DBMS_STATS.CONFIGURE_ADVISOR_FILTER (
  task_name           IN   VARCHAR2,
  stats_adv_opr_type  IN   VARCHAR2,
  configuration_type  IN   VARCHAR2,
  filter              IN   StatsAdvFilterTab   := NULL)
RETURN CLOB;

パラメータ

表159-6 CONFIGURE_ADVISOR_FILTERファンクションのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

stats_adv_opr_type

構成する操作のタイプ。使用可能な値は、EXECUTEREPORTSCRIPTおよびIMPLEMENTです。このファンクションにより、EXECUTE +REPORTなどのようにプラス(+)演算子を使用して、操作タイプの組合せを指定できます。このパラメータがNULLの場合、フィルタがすべてのタイプのアドバイザ操作に適用されます。

configuration_type

構成のタイプ。次の値があります。

  • SET: 指定したフィルタ・リスト値を設定します。発行したフィルタにより、既存のフィルタ値がオーバーライドされます。

  • CLEAR: 指定したフィルタの既存の値を消去します。

  • SHOW: 指定したフィルタの現在の値を表示します。

filter

スクリプトのフィルタ項目のリスト。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

戻り値

このファンクションは、指定したフィルタの構成を含むCLOBをXML形式で戻します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

使用上のノート

すべてのプロシージャにファイングレイン制御と統合インタフェースを提供するには、DBMS_STATSStatsAdvFilterタイプを指定します。このデータ・タイプを使用すると、フィルタの表をインスタンス化および構成できます。その後、次のいずれかを指定するブール変数とともに、タイプStatsAdvFilterのパラメータをCONFIGURE_ADVISOR_FILTERに渡すことができます。

  • 包含リスト

    これらのオブジェクトのみをチェックに含めます。

  • 除外リスト

    これらのオブジェクトをチェックに含めません。

既存のリストを置き換えるかどうかを指定するパラメータを渡すこともできます。このリストでは、オブジェクト・レベルの項目と操作レベルの項目のみがフィルタ処理されます。アドバイザにより、常にシステム・レベルのルールがチェックされます。

次のタイプのフィルタを作成できます。

  • ルール・フィルタ

    このフィルタは、入力としてルール名を取ります。V$STATS_ADVISOR_RULESビューからルール名を取得します。

  • 操作フィルタ

    このフィルタは、操作名およびコール内のすべてのパラメータ値のXML文字列表現を取る完全一致検索フィルタです。XMLを取得するには、DBA_OPTSTAT_OPERATIONSビューのノートを参照してください。操作のフィルタを取得するには、DBMS_STATS.GET_ADVISOR_OPR_FILTERを使用します。

  • オブジェクト・フィルタ

    このフィルタは、所有者名とオブジェクト名を受け入れます。所有者名およびオブジェクト名では、ワイルドカード文字(%)がサポートされます。オブジェクト名がNULLまたは%の場合、指定したスキーマのすべてのオブジェクトに対するフィルタになります。所有者名がNULLまたは%の場合も、システム内のすべてのオブジェクトに対するデフォルト・フィルタになります。

フィルタが指定されていない場合は、フィルタ処理のグローバルなデフォルト値(インクルードまたはエクスクルード)を設定すると、このファンクションでフィルタが認識されます。ルール、操作またはオブジェクトにフィルタが指定されていない場合、チェック中にこのファンクションで、含めるか除外するかを決定するデフォルト値が使用されます。

例159-2 ルールの有効化および無効化

特定のルールを除くすべてのルールのチェックをオフにすることができます。この例では、SQLプラン・ディレクティブが無効かどうかをチェックします。

DECLARE
  v_task_name    VARCHAR2(128)                := 'my_task';
  v_ret          VARCHAR2(128);
  filter         DBMS_STATS.StatsAdvFilter    := null;
  filterTab      DBMS_STATS.StatsAdvFilterTab := null;
  v_counter      NUMBER                       := 0;
  v_filterReport CLOB;
BEGIN
  -- Create the advisor task
  v_ret := DBMS_STATS.CREATE_ADVISOR_TASK(v_task_name);
  
  -- Initialize the filter table
  filterTab := DBMS_STATS.StatsAdvFilterTab();

  -- First filter: set filters to be FALSE by default
  filter.include := FALSE;

  -- Add this filter to the filter table
  v_counter := v_counter + 1;
  filterTab.extend;
  filterTab(v_counter) := filter;

  -- Second filter: turn on filter for one rule
  filter.include := TRUE;
  filter.rulename := 'TurnOnSQLPlanDirective';

  -- Add the SQL plan directive filter to the filter table
  v_counter := v_counter + 1;
  filterTab.extend;
  filterTab(v_counter) := filter;

  v_filterReport := DBMS_STATS.CONFIGURE_ADVISOR_FILTER(
                      task_name          => v_task_name, 
                      stats_adv_opr_type => NULL,
                      configuration_type => 'SET', 
                      filter             => filterTab);
  -- Drop the task
  DBMS_STATS.DROP_ADVISOR_TASK(v_task_name);
END;

例159-3 操作フィルタの構成

この例では、ショップでカスタマイズ済スクリプトを使用して表の統計情報を収集します。特定の統計操作をレポートに表示しない場合は、操作フィルタを指定できます。

DECLARE
  v_task_name    VARCHAR2(128)                := 'my_task';
  v_ret          VARCHAR2(128);
  filter         DBMS_STATS.StatsAdvFilter    := null;
  filterTab      DBMS_STATS.StatsAdvFilterTab := null;
  opr            DBMS_STATS.StatsAdvOpr;
  oprTab         DBMS_STATS.StatsAdvOprTab;
  v_oprCnt       NUMBER                       := 0;
  TYPE numTab IS TABLE OF NUMBER;
  opr_tab        numTab;
  v_filterReport CLOB;

BEGIN
  -- Create the advisor task
  v_ret := DBMS_STATS.CREATE_ADVISOR_TASK(v_task_name);
  
  -- Initialize filter table
  filterTab := DBMS_STATS.StatsAdvFilterTab();

  -- Initialize operations filter
  oprTab := DBMS_STATS.StatsAdvOprTab();

  SELECT ID 
    BULK COLLECT INTO opr_tab 
  FROM   WRI$_OPTSTAT_OPR
  WHERE  OPERATION = 'set_table_stats' 
  AND    TARGET = 'HR.EMPLOYEES';

  -- Populate the operations table
  FOR i IN 1..opr_tab.count LOOP

    -- Use the procedure GET_ADVISOR_OPR_FILTER to construct
    -- an operation filter
    DBMS_STATS.GET_ADVISOR_OPR_FILTER(opr_tab(i), opr);

    v_oprCnt := v_oprCnt + 1;
    oprTab.extend;
    oprTab(v_oprCnt) := opr;

  END LOOP;

  filter.include := FALSE;
  filter.oprlist := oprTab;

  -- Add to filter table
  filterTab.extend;
  filterTab(1) := filter;

  v_filterReport := DBMS_STATS.CONFIGURE_ADVISOR_FILTER(
                      task_name          => v_task_name, 
                      stats_adv_opr_type => NULL,
                      configuration_type => 'SET',
                      filter             => filterTab);
					  
  -- Drop the task
  DBMS_STATS.DROP_ADVISOR_TASK(v_task_name);
  
END;

例159-4 特定のスキーマに関するレポート

この例では、shスキーマのみに関するレポートを生成します。また、sh.products表をスキップします。次のように、オブジェクト・フィルタを作成します。

DECLARE
  v_task_name     VARCHAR2(128)                := 'my_task';
  v_ret           VARCHAR2(128);
  filter          DBMS_STATS.StatsAdvFilter    := null;
  filterTab       DBMS_STATS.StatsAdvFilterTab := null;
  v_filterReport  CLOB;
  v_counter       NUMBER                       := 0;
  obj             DBMS_STATS.ObjectElem;
  objTab          DBMS_STATS.ObjectTab;
  v_objCnt        NUMBER                       := 0;
BEGIN
  -- Create the advisor task
  v_ret := DBMS_STATS.CREATE_ADVISOR_TASK(v_task_name);
  
  -- Initialize filter table
  filterTab := DBMS_STATS.StatsAdvFilterTab();

  -- Set object filter to be off by default
  filter.include := FALSE;

  objTab := DBMS_STATS.ObjectTab();

  obj.ownname := NULL;
  obj.objname := NULL;

  -- Add to the object table

  v_objCnt := v_objCnt + 1;
  objTab.extend;
  objTab(v_objCnt) := obj;

  filter.objlist := objTab;

  -- Add the object filter to the filter table
  v_counter := v_counter + 1;
  filterTab.extend;
  filterTab(v_counter) := filter;

  -- In filter 1, turn on the check only for schema SH

  filter.include := TRUE;

  objTab := DBMS_STATS.ObjectTab();
  v_objCnt := 0;

  obj.ownname := 'SH';
  obj.objname := NULL;

  -- add to the object table
  v_objCnt := v_objCnt + 1;
  objTab.extend;
  objTab(v_objCnt) := obj;

  filter.objlist := objTab;

  -- Add the object filter to the filter table
  v_counter := v_counter + 1;
  filterTab.extend;
  filterTab(v_counter) := filter;

  -- In filter 2, exclude the check for object sh.products

  filter.include := FALSE;


  objTab := dbms_stats.ObjectTab();
  v_objCnt := 0;

  -- Specify another object filter for sh.products
  obj.ownname := 'SH';
  obj.objname := 'PRODUCTS';

  -- Add to the object table
  v_objCnt := v_objCnt + 1;
  objTab.extend;
  objTab(v_objCnt) := obj;

  filter.objlist := objTab;


  -- Add the object filter to the filter table
  v_counter := v_counter + 1;
  filterTab.extend;
  filterTab(v_counter) := filter;

  v_filterReport :=
  DBMS_STATS.CONFIGURE_ADVISOR_FILTER(
    task_name          => v_task_name, 
    stats_adv_opr_type => NULL,
    configuration_type => 'SET', 
    filter             => filterTab);
	
  -- Drop the task
  DBMS_STATS.DROP_ADVISOR_TASK(v_task_name);
END;

ノート:

オプティマイザ統計アドバイザを構成する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.4 CONFIGURE_ADVISOR_OBJ_FILTERファンクション

このファンクションは、オプティマイザ統計アドバイザ・タスクのオブジェクト・フィルタを構成します。

構文

DBMS_STATS.CONFIGURE_ADVISOR_OBJ_FILTER (
  task_name             IN VARCHAR2,
  stats_adv_opr_type    IN VARCHAR2,
  rule_name             IN VARCHAR2,
  ownname               IN VARCHAR2,
  tabname               IN VARCHAR2,
  action                IN VARCHAR2)
RETURN CLOB;

パラメータ

表159-7 CONFIGURE_ADVISOR_OBJ_FILTERファンクションのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

stats_adv_opr_type

構成する操作のタイプ。使用可能な値は、EXECUTEREPORTSCRIPTおよびIMPLEMENTです。「CONFIGURE_ADVISOR_RULE_FILTERファンクション」を参照してください。

rule_name

構成するルールの名前。NULLの場合、フィルタがすべての操作レベルのルールに適用されます。

ownname

操作のターゲットの所有者名。NULLの場合、フィルタがすべての所有者名に適用されます。

tabname

操作のターゲットの表名。

action

指定したルールに対して実行する構成アクション。「CONFIGURE_ADVISOR_RULE_FILTERファンクション」を参照してください。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

戻り値

このファンクションは、フィルタの更新された値を含むXML CLOBを戻します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.5 CONFIGURE_ADVISOR_OPR_FILTERファンクション

このオーバーロードされたファンクションは、オプティマイザ統計アドバイザ・タスクの操作フィルタを構成します。

構文

DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER (
  task_name             IN VARCHAR2,
  stats_adv_opr_type    IN VARCHAR2,
  rule_name             IN VARCHAR2,
  operation_name        IN VARCHAR2,
  action                IN VARCHAR2)
RETURN CLOB;
DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER (
  task_name             IN VARCHAR2,
  stats_adv_opr_type    IN VARCHAR2,
  rule_name             IN VARCHAR2,
  operation_name        IN VARCHAR2,
  ownname               IN VARCHAR2,
  tabname               IN VARCHAR2,
  action                IN VARCHAR2)
RETURN CLOB;
DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER (
  task_name             IN VARCHAR2,
  stats_adv_opr_type    IN VARCHAR2,
  rule_name             IN VARCHAR2,
  operation_id          IN NUMBER,
  action                IN VARCHAR2)
RETURN CLOB;

パラメータ

表159-8 CONFIGURE_ADVISOR_OPR_FILTERファンクションのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

stats_adv_opr_type

構成する操作のタイプ。使用可能な値は、EXECUTEREPORTSCRIPTおよびIMPLEMENTです。「CONFIGURE_ADVISOR_RULE_FILTERファンクション」を参照してください。

rule_name

構成するルールの名前。NULLの場合、フィルタがすべての操作レベルのルールに適用されます。

operation_name

操作の名前。たとえば、操作名をgather_table_statsにすることができます。nullは指定できません。

operation_id

構成する操作のID。指定した操作IDと同じ署名を持つすべての操作にフィルタが適用されます。2つの操作が同じ署名を持つ場合、それらのすべてのパラメータに同じ値が指定されています。DBA_OPSTAT_OPERATIONS.IDの操作IDを表示します。nullは指定できません。

ownname

操作のターゲットの所有者名。nullは指定できません。

tabname

操作のターゲットの表名。

action

指定したルールに対して実行する構成アクション。「CONFIGURE_ADVISOR_RULE_FILTERファンクション」を参照してください。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

戻り値

このファンクションは、フィルタの更新された値を含むXML CLOBを戻します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

例159-5 表統計を収集する操作の除外

この例では、目標はhrスキーマ内の表統計を収集する操作を除外することです。ユーザー・アカウントstatsにはDBAロール、ADVISOR権限およびSELECT ON DBA_OPTSTAT_OPERATIONS権限が付与されています。次のステップを実行します。

  1. statsとしてデータベースにログインします。

  2. opt_adv_task1という既存のタスクを削除します。

    DECLARE
      v_tname VARCHAR2(32767);
    BEGIN
      v_tname := 'opt_adv_task1';
      DBMS_STATS.DROP_ADVISOR_TASK(v_tname);
    END;
    /
    
  3. hrスキーマの表に関する統計を収集する操作を除く、すべての操作についてアドバイスするタスクを構成する、opr_filterというプロシージャを作成します。

    CREATE OR REPLACE PROCEDURE opr_filter(p_tname IN VARCHAR2) IS
       v_retc CLOB;
    BEGIN
       -- For all rules, prevent the advisor from operating 
       -- on the operations selected in the following query
       FOR rec IN 
         (SELECT ID FROM DBA_OPTSTAT_OPERATIONS WHERE OPERATION = 'gather_table_stats' AND TARGET LIKE 'HR.%')
       LOOP
         v_retc := DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER(
                     task_name          => p_tname
                   , stats_adv_opr_type => NULL
                   , rule_name          => NULL
                   , operation_id       => rec.id
                   , action             => 'DISABLE');
       END LOOP;
    END;
    /
    SHOW ERRORS
    
  4. opt_adv_task1というタスクを作成して、このタスクのopr_filterプロシージャを実行します。

    DECLARE
      v_tname VARCHAR2(32767);
      v_ret VARCHAR2(32767);
    BEGIN
      v_tname := 'opt_adv_task1';
      v_ret   := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
      opr_filter(v_tname);
    END;
    /
  5. タスクopt_adv_task1を実行します。

    DECLARE
      v_tname VARCHAR2(32767);
      v_ret   VARCHAR2(32767);
    begin
      v_tname := 'opt_adv_task1';
      v_ret   := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
    END;
    /
  6. レポートを印刷します。

    SPOOL /tmp/rep.txt
    SET LONG 1000000
    COLUMN report FORMAT A200
    SET LINESIZE 250
    SET PAGESIZE 1000
    
    SELECT DBMS_STATS.REPORT_ADVISOR_TASK(
             task_name      => 'opt_adv_task1'
           , execution_name => NULL
           , type           => 'TEXT'
           , section        => 'ALL' 
           ) AS report
    FROM   DUAL;
    SPOOL OFF

参照:

159.7.6 CONFIGURE_ADVISOR_RULE_FILTERファンクション

このファンクションは、オプティマイザ統計アドバイザ・タスクのルール・フィルタを構成します。

構文

DBMS_STATS.CONFIGURE_ADVISOR_RULE_FILTER (
  task_name            IN   VARCHAR2,
  stats_adv_opr_Type   IN   VARCHAR2,
  rule_name            IN   VARCHAR2,
  action               IN   VARCHAR2)
RETURN CLOB;

パラメータ

表159-9 SCRIPT_ADVISOR_TASKファンクションのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

stats_adv_opr_type

構成する操作のタイプ。使用可能な値は、EXECUTEREPORTSCRIPTおよびIMPLEMENTです。EXECUTE +REPORTなどのように、操作タイプの組合せを指定できます。このパラメータがNULLの場合、フィルタがすべてのタイプのオプティマイザ統計アドバイザ操作に適用されます。

rule_name

構成するルールの名前。NULLの場合、フィルタがすべてのルールに適用されます。

action

指定したルールに対して実行する構成アクション。使用可能な値は次のとおりです。

  • ENABLE: フィルタを有効にします。

  • DISABLE: フィルタを無効にします。

  • DELETE: フィルタを削除します。

  • SHOW: 現在のフィルタ値を表示します。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

戻り値

このファンクションは、フィルタの更新された値を含むXML CLOBを戻します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.7 CONVERT_RAW_VALUEプロシージャ

このプロシージャは、最小値、最大値またはヒストグラム終点の実際の値の内部表記を、データ・タイプ固有の値に変換します。

GET_COLUMN_STATSまたはPREPARE_COLUMN_VALUESで入力されたStatRec構造のminvalフィールド、maxval,フィールドおよびeavalsフィールドの値が、有効な入力値です。

構文

DBMS_STATS.CONVERT_RAW_VALUE (
   rawval     RAW, 
   resval OUT BINARY_FLOAT);

DBMS_STATS.CONVERT_RAW_VALUE (
   rawval     RAW, 
   resval OUT BINARY_DOUBLE);

DBMS_STATS.CONVERT_RAW_VALUE (
   rawval     RAW, 
   resval OUT DATE);

DBMS_STATS.CONVERT_RAW_VALUE (
   rawval     RAW, 
   resval OUT NUMBER);

DBMS_STATS.CONVERT_RAW_VALUE (
   rawval     RAW, 
   resval OUT VARCHAR2);

パラメータ

表159-10 CONVERT_RAW_VALUEプロシージャのパラメータ

パラメータ 説明

rawval

列最小、列最大、ヒストグラム終点の実際の値のRAWタイプ表記。

resval

変換済のタイプ固有の値。

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.8 CONVERT_RAW_VALUE_NVARCHARプロシージャ

このプロシージャは、最小値、最大値またはヒストグラム終点の実際の値の内部表記を変換します。

GET_COLUMN_STATSまたはPREPARE_COLUMN_VALUESで入力されたStatRec構造のminvalフィールド、maxvalフィールドおよびeavalsフィールドの値が、有効な入力値です。

構文

DBMS_STATS.CONVERT_RAW_VALUE_NVARCHAR (
   rawval     RAW, 
   resval OUT NVARCHAR2);

パラメータ

表159-11 CONVERT_RAW_VALUE_NVARCHARプロシージャのパラメータ

パラメータ 説明

rawval

列最大または列最小のデータ・タイプ固有の出力パラメータのRAWタイプ表記。

resval

変換済のタイプ固有の値。

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.9 CONVERT_RAW_VALUE_ROWIDプロシージャ

このプロシージャは、最小値、最大値またはヒストグラム終点の実際の値の内部表記を変換します。

GET_COLUMN_STATSまたはPREPARE_COLUMN_VALUESで入力されたStatRec構造のminvalフィールド、maxvalフィールドおよびeavalsフィールドの値が、有効な入力値です。

構文

DBMS_STATS.CONVERT_RAW_VALUE_ROWID (
   rawval     RAW, 
   resval OUT ROWID);

プラグマ

pragma restrict_references(convert_raw_value_rowid, WNDS, RNDS, WNPS, RNPS);

パラメータ

表159-12 CONVERT_RAW_VALUE_ROWIDプロシージャのパラメータ

パラメータ 説明

rawval

列最大または列最小のデータ・タイプ固有の出力パラメータのRAWタイプ表記。

resval

変換済のタイプ固有の値。

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.10 COPY_TABLE_STATSプロシージャ

このプロシージャは、すべての依存オブジェクト(列、ローカル索引など)の統計情報もコピーします。ソースの統計情報を使用できない場合は、何もコピーされません。オプションで、指定されたscale_factorに基づいて、(blks数、行数などの)統計情報をスケーリングできます。

構文

DBMS_STATS.COPY_TABLE_STATS (
   ownname          VARCHAR2, 
   tabname          VARCHAR2, 
   srcpartname      VARCHAR2,
   dstpartname      VARCHAR2, 
   scale_factor     VARCHAR2 DEFAULT 1,
   flags            NUMBER DEFAULT NULL,
   force            BOOLEAN DEFAULT FALSE);

パラメータ

表159-13 COPY_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

ソース・(サブ・)パーティションおよび宛先(サブ・)パーティションの表のスキーマ。

tabname

ソース・(サブ・)パーティションおよび宛先(サブ・)パーティションの表名。

srcpartname

ソース・(サブ・)パーティション。

dtspartname

宛先(サブ・)パーティション。

scale_factor

dstpartname内のnblksnrowsなどをスケーリングするスケール係数。

flags

Oracle内部で使用(NULLのままにします)。

force

この引数の値がTRUEの場合、宛先[サブ]パーティションがロックされていても統計をコピーします。

セキュリティ・モデル

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

例外

ORA-20000: (サブ・)パーティション名が無効です。

ORA-20001: 入力値が無効です。

使用上のノート

このプロシージャは、次のように、最初のパーティション列に対する宛先パーティションの最小値および最大値を更新します。

  • パーティション化のタイプがHASHの場合は、宛先パーティションの最小値および最大値は、ソース・パーティションのパーティション化のタイプと同じです。

  • パーティション化のタイプがLISTの場合、宛先パーティションの設定によって動作が決まります。

    • 宛先パーティションがNOT DEFAULTパーティションの場合、次のことが当てはまります。

      • 宛先パーティションの最小値は、宛先パーティションを記述した値リストの最小値に設定されます。

      • 宛先パーティションの最大値は、宛先パーティションを記述した値リストの最大値に設定されます。

    • また、宛先パーティションがDEFAULTパーティションの場合、次のことが当てはまります。

      • 宛先パーティションの最小値は、ソース・パーティションの最小値に設定されます。

      • 宛先パーティションの最大値は、ソース・パーティションの最大値に設定されます。

  • パーティション化のタイプがRANGEの場合、次のことが当てはまります。

    • 宛先パーティションの最小値は、宛先パーティションが最初のパーティションでないかぎり、前のパーティションの上限に設定されます。最初のパーティションの場合、最小値は宛先パーティションの上限に設定されます。

    • 宛先パーティションの上限がMAXVALUEである場合(この場合、宛先パーティションの最大値は前のパーティションの上限に設定される)を除き、宛先パーティションの最大値は宛先パーティションの上限に設定されます。

    • ソース・パーティション列の最小値がソース・パーティション列の最大値と等しく、かつ最小値と最大値の両方がソース・パーティションの下限と等しく、単一の個別値を持つ場合、宛先パーティション列の最小値および最大値は両方とも、宛先パーティションの下限に設定されます。すべてのパーティション列に対してこの処理が行われます。

      前述の条件が当てはまらない場合、2番目以降のパーティショニング列は次のように更新されます。宛先パーティション列の最大値は、1つを除き、宛先パーティションの上限とソース・パーティション列の最大値の大きい方に設定されます。宛先パーティションがD、その先行パーティションがD-1、調節するキー列がCnである場合、前のキー列Cn-1の上限がパーティションDD-1で同じであることを条件として、Cnの最大値はDの上限に設定されます(ソース・パーティション列の最大値は無視されます)。

  • 変更後の列の最小値と最大値が異なっていて、個別値の数が1より小さい場合、個別値の数は2に更新されます。

  • ソースまたは宛先がコンポジット・パーティション表のパーティションである場合、このプロシージャでは基礎となるサブパーティションの統計はコピーされません。

159.7.11 CREATE_ADVISOR_TASKファンクション

このファンクションは、オプティマイザ統計アドバイザのアドバイザ・タスクを作成します。

構文

DBMS_STATS.CREATE_ADVISOR_TASK (
   task_name    IN   VARCHAR2   := NULL)
 RETURN VARCHAR2;

パラメータ

表159-14 CREATE_ADVISOR_TASKファンクションのパラメータ

パラメータ 説明

task_name

タスクの名前。タスク名がすでに指定されている場合、指定したタスク名が使用されます。そうでない場合、自動的に新しいタスク名が生成されます。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

戻り値

このファンクションは、オプティマイザ統計アドバイザ・タスクの一意の名前を戻します。

例外

ORA-20000: 権限が不十分です。/拡張の作成はサポートされていません。

ORA-20001: 拡張の処理中にエラーが発生しました。

ORA-20012: オプティマイザ統計アドバイザのエラー

例159-6 タスクの作成および実行

この例では、my_taskというオプティマイザ統計アドバイザ・タスクを作成して実行します。

DECLARE
  v_tname   VARCHAR2(128) := 'my_task';
BEGIN
  -- create a task
  v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
  -- execute the task
  v_tname := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.12 CREATE_EXTENDED_STATSファンクション

このファンクションは、表のユーザー指定の列グループまたは式の列統計情報エントリをシステム内に作成します。

ユーザー開始または自動の統計情報収集ジョブにより表の統計情報が収集されると、データベースでこの拡張の統計情報が収集されます。このような拡張の統計情報は、拡張統計情報と呼ばれます。このファンクションは、拡張用に新しく作成されたエントリの名前を戻します。

このファンクションのこの2番目の形式では、SEED_COL_USAGEプロシージャによって記録された列グループ使用率に基づいて、統計の拡張が作成されます。このファンクションは、作成された拡張のレポートを戻します。

構文

DBMS_STATS.CREATE_EXTENDED_STATS (
   ownname    VARCHAR2, 
   tabname    VARCHAR2,
   extension  VARCHAR2)
 RETURN VARCHAR2;

DBMS_STATS.CREATE_EXTENDED_STATS (
   ownname    VARCHAR2, 
   tabname    VARCHAR2)
 RETURN CLOB;

パラメータ

表159-15 CREATE_EXTENDED_STATSファンクションのパラメータ

パラメータ 説明

ownname

表の所有者名。

tabname

表の名前

extension

列グループまたは式を指定できます。指定した表に、列c1およびc2があるとします。列グループは(c1, c2)のようになります。式は(c1 + c2)のようになります。

戻り値

このファンクションは、拡張用に新しく作成されたエントリの名前を戻します。

例外

ORA-20000: 権限が不十分です。/拡張の作成はサポートされていません。

ORA-20001: 拡張の処理中にエラーが発生しました。

ORA-20007: 拡張はすでに存在しています。

ORA-20008: 拡張数の上限に達しました。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

拡張には、次の制限があります。

  • 拡張に仮想列を含めることはできません。

  • SYSが所有する表には拡張を作成できません。

  • クラスタ表、索引構成表、一時表または外部表には拡張を作成できません。

  • 表内の拡張の合計数が最大数(20、表内の非仮想列の10%)を超えることはできません。

  • 列グループ内の列の数は、2から32の範囲内である必要があります。

  • 1つの列を1つの列グループ内で複数回使用することはできません。

  • 拡張に式を含めることができるのは、対応する仮想列が作成されている場合のみです。

  • 式には1つ以上の列が含まれている必要があります。

  • 式に副問合せを含めることはできません。

  • COMPATIBLEパラメータは11.0.0.0.0以上にする必要があります。

159.7.13 CREATE_STAT_TABLEプロシージャ

このプロシージャは、統計情報を保持できるownnameのスキーマにあるstattabの名前で表を作成します。この表は、このパッケージのプロシージャを介して単独にアクセスされるため、この表を構成する列とタイプは互いに関係がありません。

構文

DBMS_STATS.CREATE_STAT_TABLE (
   ownname             VARCHAR2, 
   stattab             VARCHAR2,
   tblspace            VARCHAR2 DEFAULT NULL,
   global_temporary    BOOLEAN DEFAULT FALSE);

パラメータ

表159-16 CREATE_STAT_TABLEプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

stattab

作成する表の名前。ユーザーがディクショナリ統計情報を直接変更しない場合、この値は、stattabパラメータとして他のプロシージャに渡されます。

tblspace

統計表を作成する表領域。このパラメータを指定しないと、統計表はユーザーのデフォルトの表領域に作成されます。

global_temporary

表をグローバル一時表として作成する必要があるかどうか。

セキュリティ・モデル

このプロシージャを起動するには、指定したスキーマで表を作成するために必要な権限が必要です。

例外

ORA-20000: 表がすでに存在するか、権限が不十分です。

ORA-20001: 表領域が存在しません

159.7.14 DELETE_COLUMN_STATSプロシージャ

このプロシージャは、列に関連する統計情報を削除します。

構文

DBMS_STATS.DELETE_COLUMN_STATS (
   ownname        VARCHAR2, 
   tabname        VARCHAR2, 
   colname        VARCHAR2, 
   partname       VARCHAR2 DEFAULT NULL,
   stattab        VARCHAR2 DEFAULT NULL, 
   statid         VARCHAR2 DEFAULT NULL,
   cascade_parts  BOOLEAN  DEFAULT TRUE,
   statown        VARCHAR2 DEFAULT NULL,
   no_invalidate  BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   force          BOOLEAN  DEFAULT FALSE,
   col_stat_type  VARCHAR2 DEFAULT 'ALL');

パラメータ

表159-17 DELETE_COLUMN_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

列が所属している表の名前。

colname

列または拡張の名前。

partname

統計情報を削除する表パーティションの名前。表がパーティション化されていて、partnameNULLの場合、グローバルな列統計情報が削除されます。

stattab

統計情報を削除する場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接削除されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

cascade_parts

表がパーティション化されていて、partnameNULLの場合、このパラメータをTRUEに設定すると、基礎となるすべてのパーティションについても列の統計情報が削除されます。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

この引数の値がTRUEの場合、列の統計情報は、ロックされていても削除されます。

col_stat_type

削除される列統計情報のタイプ。この引数は次の値を取ります。

  • HISTOGRAM: 列のヒストグラムのみを削除します。

  • ALL: ベース列の統計情報およびヒストグラムを削除します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20005: オブジェクト統計はロックされています

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.15 DELETE_DATABASE_PREFSプロシージャ

このプロシージャは、すべての非システム表に対して設定された統計プリファレンスを削除します。システム表は、add_sysパラメータにTRUEを渡すことによって含めることができます。

構文

DBMS_STATS.DELETE_DATABASE_PREFS (
    pname            IN   VARCHAR2,
    add_sys          IN   BOOLEAN DEFAULT FALSE);

パラメータ

表159-18 DELETE_DATABASE_PREFSプロシージャのパラメータ

パラメータ 説明

pname

プリファレンスの名前。次のプリファレンスの既存の値は削除でき、デフォルトのプリファレンス値が使用されます。

  • APPROXIMATE_NDV_ALGORITHM

  • AUTO_STAT_EXTENSIONS

  • CASCADE

  • DEGREE

  • ESTIMATE_PERCENT

  • GLOBAL_TEMP_TABLE_STATS

  • GRANULARITY

  • INCREMENTAL

  • INCREMENTAL_LEVEL

  • INCREMENTAL_STALENESS

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • STAT_CATEGORY

  • TABLE_CACHED_BLOCKS

add_sys

SYS表を含めるかどうかを決定します。

表159-19 統計プリファレンス

プリファレンス 説明

APPROXIMATE_NDV_ALGORITHM

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。シノプシスを、個別値をサンプリングする内部管理構造とみなします。

次のプリファレンスを削除できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。既存のパフォーマンスが許容範囲であり、レガシー・コンテンツを再フォーマットするパフォーマンス・コストを発生させたくない場合、この方法が有益です。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。これは最も保守的なオプションです。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。動的サンプリングとは対照的に、HyperLogLogアルゴリズムはランダム化手法を使用します。適応サンプリングと比較したHyperLogLogの利点は次のとおりです。

    • 新しいアルゴリズムの正確性は、元のアルゴリズムと似ています。

    • 必要なメモリーは非常に少なく、一般的にシノプシス・サイズの大幅な削減につながります。

AUTO_STAT_EXTENSIONS

データベース統計を収集する場合、拡張機能の自動作成を制御します。

次の値を設定できます。

  • ON - 適用可能な場合に、SQLプラン・ディレクティブでは、ワークロードの述語の列の使用に基づいて、列グループ統計の作成をトリガーできます。

  • OFF - データベースで列グループ統計が自動的に作成されることはありません。これらは、CREATE_EXTENDED_STATSファンクションが実行されたとき、またはDBMS_STATSMETHOD_OPT句で明示的に拡張統計情報が指定されたときにのみ作成されます。これはデフォルトです。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

推定する行のパーセントが決定されます。

GLOBAL_TEMP_TABLE_STATS

グローバル一時表に対して収集された統計情報を共有統計情報として格納するか、セッション統計情報として格納するかを制御します。

GRANULARITY

収集する統計情報の粒度が決定されます。この値は、パーティション表にのみ使用されます。

INCREMENTAL

全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、どのシノプシスを収集するかを制御します。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - 適応サンプリング・シノプシスとHyperLogLogシノプシスの共存が許可されます。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

METHOD_OPT

列統計収集およびヒストグラムの作成が制御されます。グローバル、スキーマ、データベースまたはディクショナリのレベルでプリファレンスを設定する場合、'FOR ALL'構文のみが許可されます。

NO_INVALIDATE

統計情報を収集する表の依存カーソルの無効化が制御されます。

OPTIONS

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。

PREFERENCE_OVERRIDES_PARAMETER

パラメータの入力値を、統計操作のそのパラメータのプリファレンス値でオーバーライドするかどうかを決定します。使用可能な値は、次のとおりです。

  • TRUE - 入力パラメータ値を無視し、対応するプリファレンスの値を使用します。

  • FALSE - 入力パラメータ値に従います。

このプリファレンスを指定すると、表、グローバルおよびデフォルトの優先順位が変更されません。

PUBLISH

収集ジョブが完了した後で、新しく収集された統計情報をパブリッシュするかどうかが決定されます。

統計情報を収集し、すぐにはパブリッシュしないようにすることができます。この手法により、パブリッシュ前に新しい統計情報をテストできます。

STALE_PERCENT

表の統計情報が失効しているとみなされ、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。

STAT_CATEGORY

インポートまたはエクスポートする統計情報を指定します。カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • OBJECT_STATS: 表、列および索引(デフォルト)の統計情報

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'は、表統計情報、列統計情報、索引統計情報およびシノプシスを指定します。

TABLE_CACHED_BLOCKS

索引のクラスタリング要因の計算時にバッファ・キャッシュにキャッシュされる平均ブロック数(予測値)を指定します。

セキュリティ・モデル

このプロシージャを実行するには、SYSDBAロール、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

使用上のノート

すべてのpname引数はVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲みます。

例159-7 例

DBMS_STATS.DELETE_DATABASE_PREFS('CASCADE', FALSE);
DBMS_STATS.DELETE_DATABASE_PREFS('ESTIMATE_PERCENT', TRUE);

参照:

オプティマイザ統計プリファレンスの管理方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.16 DELETE_DATABASE_STATSプロシージャ

このプロシージャは、データベース内のすべての表に関する統計情報を削除します。

構文

DBMS_STATS.DELETE_DATABASE_STATS (
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   force            BOOLEAN  DEFAULT FALSE,
   stat_category    VARCHAR2 DEFAULT DEFAULT_DEL_STAT_CATEGORY); 

パラメータ

表159-20 DELETE_DATABASE_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報を削除する場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接削除されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

この引数の値がTRUEの場合、データベース内の表の統計情報は、ロックされていても削除されます。

stat_category

削除する統計情報。これは、カンマで区切られた複数の値を受け入れます。

  • OBJECT_STATS: 表、列および索引の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

デフォルトは'OBJECT_STATS, SYNOPSES'です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

このプロシージャを実行するには、SYSDBAロールまたはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

159.7.17 DELETE_DICTIONARY_STATSプロシージャ

このプロシージャは、すべてのディクショナリのスキーマ('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)に関する統計情報を削除します。

構文

DBMS_STATS.DELETE_DICTIONARY_STATS (
   stattab        VARCHAR2 DEFAULT NULL,
   statid         VARCHAR2 DEFAULT NULL,
   statown        VARCHAR2 DEFAULT NULL, 
   no_invalidate  BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   stattype       VARCHAR2 DEFAULT 'ALL',
   force          BOOLEAN  DEFAULT FALSE,
   stat_category  VARCHAR2 DEFAULT DEFAULT_DEL_STAT_CATEGORY); 

パラメータ

表159-21 DELETE_DICTIONARY_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報を削除する場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接削除されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattype

統計タイプ。

force

この引数の値がTRUEの場合、データベース内の表の統計情報は、ロックされていても削除されます。

stat_category

削除する統計情報。これは、カンマで区切られた複数の値を受け入れます。

  • OBJECT_STATS: 表、列および索引の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

デフォルトは'OBJECT_STATS, SYNOPSES'です。

使用上のノート

このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.18 DELETE_FIXED_OBJECTS_STATSプロシージャ

このプロシージャは、すべての固定表の統計情報を削除します。

構文

DBMS_STATS.DELETE_FIXED_OBJECTS_STATS (
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   force            BOOLEAN  DEFAULT FALSE);

パラメータ

表159-22 DELETE_FIXED_OBJECTS_STATSプロシージャのパラメータ

パラメータ 説明

stattab

現在の統計情報を削除する場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接削除されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)。これは、stattabNULLでない場合のみ適用可能です。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

TRUEに設定されている場合、オブジェクトの統計情報がロックされていても、それを無視して統計情報を削除します。

使用上のノート

このプロシージャを実行するには、SYSDBAまたはANALYZE ANY DICTIONARYシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.19 DELETE_INDEX_STATSプロシージャ

このプロシージャは、索引に関連する統計情報を削除します。

構文

DBMS_STATS.DELETE_INDEX_STATS (
   ownname          VARCHAR2, 
   indname          VARCHAR2,
   partname         VARCHAR2 DEFAULT NULL,
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   cascade_parts    BOOLEAN  DEFAULT TRUE,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   stattype         VARCHAR2 DEFAULT 'ALL',
   force            BOOLEAN  DEFAULT FALSE);
   stat_category    VARCHAR2 DEFAULT DEFAULT_DEL_STAT_CATEGORY); 

パラメータ

表159-23 DELETE_INDEX_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

indname

索引の名前

partname

統計情報を削除する索引パーティションの名前。索引がパーティション化されていて、partnameNULLの場合、索引統計情報はグローバル・レベルで削除されます。

stattab

統計情報を削除する場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接削除されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

cascade_parts

索引がパーティション化されていて、partnameNULLの場合、このパラメータをTRUEに設定すると、基礎となるすべてのパーティションについても索引の統計情報が削除されます。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattype

統計タイプ。

force

この引数の値がTRUEの場合、索引の統計情報は、ロックされていても削除されます。

stat_category

削除する統計情報。これは、カンマで区切られた複数の値を受け入れます。

  • OBJECT_STATS: 表、列および索引の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

デフォルトは'OBJECT_STATS, SYNOPSES'です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20005: オブジェクト統計はロックされています

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.20 DELETE_PENDING_STATSプロシージャ

このプロシージャは、収集され、パブリッシュされなかった保留中の統計情報を削除するために使用されます。

構文

DBMS_STATS.DELETE_PENDING_STATS (
    ownname    IN  VARCHAR2  DEFAULT USER,
    tabname    IN  VARCHAR2);

パラメータ

表159-24 DELETE_PENDING_STATSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

tabname

表名

セキュリティ・モデル

このプロシージャを実行するには、このプロシージャの影響を受ける表の統計情報を収集する権限と同じ権限を持っている必要があります。デフォルトの所有者は、このプロシージャを実行するユーザーです。

例外

ORA-20000: 権限が不十分です

使用上のノート

パラメータtabnameNULLの場合、指定したスキーマのすべての表に削除が適用されます。

DBMS_STATS.DELETE_PENDING_STATS('SH', 'SALES');

159.7.21 DELETE_PROCESSING_RATEプロシージャ

このファンクションは、指定した統計情報のソースの処理速度を削除します。ソースが指定されていない場合、すべてのソースの統計情報が削除されます。

構文

DBMS_STATS.DELETE_PROCESSING_RATE (
   stat_source      IN    VARCHAR2 DEFAULT NULL);

パラメータ

表159-25 DELETE_PROCESSING_RATEプロシージャのパラメータ

パラメータ 説明

stat_source

処理速度のソース。

使用上のノート

このプロシージャを実行するにはOPTIMIZER_PROCESSING_RATEロールが必要です。AUTO DOPは、処理速度を使用してSQL文の適切な並列度を判断するからです。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

159.7.22 DELETE_SCHEMA_PREFSプロシージャ

このプロシージャは、指定した所有者名で所有されているすべての表の統計プリファレンスを削除するために使用されます。

構文

DBMS_STATS.DELETE_SCHEMA_PREFS (
    ownname   IN   VARCHAR2,
    pname     IN   VARCHAR2);

パラメータ

表159-26 DELETE_SCHEMA_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

pname

プリファレンスの名前。次のプリファレンスの既存の値は削除でき、デフォルトのプリファレンス値が使用されます。

  • APPROXIMATE_NDV_ALGORITHM

  • AUTO_STAT_EXTENSIONS

  • CASCADE

  • DEGREE

  • ESTIMATE_PERCENT

  • GLOBAL_TEMP_TABLE_STATS

  • GRANULARITY

  • INCREMENTAL

  • INCREMENTAL_LEVEL

  • INCREMENTAL_STALENESS

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • TABLE_CACHED_BLOCKS

表159-27 統計プリファレンス

プリファレンス 説明

APPROXIMATE_NDV_ALGORITHM

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。個別値をサンプリングする内部管理構造としてシノプシスをみなすことができます。

次の値を設定できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。

AUTO_STAT_EXTENSIONS

データベース統計を収集する場合、拡張機能の自動作成を制御します。

次の値を設定できます。

  • ON - 適用可能な場合に、SQLプラン・ディレクティブでは、ワークロードの述語の列の使用に基づいて、列グループ統計の作成をトリガーできます。

  • OFF - データベースで列グループ統計が自動的に作成されることはありません。これらは、CREATE_EXTENDED_STATSファンクションが実行されたとき、またはDBMS_STATSMETHOD_OPT句で明示的に拡張統計情報が指定されたときにのみ作成されます。これはデフォルトです。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

指定した値によって、推定する行のパーセントが決定されます。

METHOD_OPT

列統計収集およびヒストグラムの作成が制御されます。グローバル、スキーマ、データベースまたはディクショナリのレベルでプリファレンスを設定する場合、FOR ALL構文のみが許可されます。

NO_INVALIDATE

指定した値によって、統計情報を収集する表の依存カーソルの無効化が制御されます。

GRANULARITY

指定した値によって、収集する統計情報の粒度が決定されます(表がパーティション化されている場合にのみ該当します)。

PUBLISH

指定した値によって、収集ジョブが完了した後、新しく収集された統計情報をパブリッシュするかどうかが決定されます。

INCREMENTAL

指定した値によって、全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、この値はどのシノプシスを収集するかを制御します。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - 適応サンプリング・シノプシスとHyperLogLogシノプシスの共存が許可されます。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

STALE_PERCENT

指定した値によって、表の統計情報が失効しているとみなされ、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。

GLOBAL_TEMP_TABLE_STATS

グローバル一時表に対して収集された統計情報を共有統計情報として格納するか、セッション統計情報として格納するかを制御します。

TABLE_CACHED_BLOCKS

索引のクラスタリング要因の収集時に表のバッファ・キャッシュにキャッシュされる平均ブロック数(予測値)。

OPTIONS

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。

セキュリティ・モデル

このプロシージャを実行するには、オブジェクト所有者であるか、あるいはSYSDBA権限またはANALYZE ANYシステム権限を持っている必要があります。

例外

ORA-20000: 権限が不十分です。/スキーマ"<schema>"は存在しません

ORA-20001: 入力値が無効です。

使用上のノート

すべての引数はVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲みます。

DBMS_STATS.DELETE_SCHEMA_PREFS('SH', 'CASCADE');
DBMS_STATS.DELETE_SCHEMA_PREFS('SH', 'ESTIMATE_PERCENT');
DBMS_STATS.DELETE_SCHEMA_PREFS('SH', 'DEGREE');

参照:

オプティマイザ統計プリファレンスの管理方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.23 DELETE_SCHEMA_STATSプロシージャ

このプロシージャは、スキーマ全体の統計情報を削除します。

構文

DBMS_STATS.DELETE_SCHEMA_STATS (
   ownname          VARCHAR2, 
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   force            BOOLEAN DEFAULT FALSE);

パラメータ

表159-28 DELETE_SCHEMA_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

stattab

統計情報を削除する場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接削除されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

この引数の値がTRUEの場合、スキーマ内の表の統計情報は、ロックされていても削除されます。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.24 DELETE_SYSTEM_STATSプロシージャ

このプロシージャは、stattabが指定されていない場合、ワークロード統計('INTERVAL'または'START'および'STOP'オプションを使用して収集)を削除し、デフォルトをnoworkload統計('NOWORKLOAD'オプションを使用して収集)にリセットします。stattabが指定されている場合、サブプログラムは、関連するstatidとともにすべてのシステム統計情報をstattabから削除します。

構文

DBMS_STATS.DELETE_SYSTEM_STATS (
   stattab       VARCHAR2 DEFAULT NULL, 
   statid        VARCHAR2 DEFAULT NULL,
   statown       VARCHAR2 DEFAULT NULL);

パラメータ

表159-29 DELETE_SYSTEM_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報が保存されるユーザー統計表の識別子。

statid

stattabに保存された統計情報に関連付けられた、オプションの識別子。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

使用上のノート

このプロシージャを実行するには、GATHER_SYSTEM_STATISTICSロールが必要です。

159.7.25 DELETE_TABLE_PREFSプロシージャ

このプロシージャは、指定したスキーマ内の指定した表のオプティマイザ統計プリファレンスを削除します。

構文

DBMS_STATS.DELETE_TABLE_PREFS (
    ownname    IN  VARCHAR2,
    tabname    IN  VARCHAR2,
    pname      IN  VARCHAR2);

パラメータ

表159-30 DELETE_TABLE_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

tabname

表名

pname

プリファレンスの名前。次のプリファレンスの既存の値は削除でき、デフォルトのプリファレンス値が使用されます。

  • APPROXIMATE_NDV_ALGORITHM

  • AUTO_STAT_EXTENSIONS

  • CASCADE

  • DEGREE

  • ESTIMATE_PERCENT

  • GRANULARITY

  • GLOBAL_TEMP_STATS

  • INCREMENTAL

  • INCREMENTAL_LEVEL

  • INCREMENTAL_STALENESS

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • STAT_CATEGORY

  • TABLE_CACHED_BLOCKS

表159-31 統計プリファレンス

プリファレンス 説明

APPROXIMATE_NDV_ALGORITHM

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。シノプシスを、個別値をサンプリングする内部管理構造とみなします。

次のプリファレンスを削除できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。既存のパフォーマンスが許容範囲であり、レガシー・コンテンツを再フォーマットするパフォーマンス・コストを発生させたくない場合、この方法が有益です。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。これは最も保守的なオプションです。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。動的サンプリングとは対照的に、HyperLogLogアルゴリズムはランダム化手法を使用します。適応サンプリングと比較したHyperLogLogの利点は次のとおりです。

    • 新しいアルゴリズムの正確性は、元のアルゴリズムと似ています。

    • 必要なメモリーは非常に少なく、一般的にシノプシス・サイズの大幅な削減につながります。

AUTO_STAT_EXTENSIONS

データベース統計を収集する場合、拡張機能の自動作成を制御します。

次の値を設定できます。

  • ON - 適用可能な場合に、SQLプラン・ディレクティブでは、ワークロードの述語の列の使用に基づいて、列グループ統計の作成をトリガーできます。

  • OFF - データベースで列グループ統計が自動的に作成されることはありません。これらは、CREATE_EXTENDED_STATSファンクションが実行されたとき、またはDBMS_STATSMETHOD_OPT句で明示的に拡張統計情報が指定されたときにのみ作成されます。これはデフォルトです。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

推定する行のパーセントが決定されます。

GRANULARITY

収集する統計情報の粒度が決定されます。この値は、パーティション表にのみ使用されます。

GLOBAL_TEMP_TABLE_STATS

グローバル一時表に対して収集された統計情報を共有統計情報として格納するか、セッション統計情報として格納するかを制御します。

INCREMENTAL

指定した値によって、全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、この値はどのシノプシスを収集するかを制御します。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - 適応サンプリング・シノプシスとHyperLogLogシノプシスの共存が許可されます。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

METHOD_OPT

列統計収集およびヒストグラムの作成が制御されます。グローバル、スキーマ、データベースまたはディクショナリのレベルでプリファレンスを設定する場合、FOR ALL構文のみが許可されます。

NO_INVALIDATE

指定した値によって、統計情報を収集する表の依存カーソルの無効化が制御されます。

OPTIONS

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。

PREFERENCE_OVERRIDES_PARAMETER

パラメータの入力値を、統計操作のそのパラメータのプリファレンス値でオーバーライドするかどうかを決定します。使用可能な値は、次のとおりです。

  • TRUE - 入力パラメータ値を無視し、対応するプリファレンスの値を使用します。

  • FALSE - 入力パラメータ値に従います。

このプリファレンスを指定すると、表、グローバルおよびデフォルトの優先順位が変更されません。

PUBLISH

統計情報収集ジョブが完了した後で、新しく収集された統計情報をパブリッシュするかどうかが決定されます。

STALE_PERCENT

表の統計情報が失効しているとみなされ、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。

STAT_CATEGORY

インポートまたはエクスポートする統計情報を指定します。カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • OBJECT_STATS: 表、列および索引(デフォルト)の統計情報

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'は、表統計情報、列統計情報、索引統計情報およびシノプシスを指定します。

TABLE_CACHED_BLOCKS

索引のクラスタリング要因の計算時にバッファ・キャッシュに格納される平均ブロック数(予測値)を指定します。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

使用上のノート

  • このプロシージャを実行するには、表の所有者として接続するか、あるいは表に対するANALYZE権限またはANALYZE ANYシステム権限を付与されている必要があります。

  • すべての引数はVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲みます。

DBMS_STATS.DELETE_TABLE_PREFS('SH', 'SALES', 'CASCADE');
DBMS_STATS.DELETE_TABLE_PREFS('SH', 'SALES', 'DEGREE');

参照:

オプティマイザ統計プリファレンスの管理方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.26 DELETE_TABLE_STATSプロシージャ

このプロシージャは、表に関連する統計情報を削除します。

構文

DBMS_STATS.DELETE_TABLE_STATS (
   ownname          VARCHAR2, 
   tabname          VARCHAR2, 
   partname         VARCHAR2 DEFAULT NULL,
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   cascade_parts    BOOLEAN  DEFAULT TRUE, 
   cascade_columns  BOOLEAN  DEFAULT TRUE,
   cascade_indexes  BOOLEAN  DEFAULT TRUE,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   force            BOOLEAN DEFAULT FALSE);

パラメータ

表159-32 DELETE_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

列が所属している表の名前。

partname

統計情報を取得する表(サブ・)パーティションの名前。表がパーティション化されていて、partnameNULLの場合、統計情報はグローバルな表レベルで取り出されます。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接取り出されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

cascade_parts

表がパーティション化されていて、partnameNULLの場合、このパラメータをTRUEに設定すると、基礎となるすべてのパーティションについても表の統計情報が削除されます。

cascade_columns

基礎となるすべての列について、DELETE_COLUMN_STATSをコールする必要があることを示します(cascade_partsパラメータを渡します)。

cascade_indexes

基礎となるすべての索引について、DELETE_INDEX_STATSをコールする必要があることを示します(cascade_partsパラメータを渡します)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

この引数の値がTRUEの場合、表の統計情報は、ロックされていても削除されます。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

ORA-20005: オブジェクト統計はロックされています

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.27 DIFF_TABLE_STATS_IN_HISTORYファンクション

このファンクションは、過去の2つのタイムスタンプからの表の統計情報の比較、およびそれらのタイムスタンプの時点の統計情報の比較を行うために使用できます。

構文

DBMS_STATS.DIFF_TABLE_STATS_IN_HISTORY( 
      ownname        IN  VARCHAR2,
      tabname        IN  VARCHAR2,
      time1          IN  TIMESTAMP WITH TIME ZONE,
      time2          IN  TIMESTAMP WITH TIME ZONE DEFAULT NULL,
      pctthreshold   IN  NUMBER  DEFAULT 10)
   RETURN DiffRepTab pipelined;

パラメータ

表159-33 DIFF_TABLE_STATS_IN_HISTORYファンクションのパラメータ

パラメータ 説明

ownname

表の所有者。現行のスキーマの場合は、NULLを指定します。

tabname

統計情報を比較する表。

time1

最初のタイムスタンプ1。

time2

2番目のタイムスタンプ2。

pctthreshold

このファンクションは、この制限を超えた場合にのみ統計情報の違いをレポートします。デフォルト値は10です。

セキュリティ・モデル

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

使用上のノート

2番目のタイムスタンプがNULLの場合、このファンクションは、ディクショナリ内の現在の統計情報と他のタイムスタンプの時点の統計情報を比較します。

159.7.28 DIFF_TABLE_STATS_IN_PENDINGファンクション

このファンクションは、保留中の統計情報とデータ・ディクショナリの現在の統計情報またはユーザー指定の統計の履歴を比較します。

構文

DBMS_STATS.DIFF_TABLE_STATS_IN_PENDING( 
      ownname        IN  VARCHAR2,
      tabname        IN  VARCHAR2,
      timestamp      IN  TIMESTAMP WITH TIME ZONE,
      pctthreshold   IN  NUMBER  DEFAULT 10)
RETURN DiffRepTab pipelined;

パラメータ

表159-34 DIFF_TABLE_STATS_IN_PENDINGファンクションのパラメータ

パラメータ 説明

ownname

表の所有者。現行のスキーマの場合は、NULLを指定します。

tabname

統計情報を比較する表。

timestamp

目的の統計情報に対応する、統計履歴のタイムスタンプ。タイムスタンプがNULLの場合、このファンクションは、ディクショナリ内の現在の統計情報と保留中の統計情報を比較します(デフォルト)。

pctthreshold

レポートの制限。このファンクションは、指定した制限を超えた場合にのみ統計情報の違いをレポートします。デフォルト値は10です。

セキュリティ・モデル

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.29 DIFF_TABLE_STATS_IN_STATTABファンクション

このファンクションは、ソースが異なる2つの表の統計情報を比較するために使用できます。

統計情報のソースは、次のいずれかです。

  • 2つの異なるユーザー統計表

  • statidsを使用して識別可能な2つの統計情報のセットが含まれている単一のユーザー統計表

  • ユーザー統計表とディクショナリ

このファンクションは、依存オブジェクト(索引、列、パーティション)の統計情報も比較します。また、統計情報の違いが特定のしきい値(%)を超えた場合に、両方のソースからオブジェクトの統計情報を表示します。しきい値は、ファンクションの引数として指定できます。最初のソース(stattab1またはtime1)に対応する統計情報が、差分のパーセントを計算する基礎として使用されます。

構文

DBMS_STATS.DIFF_TABLE_STATS_IN_STATTAB( 
      ownname        IN  VARCHAR2,
      tabname        IN  VARCHAR2,
      stattab1       IN  VARCHAR2,
      stattab2       IN  VARCHAR2 DEFAULT NULL,
      pctthreshold   IN  NUMBER  DEFAULT 10,
      statid1        IN  VARCHAR2 DEFAULT NULL,
      statid2        IN  VARCHAR2 DEFAULT NULL,
      stattab1own    IN  VARCHAR2 DEFAULT NULL,
      stattab2own    IN  VARCHAR2 DEFAULT NULL)
   RETURN DiffRepTab pipelined;

パラメータ

表159-35 DIFF_TABLE_STATS_IN_STATTABファンクションのパラメータ

パラメータ 説明

ownname

表の所有者。現行のスキーマの場合は、NULLを指定します。

tabname

統計情報を比較する表。

stattab1

ユーザー統計表1。

stattab2

ユーザー統計表2。NULLの場合、stattab1の統計情報は、ディクショナリ内の現在の統計情報と比較されます。これはデフォルトです。統計表内の2つのセットを比較するには、stattab1と同じ表を指定します(後述のstatidを参照)。

pctthreshold

このファンクションは、この制限を超えた場合にのみ統計情報の違いをレポートします。デフォルト値は10です。

stadid1

(オプション)stattab1内の統計情報セットを識別します。

stadid2

(オプション)stattab2内の統計情報セットを識別します。

stattab1own

stattab1が含まれているスキーマ(ownname以外の場合)。

stattab2own

stattab2が含まれているスキーマ(ownname以外の場合)。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.30 DROP_ADVISOR_TASKプロシージャ

このプロシージャは、指定したオプティマイザ統計アドバイザ・タスクを削除します。

構文

DBMS_STATS.DROP_ADVISOR_TASK (
  task_name IN VARCHAR2);

パラメータ

表159-36 DROP_ADVISOR_TASKプロシージャのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

例159-8 オプティマイザ統計アドバイザ・タスクの削除

この例では、my_taskというオプティマイザ統計アドバイザ・タスクを削除します。

EXEC DBMS_STATS.DROP_ADVISOR_TASK('my_task');

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.31 DROP_EXTENDED_STATSプロシージャ

このファンクションは、ユーザー指定の拡張に対して作成された統計情報エントリを削除します。

これによって、CREATE_EXTENDED_STATSファンクションの実行効果が取り消されます。

構文

DBMS_STATS.DROP_EXTENDED_STATS (
   ownname    VARCHAR2, 
   tabname    VARCHAR2,
   extension  VARCHAR2);

パラメータ

表159-37 DROP_EXTENDED_STATSプロシージャのパラメータ

パラメータ 説明

ownname

表の所有者名。

tabname

表の名前

extension

列グループまたは式を指定できます。指定した表に、列c1およびc2があるとします。たとえば、列グループは"(c1, c2)"、式は"(c1 + c2)"のようになります。

例外

  • ORA-20000: 権限が不十分であるか、または拡張が存在しません。

  • ORA-20001: 拡張の処理中にエラーが発生しました。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • 拡張に対して拡張統計情報セットが作成されない場合、このファンクションはエラーをスローします。

159.7.32 DROP_STAT_TABLEプロシージャ

このプロシージャは、ユーザー統計表を削除します。

構文

DBMS_STATS.DROP_STAT_TABLE (
   ownname VARCHAR2, 
   stattab VARCHAR2);

パラメータ

表159-38 DROP_STAT_TABLEプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

stattab

ユーザー統計表の識別子。

例外

ORA-20000: 表が存在しないか、権限が不十分です。

使用上のノート

このプロシージャを起動するには、指定した表を削除する権限が必要です。

159.7.33 EXECUTE_ADVISOR_TASKファンクション

このファンクションは、以前に作成されたオプティマイザ統計アドバイザ・タスクを実行します。

構文

DBMS_STATS.EXECUTE_ADVISOR_TASK (
   task_name        IN   VARCHAR2,
   execution_name   IN   VARCHAR2 := NULL)
 RETURN VARCHAR2;

パラメータ

表159-39 EXECUTE_ADVISOR_TASKのパラメータ

パラメータ 説明
task_name

オプティマイザ統計アドバイザ・タスクの名前。

execution_name

アドバイザの実行を修飾して識別する名前。指定しない場合、アドバイザによって自動的に生成されます。

指定した実行が既存の実行名と競合する場合は、ファンクションでエラーが戻されます。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • 事前定義されたAUTO_STATS_ADVISOR_TASKでこのサブプログラムを実行できます。

  • このサブプログラムは実行者権限を使用して実行します。

このタスクの実行結果は、実行しているユーザーの権限に依存します。

  • SYSTEMレベル

    ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーのみが、このタスクをシステム・レベルのルールで実行できます。

  • 操作レベル

    結果は次の権限に依存します。

    • ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーが、このタスクをすべての統計操作に実行できます。

    • ANALYZE ANY権限はあるがANALYZE ANY DICTIONARY権限はないユーザーが、このタスクをSYS以外のすべてのスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY DICTIONARY権限はあるがANALYZE ANY権限はないユーザーが、このタスクを独自のスキーマおよびSYSスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY権限もANALYZE ANY DICTIONARY権限もないユーザーのみが、この操作を独自のスキーマに関連した統計操作に実行できます。

  • オブジェクト・レベル

    ユーザーは、統計収集権限を持つすべてのオブジェクトにこのタスクを実行できます。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

戻り値

このファンクションは、新しい実行の名前を戻します。

使用上のノート

実行の結果は、ユーザー権限とルールのタイプに応じて異なります。

  • システム

    システム・レベルのルールで操作を実行するには、ANALYZE ANYANALYZE ANY DICTIONARYの両方の権限が必要です。

  • 操作

    ANALYZE ANY権限もANALYZE ANY DICTIONARY権限も持っている場合、すべての操作にこのファンクションを実行できます。ANALYZE ANY権限のみを持っている場合、SYSを除く任意のスキーマに関連した操作にこのファンクションを実行できます。ANALYZE ANY DICTIONARY権限のみを持っている場合、SYSを含む任意のスキーマに関連した操作にこのファンクションを実行できます。ANALYZE ANY権限もANALYZE ANY DICTIONARY権限も持っていない場合、独自のスキーマの操作にのみこのファンクションを実行できます。

  • オブジェクト

    オブジェクトの統計情報を収集する権限がある場合は、そのオブジェクトにこのファンクションを実行できます。

例159-9 タスクの作成および実行

この例では、my_taskというオプティマイザ統計アドバイザ・タスクを作成して実行します。

DECLARE
  v_tname   VARCHAR2(128) := 'my_task';
BEGIN
  -- create a task
  v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
  -- execute the task
  v_tname := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.34 EXPORT_COLUMN_STATSプロシージャ

このプロシージャは、特定の列に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

構文

DBMS_STATS.EXPORT_COLUMN_STATS (
   ownname  VARCHAR2, 
   tabname  VARCHAR2, 
   colname  VARCHAR2, 
   partname VARCHAR2 DEFAULT NULL,
   stattab  VARCHAR2, 
   statid   VARCHAR2 DEFAULT NULL,
   statown  VARCHAR2 DEFAULT NULL);

パラメータ

表159-40 EXPORT_COLUMN_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

列が所属している表の名前。

colname

列または拡張の名前。

partname

表パーティション名。表がパーティション化されていて、partnameNULLの場合、グローバルでパーティション化された列の統計情報がエクスポートされます。

stattab

統計情報の格納場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.35 EXPORT_DATABASE_PREFSプロシージャ

このプロシージャは、Oracleによって所有されている表を除き、すべての表の統計プリファレンスをエクスポートするために使用されます。これらの表は、add_sysパラメータにTRUEを渡すことによって含めることができます。

構文

DBMS_STATS.EXPORT_DATABASE_PREFS (
    stattab    IN  VARCHAR2,
    statid     IN  VARCHAR2 DEFAULT NULL,
    statown    IN  VARCHAR2 DEFAULT NULL
    add_sys    IN  BOOLEAN DEFAULT FALSE);

パラメータ

表159-41 EXPORT_DATABASE_PREFSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報のエクスポート先となる統計表の名前。

statid

(オプション)stattab内の統計情報を関連付ける識別子。

statown

stattabが含まれているスキーマ(ownname以外の場合)。

add_sys

TRUEを指定すると、Oracle所有の表が含まれます。

例外

ORA-20000: 権限が不十分です

使用上のノート

  • このプロシージャを実行するには、SYSDBAロール、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

  • すべての引数はVARCHAR2タイプです。値は引用符で囲みます。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

DBMS_STATS.EXPORT_DATABASE_PREFS('STATTAB', statown=>'SH');

159.7.36 EXPORT_DATABASE_STATSプロシージャ

このプロシージャは、データベース内のすべてのオブジェクトに関する統計情報を取り出し、statown.stattabで識別されるユーザー統計表に格納します。

構文

DBMS_STATS.EXPORT_DATABASE_STATS (
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   statown         VARCHAR2 DEFAULT NULL,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-42 EXPORT_DATABASE_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報の格納場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

stat_category

インポートする統計情報を指定し、カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • 'OBJECT_STATS': 表、列および索引(デフォルト)の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'が指定されると、表統計情報、列統計情報、索引統計情報およびシノプシスが削除されます。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.37 EXPORT_DICTIONARY_STATSプロシージャ

このプロシージャは、すべてのディクショナリのスキーマ('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

構文

DBMS_STATS.EXPORT_DICTIONARY_STATS (
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   statown         VARCHAR2 DEFAULT NULL,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-43 EXPORT_DICTIONARY_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報の格納場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

stat_category

インポートする統計情報を指定し、カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • 'OBJECT_STATS': 表、列および索引(デフォルト)の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'が指定されると、表統計情報、列統計情報、索引統計情報およびシノプシスが削除されます。

使用上のノート

  • このプロシージャを実行するには、SYSDBAか、ANALYZE ANY DICTIONARYANALYZE ANYのシステム権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.38 EXPORT_FIXED_OBJECTS_STATSプロシージャ

このプロシージャは、固定表に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

構文

DBMS_STATS.EXPORT_FIXED_OBJECTS_STATS (
   stattab  VARCHAR2, 
   statid   VARCHAR2 DEFAULT NULL,
   statown  VARCHAR2 DEFAULT NULL);

パラメータ

表159-44 EXPORT_FIXED_OBJECTS_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報の格納場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

使用上のノート

  • このサブプログラムを起動するには、SYSとして接続するか、あるいはANALYZE ANY DICTIONARY権限またはSYSDBA権限を持っている必要があります。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.39 EXPORT_INDEX_STATSプロシージャ

このプロシージャは、特定の索引に関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

構文

DBMS_STATS.EXPORT_INDEX_STATS (
   ownname  VARCHAR2, 
   indname  VARCHAR2, 
   partname VARCHAR2 DEFAULT NULL,
   stattab  VARCHAR2, 
   statid   VARCHAR2 DEFAULT NULL,
   statown  VARCHAR2 DEFAULT NULL);

パラメータ

表159-45 EXPORT_INDEX_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

indname

索引の名前

partname

索引パーティション名。索引がパーティション化されていて、partnameNULLの場合、グローバルでパーティション化された索引統計情報がエクスポートされます。

stattab

統計情報の格納場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.40 EXPORT_PENDING_STATSプロシージャ

このプロシージャは、保留中として収集および格納された統計情報をエクスポートするために使用されます。

構文

DBMS_STATS.EXPORT_PENDING_STATS (
    ownname    IN  VARCHAR2  DEFAULT USER,
    tabname    IN  VARCHAR2,
    stattab    IN  VARCHAR2,
    statid     IN  VARCHAR2 DEFAULT NULL,
    statown    IN  VARCHAR2 DEFAULT USER);

パラメータ

表159-46 EXPORT_PENDING_STATSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

tabname

表名

stattab

統計情報のエクスポート先となる統計表の名前。

statid

(オプション)stattab内の統計情報を関連付ける識別子。

statown

stattabが含まれているスキーマ(ownname以外の場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • パラメータtabnameNULLの場合、指定したスキーマのすべての表にエクスポートが適用されます。

  • デフォルトの所有者/スキーマは、このプロシージャを実行するユーザーです。

  • このプロシージャを実行するには、このプロシージャによって処理される表の統計情報を収集する権限と同じ権限を持っている必要があります。

  • すべての引数はVARCHAR2タイプです。値は引用符で囲みます。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

DBMS_STATS.EXPORT_PENDING_STATS(NULL, NULL, 'MY_STAT_TABLE');

159.7.41 EXPORT_SCHEMA_PREFSプロシージャ

このプロシージャは、指定した所有者名で所有されているすべての表の統計プリファレンスをエクスポートするために使用されます。

構文

DBMS_STATS.EXPORT_SCHEMA_PREFS (
    ownname    IN  VARCHAR2,
    stattab    IN  VARCHAR2,
    statid     IN  VARCHAR2 DEFAULT NULL,
    statown    IN  VARCHAR2 DEFAULT NULL);

パラメータ

表159-47 EXPORT_SCHEMA_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

stattab

統計情報のエクスポート先となる統計表の名前。

statid

(オプション)stattab内の統計情報を関連付ける識別子。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを実行するには、所有者として接続するか、あるいはSYSDBA権限またはANALYZE ANYシステム権限を持っている必要があります。

  • すべての引数はVARCHAR2タイプです。値は引用符で囲みます。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

DBMS_STATS.EXPORT_SCHEMA_PREFS('SH', 'STAT');

159.7.42 EXPORT_SCHEMA_STATSプロシージャ

このプロシージャは、ownnameで識別されるスキーマ内のすべてのオブジェクトに関する統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

構文

DBMS_STATS.EXPORT_SCHEMA_STATS (
   ownname         VARCHAR2,
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   statown         VARCHAR2 DEFAULT NULL,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-48 EXPORT_SCHEMA_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

stattab

統計情報の格納場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

stat_category

インポートする統計情報を指定し、カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • 'OBJECT_STATS': 表、列および索引(デフォルト)の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'が指定されると、表統計情報、列統計情報、索引統計情報およびシノプシスが削除されます。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.43 EXPORT_SYSTEM_STATSプロシージャ

このプロシージャは、システムの統計情報を取り出し、stattabで識別されるユーザー統計表に格納します。

構文

DBMS_STATS.EXPORT_SYSTEM_STATS (
   stattab       VARCHAR2, 
   statid        VARCHAR2 DEFAULT NULL,
   statown       VARCHAR2 DEFAULT NULL);

パラメータ

表159-49 EXPORT_SYSTEM_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報を格納する場所を記述したユーザー統計表の識別子。

statid

stattabに格納された統計情報に関連付けられた、オプションの識別子。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

セキュリティ・モデル

このプロシージャを実行するには、GATHER_SYSTEM_STATISTICSロールが必要です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

ORA-20003: システムの統計情報をエクスポートできません。

使用上のノート

Oracle Databaseでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.44 EXPORT_TABLE_PREFSプロシージャ

このプロシージャは、指定したスキーマ内の指定した表の統計プリファレンスを、指定した統計表にエクスポートするために使用されます。

構文

DBMS_STATS.EXPORT_TABLE_PREFS (
    ownname    IN  VARCHAR2,
    tabname    IN  VARCHAR2,
    stattab    IN  VARCHAR2,
    statid     IN  VARCHAR2 DEFAULT NULL,
    statown    IN  VARCHAR2 DEFAULT NULL);

パラメータ

表159-50 EXPORT_TABLE_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

tabname

表名

stattab

統計情報のエクスポート先の統計表の名前。

statid

stattab内の統計情報を関連付けるオプションの識別子。

statown

stattabが含まれているスキーマ(ownname以外の場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを実行するには、その表の所有者として接続するか、またはANALYZE ANYシステム権限を持っている必要があります。

  • すべての引数はVARCHAR2タイプです。値は引用符で囲みます。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

DBMS_STATS.EXPORT_TABLE_PREFS('SH', 'SALES', 'STAT');

159.7.45 EXPORT_TABLE_STATSプロシージャ

このプロシージャは、特定の表に関する統計情報を取り出し、ユーザー統計表に格納します。cascadeを使用すると、指定した表に関連付けられているすべての索引統計情報もエクスポートされます。

構文

DBMS_STATS.EXPORT_TABLE_STATS (
   ownname         VARCHAR2, 
   tabname         VARCHAR2, 
   partname        VARCHAR2 DEFAULT NULL,
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   cascade         BOOLEAN  DEFAULT TRUE,
   statown         VARCHAR2 DEFAULT NULL,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-51 EXPORT_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

表の名前

partname

表パーティション名。表がパーティション化されていて、partnameNULLの場合、グローバルでパーティション化された表の統計情報がエクスポートされます。

stattab

統計情報の格納場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

cascade

TRUEの場合は、この表の列と索引の統計情報もまたエクスポートされます。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

stat_category

インポートまたはエクスポートする統計情報を指定します。カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • OBJECT_STATS: 表、列および索引(デフォルト)の統計情報

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'は、表統計情報、列統計情報、索引統計情報およびシノプシスを指定します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.46 FLUSH_DATABASE_MONITORING_INFOプロシージャ

このプロシージャは、すべての表の監視情報をディクショナリに保存します。*_TAB_MODIFICATIONS*_TAB_STATISTICSおよび*_IND_STATISTICSのビューの対応するエントリは、すぐに更新されます。

構文

DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO; 

セキュリティ・モデル

このプロシージャを実行するには、ANALYZE_ANYシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

使用上のノート

Oracle Database 12cリリース2 (12.2)以降では、*_TAB_STATISTICS*_IND_STATISTICSのビューにはSGAにキャッシュされた統計情報およびディスクに格納されている統計情報が表示されるため、FLUSH_DATABASE_MONITORING_INFOをコールしてこれらのビューに最新情報を表示する必要はありません。GATHER_*_STATSプロシージャでは監視情報が内部処理で自動的にディスクに保存されるため、統計情報の収集前にこのプロシージャを実行する必要はありません。

参照:

オプティマイザ統計プリファレンスの設定方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.47 GATHER_DATABASE_STATSプロシージャ

このプロシージャは、データベース内のすべてのオブジェクトに関する統計情報を収集します。

構文

DBMS_STATS.GATHER_DATABASE_STATS (
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')),
   block_sample     BOOLEAN  DEFAULT FALSE,
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   options          VARCHAR2 DEFAULT 'GATHER',
   objlist          OUT      ObjectTab,
   statown          VARCHAR2 DEFAULT NULL,
   gather_sys       BOOLEAN  DEFAULT TRUE,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   obj_filter_list ObjectTab DEFAULT NULL);

DBMS_STATS.GATHER_DATABASE_STATS (
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')), 
   block_sample     BOOLEAN  DEFAULT FALSE,
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   options          VARCHAR2 DEFAULT 'GATHER',
   statown          VARCHAR2 DEFAULT NULL,
   gather_sys       BOOLEAN  DEFAULT TRUE,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   obj_filter_list ObjectTab DEFAULT NULL);

パラメータ

表159-52 GATHER_DATABASE_STATSプロシージャのパラメータ

パラメータ 説明

estimate_percent

サンプリングする行のパーセントが決定されます。

有効範囲は0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、最適な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。

デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

block_sample

ランダム・ブロック・サンプリング(TRUE)を使用するか、ランダム行サンプリング(FALSE)を使用するかを決定します。デフォルトはFALSEです。

ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。このパラメータは、統計情報の推定時にのみ使用されます。

method_opt

グローバル、スキーマ、データベース、またはディクショナリの各レベルでプリファレンスを設定する場合は、'FOR ALL'構文のみが使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します。
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

統計情報を収集する場合に使用される並列度が決定されます。

degreeのデフォルトはNULLです。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャ、SET_GLOBAL_PREFSプロシージャ、SET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。

初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1 (シリアル実行)からDEFAULT_DEGREE (CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の細分化(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します

cascade

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

このオプションを指定することは、表の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。索引の統計情報を収集する必要があるかどうかをデータベースが決定できるようにするには、定数DBMS_STATS.AUTO_CASCADEを使用します。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャ、SET_GLOBAL_PREFSプロシージャ、SET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

統計表は、分析するオブジェクトと同じスキーマに常駐するとみなされるので、各スキーマにこのオプションを使用するための表が1つ必要です。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

options

統計情報を収集する必要があるオブジェクトを指定します。有効な値は次のとおりです。

  • GATHER: データベース内のすべてのオブジェクトに関する統計情報を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。

    データベースで、新しい統計情報を必要とするオブジェクトを暗黙的に判別し、その統計情報を収集する方法を判別します。GATHER AUTOが指定された場合、有効な追加パラメータはcomp_idno_invalidatestattabstatidおよびstatownのみで、その他のパラメータ設定はすべて無視されます。また、処理されたオブジェクトのリストも戻します。

  • GATHER STALE: *_TAB_MODIFICATIONSビューを問い合せて、失効オブジェクトの統計情報を収集します。また、失効と判別されたオブジェクトのリストも戻します。

  • GATHER EMPTY: 現在統計情報がないオブジェクトの統計情報を収集します。また、統計情報がないオブジェクトのリストも戻します。

  • LIST AUTO - GATHER AUTOを使用して処理されるオブジェクトのリストを戻します。

  • LIST STALE - *_TAB_MODIFICATIONSビューを調べて判別した失効オブジェクトのリストを戻します。

  • LIST EMPTY - 現在統計情報がないオブジェクトのリストを戻します。

objlist

失効または空と判別されたオブジェクトのリスト。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

gather_sys

SYSユーザーが所有するオブジェクトの統計情報を収集します。

no_invalidate

統計情報を収集する表の依存カーソルの無効化が制御されます。デフォルトはDBMS_STATS.AUTO_INVALIDATEで、データベースによって依存カーソルを無効化するタイミングが決定されます。

TRUEに設定されている場合、データベースによって依存カーソルが無効化されることはありません。FALSEに設定されている場合、このプロシージャによって依存カーソルがすぐに無効化されます。

obj_filter_list

オブジェクト・フィルタのリスト。指定された場合、GATHER_DATABASE_STATSは、必要に応じて、リスト内の1つ以上のオブジェクト・フィルタを満たすオブジェクトについてのみ統計情報を収集します。1つのオブジェクト・フィルタで、オブジェクト属性に対する制約を指定できます。オブジェクト・フィルタに指定する属性値は、二重引用符で囲まないかぎり、大/小文字が区別されません。属性値には、ワイルドカードを使用できます。1つのオブジェクト・フィルタで、属性a1、a2、...に対してNULL以外の値s1、s2、...が指定されているとします。(o.a1 like s1)または(o.a2 like s2)または...がTRUEの場合、オブジェクトoはこのオブジェクト・フィルタを満たすとみなされます。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

使用上のノート

このプロシージャを実行するには、SYSDBAロールまたはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

GATHER AUTOオプションを使用する場合、全体スキャンではなくサンプルを使用して頻度ヒストグラムが作成されます。次に、GATHER AUTOを使用するシナリオを示します。

  • 表は次のように作成されます: CREATE TABLE NEWTAB as SELECT * FROM ....

    これにより、NEWTABに関する統計情報が作成されますが、ヒストグラムは作成されません。

  • 次に、DBAはGATHER AUTOを使用してgather_table_statsのヒストグラムを作成します。

  • 全体表スキャンではなくサンプルを使用して、NEWTABFREQUENCYヒストグラムが作成されます。

159.7.48 GATHER_DICTIONARY_STATSプロシージャ

このプロシージャは、ディクショナリのスキーマ(SYSSYSTEMおよびRDBMSコンポーネントのスキーマ)に関する統計情報を収集します。

構文

DBMS_STATS.GATHER_DICTIONARY_STATS (
   comp_id          VARCHAR2 DEFAULT NULL, 
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')),
   block_sample     BOOLEAN  DEFAULT FALSE,
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   options          VARCHAR2 DEFAULT 'GATHER AUTO', 
   objlist    OUT   ObjectTab,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   obj_filter_list ObjectTab DEFAULT NULL);

DBMS_STATS.GATHER_DICTIONARY_STATS (
   comp_id           VARCHAR2 DEFAULT NULL,
   estimate_percent  NUMBER DEFAULT 
                          to_estimate_percent_type(GET_PARAM('ESTIMATE_PERCENT')),
   block_sample      BOOLEAN DEFAULT FALSE,
   method_opt        VARCHAR2 DEFAULT GET_PARAM('METHOD_OPT'),
   degree            NUMBER DEFAULT to_degree_type(GET_PARAM('DEGREE')),
   granularity       VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
   cascade           BOOLEAN DEFAULT to_cascade_type(GET_PARAM('CASCADE')),
   stattab           VARCHAR2 DEFAULT NULL, 
   statid            VARCHAR2 DEFAULT NULL,
   options           VARCHAR2 DEFAULT 'GATHER AUTO', 
   statown           VARCHAR2 DEFAULT NULL,
   no_invalidate     BOOLEAN DEFAULT
                               to_no_invalidate_type(get_param('NO_INVALIDATE')),
   obj_filter_list   ObjectTab DEFAULT NULL);

パラメータ

表159-53 GATHER_DICTIONARY_STATSプロシージャのパラメータ

パラメータ 説明

comp_id

分析するスキーマのコンポーネントID。NULLの場合、すべてのRDBMSコンポーネントのスキーマが分析されます。DBA_REGISTRYビューのCOMP_ID列を参照してください。このプロシージャでは、引数の指定内容に関係なく、SYSスキーマとSYSTEMスキーマの統計情報を常に収集します。

estimate_percent

推定する行のパーセント(NULLは計算を意味します)。有効な範囲は、0.000001から100([0.000001,100])です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズがOracleにより決定されます。これがデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します

block_sample

ランダム行サンプリングのかわりにランダム・ブロック・サンプリングを使用するかどうかを決定します。ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。統計情報の推定を実行した場合にのみ該当します。

method_opt

メソッド・オプション。このパラメータには次の値を使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します。
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

並列度。degreeのデフォルトはNULLです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1(シリアル実行)からDEFAULT_DEGREE(CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の細分化(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

cascade

索引に関する統計情報も収集します。索引の統計情報の収集は、並列処理されません。このオプションを使用することは、表と列の統計情報の収集に加えて、スキーマ内の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。索引の統計情報を収集するかどうかをOracleが決定できるようにするには、定数DBMS_STATS.AUTO_CASCADEを使用します。これがデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

options

統計情報を収集する必要があるオブジェクトを指定します。有効な値は次のとおりです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。これはデフォルトです。

    データベースで、新しい統計情報を必要とするオブジェクトを暗黙的に判別し、その統計情報を収集する方法を判別します。GATHER AUTOが指定された場合、有効な追加パラメータはcomp_idno_invalidatestattabstatidおよびstatownのみで、その他のパラメータ設定はすべて無視されます。また、処理されたオブジェクトのリストも戻します。

  • GATHER: 関連するスキーマ内のすべてのオブジェクトに関する統計情報を収集します。

  • GATHER STALE: *_TAB_MODIFICATIONSビューを問い合せて、失効オブジェクトの統計情報を収集します。また、失効と判別されたオブジェクトのリストも戻します。

  • GATHER EMPTY: 現在統計情報がないオブジェクトの統計情報を収集します。また、統計情報がないオブジェクトのリストも戻します。

  • LIST AUTO - GATHER AUTOを使用して処理されるオブジェクトのリストを戻します。

  • LIST STALE - *_TAB_MODIFICATIONSビューを調べて判別した失効オブジェクトのリストを戻します。

  • LIST EMPTY - 現在統計情報がないオブジェクトのリストを戻します。

objlist

失効または空と判別されたオブジェクトのリスト。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。依存カーソルを無効化するタイミングをOracleが決定できるようにするには、DBMS_STATS.AUTO_INVALIDATEを使用します。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

obj_filter_list

オブジェクト・フィルタのリスト。指定された場合、必要に応じて、リスト内の1つ以上のオブジェクト・フィルタを満たすオブジェクトについてのみ統計情報を収集します。1つのオブジェクト・フィルタで、オブジェクト属性に対する制約を指定できます。オブジェクト・フィルタに指定する属性値は、二重引用符で囲まないかぎり、大/小文字が区別されません。属性値には、ワイルドカードを使用できます。1つのオブジェクト・フィルタで、属性a1、a2、...に対してNULL以外の値s1、s2、...が指定されているとします。(o.a1 like s1)、(o.a2 like s2)、...がTRUEの場合、オブジェクトoはこのオブジェクト・フィルタを満たすとみなされます。詳細は、「オブジェクト・フィルタ・リストの適用」を参照してください。

使用上のノート

このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

GATHER AUTOオプションを使用する場合、全体スキャンではなくサンプルを使用して頻度ヒストグラムが作成されます。次に、GATHER AUTOを使用するシナリオを示します。

  • 表は次のように作成されます: CREATE TABLE NEWTAB as SELECT * FROM ....

    これにより、NEWTABに関する統計情報が作成されますが、ヒストグラムは作成されません。

  • 次に、DBAはGATHER AUTOを使用してgather_table_statsのヒストグラムを作成します。

  • 全体表スキャンではなくサンプルを使用して、NEWTABFREQUENCYヒストグラムが作成されます。

例外

ORA-20000: 索引が存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.49 GATHER_FIXED_OBJECTS_STATSプロシージャ

このプロシージャは、すべての固定オブジェクト(動的パフォーマンス表)に関する統計情報を収集します。

構文

DBMS_STATS.GATHER_FIXED_OBJECTS_STATS (
   stattab        VARCHAR2 DEFAULT NULL,
   statid         VARCHAR2 DEFAULT NULL,
   statown        VARCHAR2 DEFAULT NULL, 
   no_invalidate  BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE'))); 

パラメータ

表159-54 GATHER_FIXED_OBJECTS_STATSプロシージャのパラメータ

パラメータ 説明

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

使用上のノート

このプロシージャを実行するには、SYSDBAまたはANALYZE ANY DICTIONARYシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.50 GATHER_INDEX_STATSプロシージャ

このプロシージャは、索引の統計情報を収集します。これは、可能なかぎり多くの作業をパラレル化します。

個々のパラメータで説明するように、いくつかの制限があります。この操作では、クラスタ索引、ドメイン索引、ビットマップ結合索引など、特定タイプの索引でのパラレル化は行いません。granularity引数およびno_invalidate引数は、これらのタイプの索引とは関係がありません。

構文

DBMS_STATS.GATHER_INDEX_STATS (
   ownname          VARCHAR2, 
   indname          VARCHAR2, 
   partname         VARCHAR2 DEFAULT NULL,
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (GET_PARAM('ESTIMATE_PERCENT')),
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type 
                                               (GET_PARAM('NO_INVALIDATE')),
   force            BOOLEAN DEFAULT FALSE);

パラメータ

表159-55 GATHER_INDEX_STATSプロシージャのパラメータ

パラメータ 説明

ownname

分析する索引のスキーマ。

indname

索引の名前。

partname

パーティションの名前

estimate_percent

推定する行のパーセント(NULLは計算を意味します)。有効な範囲は、0.000001から100([0.000001,100])です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズがOracleにより決定されます。これがデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

degree

並列度。degreeのデフォルトはNULLです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1(シリアル実行)からDEFAULT_DEGREE(CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の細分化(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

ロックされている場合でも、オブジェクトの統計情報を収集します。

例外

ORA-20000: 索引が存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.51 GATHER_PROCESSING_RATEプロシージャ

このプロシージャは、interval分後に終了する処理率の収集ジョブを開始します。

構文

DBMS_STATS.GATHER_PROCESSING_RATE (
   gathering_mode      IN    VARCHAR2  DEFAULT 'START',
   interval            IN    NUMBER    DEFAULT  NULL);

パラメータ

表159-56 GATHER_PROCESSING_RATEプロシージャのパラメータ

パラメータ 説明

gathering_mode

モード: 'START'または'END''START'オプションで起動された場合、このモードはアクティブ・セッション履歴(ASH)に基づきます。'END'オプションで起動された場合には収集が停止されます。'START'で起動する場合、'interval'オプションを指定できます(オプション)。intervalを指定しない場合、このデフォルト値は60分に設定されます。

interval

処理を収集する必要がある時間間隔(分単位)。

使用上のノート

  • このプロシージャを実行するには、OPTIMIZER_PROCESSING_RATEロールが必要です。

  • AUTO DOPは、これらの処理率を使用して、SQL文の最適な並列度を決定します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

159.7.52 GATHER_SCHEMA_STATSプロシージャ

このプロシージャは、スキーマ内のすべてのオブジェクトに関する統計情報を収集します。

構文

DBMS_STATS.GATHER_SCHEMA_STATS ( 
   ownname          VARCHAR2, 
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')), 
   block_sample     BOOLEAN  DEFAULT FALSE, 
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')), 
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')), 
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL, 
   options          VARCHAR2 DEFAULT 'GATHER', 
   objlist          OUT      ObjectTab,
   statown          VARCHAR2 DEFAULT NULL, 
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
  force             BOOLEAN DEFAULT FALSE,
  obj_filter_list  ObjectTab DEFAULT NULL);
   
DBMS_STATS.GATHER_SCHEMA_STATS ( 
   ownname          VARCHAR2, 
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')), 
   block_sample     BOOLEAN  DEFAULT FALSE, 
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'), 
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')), 
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')), 
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL, 
   options          VARCHAR2 DEFAULT 'GATHER', 
   statown          VARCHAR2 DEFAULT NULL, 
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE'), 
   force            BOOLEAN DEFAULT FALSE,
   obj_filter_list  ObjectTab DEFAULT NULL);

パラメータ

表159-57 GATHER_SCHEMA_STATSプロシージャのパラメータ

パラメータ 説明

ownname

分析するスキーマ(NULLは現行のスキーマを意味します)。

estimate_percent

サンプリングする行のパーセントが決定されます。

有効範囲は0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、最適な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。

デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

block_sample

ランダム行サンプリングのかわりにランダム・ブロック・サンプリングを使用するかどうかを示します。ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。統計情報の推定を行った場合にのみ該当します。

method_opt

次を受け入れます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

並列度。degreeのデフォルトはNULLです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1(シリアル実行)からDEFAULT_DEGREE(CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の細分化(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

cascade

索引についても統計情報を収集します。このオプションを使用することは、表と列の統計情報の収集に加えて、スキーマ内の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。索引の統計情報を収集するかどうかをOracleが決定できるようにするには、定数DBMS_STATS.AUTO_CASCADEを使用します。これはデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

options

統計情報を収集する必要があるオブジェクトを指定します。有効な値は次のとおりです。

  • GATHER: スキーマ内のすべてのオブジェクトに関する統計情報を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。

    データベースで、新しい統計情報を必要とするオブジェクトを暗黙的に判別し、その統計情報を収集する方法を判別します。GATHER AUTOが指定された場合、有効な追加パラメータはcomp_idno_invalidatestattabstatidおよびstatownのみで、その他のパラメータ設定はすべて無視されます。また、処理されたオブジェクトのリストも戻します。

  • GATHER STALE: *_TAB_MODIFICATIONSビューを問い合せて、失効オブジェクトの統計情報を収集します。また、失効と判別されたオブジェクトのリストも戻します。

  • GATHER EMPTY: 現在統計情報がないオブジェクトの統計情報を収集します。また、統計情報がないオブジェクトのリストも戻します。

  • LIST AUTO - GATHER AUTOを使用して処理されるオブジェクトのリストを戻します。

  • LIST STALE - *_TAB_MODIFICATIONSビューを調べて判別した失効オブジェクトのリストを戻します。

  • LIST EMPTY - 現在統計情報がないオブジェクトのリストを戻します。

objlist

失効または空と判別されたオブジェクトのリスト。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

ロックされている場合でも、オブジェクトの統計情報を収集します。

obj_filter_list

オブジェクト・フィルタのリスト。指定された場合、GATHER_SCHEMA_STATSは、必要に応じて、リスト内の1つ以上のオブジェクト・フィルタを満たすオブジェクトについてのみ統計情報を収集します。1つのオブジェクト・フィルタで、オブジェクト属性に対する制約を指定できます。オブジェクト・フィルタに指定する属性値は、二重引用符で囲まないかぎり、大/小文字が区別されません。属性値には、ワイルドカードを使用できます。1つのオブジェクト・フィルタで、属性a1、a2、...に対してNULL以外の値s1、s2、...が指定されているとします。(o.a1 like s1)、(o.a2 like s2)、...がTRUEの場合、オブジェクトoはこのオブジェクト・フィルタを満たすとみなされます。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

GATHER AUTOオプションを使用する場合、全体スキャンではなくサンプルを使用して頻度ヒストグラムが作成されます。次に、GATHER AUTOを使用するシナリオを示します。

  • 表は次のように作成されます: CREATE TABLE NEWTAB as SELECT * FROM ....

    これにより、NEWTABに関する統計情報が作成されますが、ヒストグラムは作成されません。

  • 次に、DBAはGATHER AUTOを使用してgather_table_statsのヒストグラムを作成します。

  • 全体表スキャンではなくサンプルを使用して、NEWTABFREQUENCYヒストグラムが作成されます。

例外

ORA-20000: スキーマが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

オブジェクト・フィルタ・リストの適用

次の例では、表SH.SALESSH.COSTSが失効している場合、これらの表に対する統計情報が収集されるように指定します。

DECLARE
   filter_lst  DBMS_STATS.OBJECTTAB := DBMS_STATS.OBJECTTAB();
BEGIN
   filter_lst.extend(2);
   filter_lst(1).ownname := 'SH';
   filter_lst(1).objname := 'SALES';
   filter_lst(2).ownname := 'SH';
   filter_lst(2).objname := 'COSTS';
   DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'SH',obj_filter_list=>filter_lst);
 END;

159.7.53 GATHER_SYSTEM_STATSプロシージャ

このプロシージャは、システムの統計情報を収集します。

構文

DBMS_STATS.GATHER_SYSTEM_STATS (
   gathering_mode   VARCHAR2 DEFAULT 'NOWORKLOAD',
   interval         INTEGER  DEFAULT NULL,
   stattab          VARCHAR2 DEFAULT NULL,
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL);

パラメータ

表159-58 GATHER_SYSTEM_STATSプロシージャのパラメータ

パラメータ 説明

gathering_mode

データベースがシステム統計情報を収集するモードを指定します。使用可能な値は次のとおりです。

  • NOWORKLOAD

    データベースは、I/Oシステムのパフォーマンス特性を取得します。データベースのサイズにもよりますが、収集に数分間かかる場合があります。この時間の間に、データベースは、I/Oシステムに要するリード・シーク時間と転送速度の平均値を見積もります。このモードは、すべてのワークロードに適しています。

    ワークロードのシステム統計を正確に調整するには、STARTオプションとSTOPオプションを使用するか、またはINTERVALオプションを使用します。'NOWORKLOADとワークロード固有の統計情報(INTERVALを使用するか、STARTSTOPを使用して収集した統計情報)の両方を収集する場合、オプティマイザはワークロード統計情報を使用します。収集されるコンポーネントには、cpuspeednwioseektimおよびiotfrspeedが含まれます。

  • INTERVAL

    データベースは、指定された分単位の間隔でシステムのアクティビティを取得します。このパラメータは、intervalパラメータとの組合せで動作します。データベースは、ディクショナリまたはstattabでシステム統計情報を作成または更新します。予定よりも早く収集を停止する場合は、GATHER_SYSTEM_STATS (gathering_mode=>'STOP')を使用できます。収集されるコンポーネントには、maxthrslavethrcpuspeedsreadtimmreadtimおよびmbrcが含まれます。

  • START | STOP

    データベースは、指定された開始時間から停止時間の間にシステムのアクティビティを取得し、経過期間の統計情報を使用してディクショナリまたはstattabをリフレッシュします。データベースはINTERVAL値を無視します。収集されるコンポーネントには、maxthrslavethrcpuspeedsreadtimmreadtimおよびmbrcが含まれます。

  • EXADATA

    このモードでは、収集されたシステム統計情報で、Oracle Exadataの固有の機能(大きいI/Oサイズや高いI/Oスループットなど)が考慮されます。データベースでは、CPU速度に加えて、マルチブロック読取りカウントやI/Oスループットの統計が設定されます。

interval

システム統計情報を収集する分数を指定します。このパラメータが適用されるのは、gathering_mode='INTERVAL'の場合のみです。

stattab

データベースが統計情報を格納する表を指定します。

statid

stattabに保存された統計情報に関連付けられたオプションの識別子を指定します。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)を指定します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

ORA-20003: システムの統計情報を収集できません

ORA-20004: INTERVALモードでエラーが発生しました。システム・パラメータjob_queue_processes>0である必要があります。

使用上のノート

このプロシージャを実行するには、GATHER_SYSTEM_STATISTICSロールが必要です。

昼間OLTPトランザクションを処理するデータベース・アプリケーションを実行し、夜間にレポートを実行すると想定します。

昼間のシステムの統計情報を収集するには、720分間情報を収集します。収集した統計情報をMYSTATS表に格納します。

BEGIN
   DBMS_STATS.GATHER_SYSTEM_STATS (
      interval => 720,
      stattab  => 'mystats',
      statid   => 'OLTP');
END;

夜間のシステムの統計情報を収集するには、720分間情報を収集します。収集した統計情報をMYSTATS表に格納します。

BEGIN
   DBMS_STATS.GATHER_SYSTEM_STATS (
      interval => 720,
      stattab  => 'mystats',
      statid   => 'OLAP');
END;

収集した統計情報を使用して、ディクショナリを更新します。

VARIABLE   jobno   number;
BEGIN
   DBMS_JOB.SUBMIT (:jobno, 'DBMS_STATS.IMPORT_SYSTEM_STATS
   (''mystats'',''OLTP'');'
   sysdate, 'sysdate + 1');
   COMMIT;
END;

BEGIN
   DBMS_JOB.SUBMIT (:jobno, 'DBMS_STATS.IMPORT_SYSTEM_STATS
   (''mystats'',''OLAP'');'
   sysdate + 0.5, 'sysdate + 1');
   COMMIT;
END;

159.7.54 GATHER_TABLE_STATSプロシージャ

このプロシージャは、表、列および索引の統計情報を収集します。これは、可能なかぎり多くの作業をパラレル化しますが、個々のパラメータで説明するように、いくつかの制限があります。

構文

DBMS_STATS.GATHER_TABLE_STATS (
   ownname          VARCHAR2, 
   tabname          VARCHAR2, 
   partname         VARCHAR2 DEFAULT NULL,
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                  (get_param('ESTIMATE_PERCENT')),
   block_sample     BOOLEAN  DEFAULT FALSE,
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT  to_no_invalidate_type (
                                                      get_param('NO_INVALIDATE')),
   stattype         VARCHAR2 DEFAULT 'DATA',
   force            BOOLEAN  DEFAULT FALSE,
   context          DBMS_STATS.CCONTEXT DEFAULT NULL, -- non operative
   options          VARCHAR2 DEFAULT get_param('OPTIONS'));

パラメータ

表159-59 GATHER_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

表を含むスキーマ。

tabname

表の名前。

partname

パーティションの名前。

estimate_percent

サンプリングする行のパーセントが決定されます。

有効範囲は0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、最適な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。

デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

block_sample

ランダム・ブロック・サンプリング(TRUE)を使用するか、ランダム行サンプリング(FALSE)を使用するかを決定します。デフォルトはFALSEです。

ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。このパラメータは、統計情報の推定時にのみ使用されます。

method_opt

METHOD_OPT: グローバル、スキーマ、データベースまたはディクショナリのレベルでプリファレンスを設定する場合、'FOR ALL'構文のみが許可されます。これ以外の場合、method_optは、次のオプションのいずれかを使用するか、または両方を組み合せて使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

  • FOR COLUMNS [column_clause] [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

column_clauseは、column_clause := column_name | extension name | extensionのように定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。
  • - column_name: 列の名前。
  • - extension: (column_name, Colume_name [, ...])の書式の列グループまたは式。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

統計情報を収集する場合に使用される並列度が決定されます。

degreeのデフォルトはNULLです。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャ、SET_GLOBAL_PREFSプロシージャ、SET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。

初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1 (シリアル実行)からDEFAULT_DEGREE (CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の細分化(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'APPROX_GLOBAL AND PARTITION' - 'GLOBAL AND PARTITION'に似ていますが、この場合、グローバルな統計情報がパーティション・レベルの統計情報から集計されます。このオプションでは、列の個別値の数および索引の個別キーの数を除く、すべての統計情報が集計されます。表レベルの列の既存ヒストグラムも集計されます。集計には統計のあるパーティションのみが使用され、正確なグローバル統計情報を取得するために、ユーザーはすべてのパーティションの統計情報があることを確認する必要があります。グローバルな統計情報は、partnameNULLの場合または集計を実行できない場合(いずれかのパーティションの統計情報がない場合など)に収集されます。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

cascade

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

このオプションを指定することは、表の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。索引の統計情報を収集する必要があるかどうかをデータベースが決定できるようにするには、定数DBMS_STATS.AUTO_CASCADEを使用します。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャ、SET_GLOBAL_PREFSプロシージャ、SET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

統計情報を収集する表の依存カーソルの無効化が制御されます。デフォルトはDBMS_STATS.AUTO_INVALIDATEで、データベースによって依存カーソルを無効化するタイミングが決定されます。

TRUEに設定されている場合、データベースによって依存カーソルが無効化されることはありません。FALSEに設定されている場合、このプロシージャによって依存カーソルがすぐに無効化されます。

stattype

統計タイプ。許可されている値は、DATAのみです。

force

ロックされている場合でも、表の統計情報を収集します。

context

使用しません。

options

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。このプリファレンスは次の値を取ります。

  • GATHER: 表中のすべてのオブジェクトの統計を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。統計情報を収集するバルク・ロード操作が実行される表にGATHER AUTOを設定することをお薦めします。このオプションは、INCREMENTALを有効にしていない表にのみ適用できます。これらの表でGATHER_TABLE_STATSプロシージャにGATHER AUTOオプションを指定して実行すると、すでに新規の統計の再収集はスキップされます。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

索引統計情報収集は、クラスタ索引、ドメイン索引および結合索引を除き、パラレル化できます。

GATHER AUTOオプションを使用する場合、全体スキャンではなくサンプルを使用して頻度ヒストグラムが作成されます。次に、GATHER AUTOを使用するシナリオを示します。

  • 表は次のように作成されます: CREATE TABLE NEWTAB as SELECT * FROM ....

    これにより、NEWTABに関する統計情報が作成されますが、ヒストグラムは作成されません。

  • 次に、DBAはGATHER AUTOを使用してgather_table_statsのヒストグラムを作成します。

  • 全体表スキャンではなくサンプルを使用して、NEWTABFREQUENCYヒストグラムが作成されます。

例外

ORA-20000: 表が存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

拡張は、列グループ(例1を参照)または式(例2を参照)です。

例1

DBMS_STATS.GATHER_TABLE_STATS(
    'SH', 'SALES', method_opt => 'FOR COLUMNS (empno, deptno)'); 

例2

DBMS_STATS.GATHER_TABLE_STATS(
    'SH', 'SALES', method_opt => 'FOR COLUMNS (sal+comm)');

159.7.55 GENERATE_STATSプロシージャ

この推奨されないプロシージャは、関連するオブジェクトで以前に収集した統計情報から、オブジェクトの統計情報を生成します。現在サポートされているオブジェクトは、Bツリー索引とビットマップ索引です。

ノート:

このサブプログラムの使用は推奨されず、より高度なテクノロジがかわりに使用されます。下位互換性の目的でのみ保持されています。代替として、GATHER_INDEX_STATプロシージャを使用してください。「GATHER_INDEX_STATSプロシージャ」を参照してください。

構文

DBMS_STATS.GENERATE_STATS (
   ownname    VARCHAR2, 
   objname    VARCHAR2,
   organized  NUMBER DEFAULT 7,
   force      BOOLEAN default FALSE);

パラメータ

表159-60 GENERATE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

オブジェクトのスキーマ。

objname

オブジェクトの名前。

organized

索引とその基礎となる表の間で関連付けられた順位付けの量。複雑に編成されている索引には、ディスク上の連続行を参照する連続索引キーがその表(同じブロック)に対してあります。複雑に編成されていない索引には、ディスク上の異なる表ブロックを参照する連続キーがあります。

このパラメータは、Bツリー索引に対してのみ使用します。数値は、0から10の範囲で使用でき、0(ゼロ)は完全に編成された索引、10は完全に編成解除された索引を示します。

force

TRUEの場合は、ロックされていてもターゲット・オブジェクトの統計情報を生成します。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

完全に移入されたスキーマについては、より正確な統計情報が必要な場合は、GATHERプロシージャをかわりに使用する必要があります。

例外

ORA-20000: サポートされていないオブジェクト・タイプで、オブジェクトは存在しません。

ORA-20001: 無効なオプションまたは無効な統計情報です。

159.7.56 GET_ADVISOR_OPR_FILTERプロシージャ

このプロシージャは、オプティマイザ統計アドバイザ・タスクの操作フィルタを作成します。

構文

DBMS_STATS.GET_ADVISOR_OPR_FILTER (
  opr_id        IN             NUMBER,
  opr_filter    IN OUT NOCOPY  StatsAdvOpr);

パラメータ

表159-61 GET_ADVISOR_OPR_FILTERプロシージャのパラメータ

パラメータ 説明

opr_id

DBA_OPTSTAT_OPERATIONSビューに格納されている統計操作のID。

opr_filter

指定した統計操作に基づいて生成されるオプティマイザ統計アドバイザのフィルタ。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

使用上のノート

操作IDまたはフィルタIDのいずれか(同時に両方は不可)を使用してフィルタを指定できます。

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.57 GET_ADVISOR_RECSファンクション

このファンクションは、指定された項目の推奨レポートを生成します。

構文

DBMS_STATS.GET_ADVISOR_RECS(
  ownname    IN   VARCHAR2,
  tabname    IN   VARCHAR2,
  rec        IN   VARCHAR2,
  type       IN   VARCHAR2   := 'TEXT')
RETURN CLOB;

パラメータ

表159-62 GET_ADVISOR_RECSファンクションのパラメータ

パラメータ 説明

ownname

表の所有者。

tabname

表の名前。

rec

オプティマイザ統計アドバイザ推奨事項。

  • INCREMENTAL

    少数のレンジ・パーティションが変更されたときに、このオプションによって統計収集のパフォーマンスが大幅に向上します。ただし、増分統計のメンテナンス用のシノプシスを格納する追加領域が必要になります。レポートでこのトレードオフが分析されます。

  • CONCURRENT

    レポートでCONCURRENTプリファレンスを設定するか、個々の表に対してAUTO_DEGREEを指定することをお薦めします。システムのリソースおよび使用率が条件を満たしている場合は、アドバイザでは常に最初にCONCURRENTを設定することをお薦めします。アドバイザでは、個々の表に対する統計収集に時間がかかり、CONCURRENTプリファレンスがすでに設定されている場合にのみ、AUTO_DEGREEをお薦めします。

type

レポートのタイプ: TEXTHTMLまたはXML

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • 推奨事項が生成されるオブジェクトの統計情報を収集する権限が必要です。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

使用上のノート

アドバイザでは、手動での統計収集に対しては推奨事項が作成されません。メンテナンス・ウィンドウ内にジョブが完了するという主要目標がある自動統計収集ジョブに対してのみ、データベースで推奨事項が作成されます。自動ジョブが完了するかぎり、データベースで他の推奨事項が作成されることはありません。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.58 GET_COLUMN_STATSプロシージャ

このプロシージャは、列に関連するすべての情報を取得します。ユーザー定義の統計情報を処理するこのプロシージャのフォームでは、戻される統計情報のタイプは、ユーザー定義の統計情報に加え、格納されるタイプでもあります。

構文

DBMS_STATS.GET_COLUMN_STATS (
   ownname     VARCHAR2, 
   tabname     VARCHAR2, 
   colname     VARCHAR2, 
   partname    VARCHAR2 DEFAULT NULL,
   stattab     VARCHAR2 DEFAULT NULL, 
   statid      VARCHAR2 DEFAULT NULL,
   distcnt OUT NUMBER, 
   density OUT NUMBER,
   nullcnt OUT NUMBER, 
   srec    OUT StatRec,
   avgclen OUT NUMBER,
   statown     VARCHAR2 DEFAULT NULL);

ユーザー定義統計情報には、次の構文を使用します。

DBMS_STATS.GET_COLUMN_STATS (
   ownname          VARCHAR2, 
   tabname          VARCHAR2, 
   colname          VARCHAR2, 
   partname         VARCHAR2 DEFAULT NULL,
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   ext_stats   OUT  RAW,
   stattypown  OUT  VARCHAR2 DEFAULT NULL, 
   stattypname OUT  VARCHAR2 DEFAULT NULL, 
   statown          VARCHAR2 DEFAULT NULL);

パラメータ

表159-63 GET_COLUMN_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

列が所属している表の名前。

colname

列または拡張の名前。

partname

統計情報を取得する表パーティションの名前。表がパーティション化されていて、partnameNULLの場合、統計情報はグローバルな表レベルで取り出されます。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接取り出されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

ext_stats

ユーザー定義の統計情報。

stattypown

統計タイプのスキーマ。

stattypname

統計タイプの名前。

distcnt

個別値の数。

density

列密度。

nullcnt

NULLの数

srec

列最大、列最小およびヒストグラム値の内部表記を保持する構造。

avgclen

列の平均の長さ(バイト)

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか権限が不十分、または要求したオブジェクトの統計情報が格納されていません。

使用上のノート

このプロシージャを呼び出す前に、表が存在することを確認してください。

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.59 GET_INDEX_STATSプロシージャ

このオーバーロードされたプロシージャは、すべての索引関連の統計情報を取得します。ユーザー定義の統計情報を処理するこのプロシージャのフォームでは、戻される統計情報のタイプは、ユーザー定義の統計情報に加え、格納されるタイプでもあります。

構文

DBMS_STATS.GET_INDEX_STATS (
   ownname        VARCHAR2, 
   indname        VARCHAR2,
   partname       VARCHAR2 DEFAULT NULL,
   stattab        VARCHAR2 DEFAULT NULL, 
   statid         VARCHAR2 DEFAULT NULL,
   numrows    OUT NUMBER, 
   numlblks   OUT NUMBER,
   numdist    OUT NUMBER, 
   avglblk    OUT NUMBER,
   avgdblk    OUT NUMBER, 
   clstfct    OUT NUMBER,
   indlevel   OUT NUMBER,
   statown        VARCHAR2 DEFAULT NULL);

DBMS_STATS.GET_INDEX_STATS (
   ownname        VARCHAR2, 
   indname        VARCHAR2,
   partname       VARCHAR2 DEFAULT NULL,
   stattab        VARCHAR2 DEFAULT NULL, 
   statid         VARCHAR2 DEFAULT NULL,
   numrows    OUT NUMBER, 
   numlblks   OUT NUMBER,
   numdist    OUT NUMBER, 
   avglblk    OUT NUMBER,
   avgdblk    OUT NUMBER, 
   clstfct    OUT NUMBER,
   indlevel   OUT NUMBER,
   statown        VARCHAR2 DEFAULT NULL,
   guessq     OUT NUMBER);

ユーザー定義統計情報には、次の形式のプロシージャを使用します。

DBMS_STATS.GET_INDEX_STATS (
   ownname          VARCHAR2, 
   indname          VARCHAR2,
   partname         VARCHAR2 DEFAULT NULL,
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   ext_stats   OUT  RAW,
   stattypown  OUT  VARCHAR2 DEFAULT NULL, 
   stattypname OUT  VARCHAR2 DEFAULT NULL, 
   statown          VARCHAR2 DEFAULT NULL);

パラメータ

表159-64 GET_INDEX_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

indname

索引の名前

partname

統計情報を取得する索引パーティションの名前。索引がパーティション化されていて、partnameNULLの場合、統計情報はグローバルな索引レベルで取り出されます。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接取り出されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

ext_stats

ユーザー定義の統計情報

stattypown

統計タイプのスキーマ。

stattypname

統計タイプの名前。

numrows

索引(パーティション)内の行数。

numlblks

索引(パーティション)内のリーフ・ブロックの数。

numdist

索引(パーティション)内の個別キーの数。

avglblk

この索引(パーティション)について各個別キーが出現するリーフ・ブロックの平均整数値。

avgdblk

この索引(パーティション)について個別キーが指す表内のデータ・ブロックの平均整数値。

clstfct

索引(パーティション)のクラスタ化要因。

indlevel

索引(パーティション)の高さ。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

guessq

索引の推測品質(パーティション)。

セキュリティ・モデル

このプロシージャを呼び出す前に、表が存在することを確認してください。このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか権限が不十分、または要求したオブジェクトの統計情報が格納されていません。

使用上のノート

  • オプティマイザは、キャッシュ・データを使用して、索引または統計表にアクセスするためのキャッシュ・ブロック数を見積もります。データベースで、ディスクの未キャッシュ・ブロック読込み時のI/Oコストに、バッファ・キャッシュ内のキャッシュ・ブロック取得時のCPUコスト、さらにデータ処理にかかるCPUコストを組み合せて、操作の合計コストが計算されます。

  • データベースでは、常にcachedblkおよびcachehitが維持されます。ただし、自動モードのDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATSプロシージャまたは手動モードのDBMS_STATS.GATHER_SYSTEM_STATSをユーザーがコールした場合のみ、対応するキャッシング統計情報が表および索引の統計情報の一部として最適化に使用されます。精度や信頼性に乏しいデータをユーザーに使用させないようにするため、オプティマイザは、オブジェクトごとにcachehitおよびcachedblkに対する信頼度要素を計算します。値の信頼度要素が信頼度の基準に達している場合はこの値が使用され、基準に達しない場合はデフォルト値が使用されます。

  • オブジェクト・キャッシング統計情報の自動メンテナンス・アルゴリズムでは、主要なデータベース・ワークロードが1つのみ存在することを前提としています。アルゴリズムによってこのワークロードに対して統計情報が調整され、他の小規模なワークロードが無視されます。この前提が当てはまらない場合は、手動モードを使用してオブジェクト・キャッシング統計情報を維持する必要があります。

  • 自動モードのオブジェクト・キャッシング統計情報のメンテナンス・アルゴリズムは、次の状況で統計情報が使用されることを防ぎます。

    • オブジェクトが最近作成されたなどの理由で十分なデータ分析ができていない場合

    • システムにメジャー・ワークロードがないために平均値が実際の値と対応していない場合

参照:

オプティマイザ統計情報の管理方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.60 GET_PARAMファンクション

このファンクションは、DBMS_STATSプロシージャのパラメータのデフォルト値を戻します。

ノート:

テクノロジが改良されたため、このサブプログラムは使用されなくなりました(このサブプログラムは、下位互換性を維持する目的でのみ保持されています)。この場合は、GET_PREFSファンクションを使用してください。

「DBMS_STATSの推奨されないサブプログラム」も参照してください。

構文

DBMS_STATS.GET_PARAM (
   pname     IN   VARCHAR2)
 RETURN VARCHAR2;

パラメータ

表159-65 GET_PARAMファンクションのパラメータ

パラメータ 説明

pname

パラメータ名

例外

ORA-20001: 入力値が無効です

159.7.61 GET_PREFSファンクション

このファンクションは、指定したプリファレンスのデフォルト値を戻します。

構文

DBMS_STATS.GET_PREFS (
   pname     IN   VARCHAR2,
   ownname   IN   VARCHAR2 DEFAULT NULL,
   tabname   IN   VARCHAR2 DEFAULT NULL)
 RETURN VARCHAR2;

パラメータ

表159-66 GET_PREFSファンクションのパラメータ

パラメータ 説明

pname

プリファレンスの名前。有効な値は、次のとおりです。

  • APPROXIMATE_NDV_ALGORITHM

  • AUTO_STAT_EXTENSIONS

  • CASCADE

  • CONCURRENT

  • DEGREE

  • ESTIMATE_PERCENT

  • GLOBAL_TEMP_TABLE_STATS

  • GRANULARITY

  • INCREMENTAL

  • INCREMENTAL_STALENESS

  • INCREMENTAL_LEVEL

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • STAT_CATEGORY

  • TABLE_CACHED_BLOCKS

  • WAIT_TIME_TO_UPDATE_STATUS

ownname

所有者名

tabname

表名

表159-67 プリファレンスの説明

プリファレンス名 説明

APPROXIMATE_NDV_ALGORITHM

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。シノプシスを、個別値をサンプリングする内部管理構造とみなします。

次のプリファレンスを削除できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。既存のパフォーマンスが許容範囲であり、レガシー・コンテンツを再フォーマットするパフォーマンス・コストを発生させたくない場合、この方法が有益です。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。これは最も保守的なオプションです。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。動的サンプリングとは対照的に、HyperLogLogアルゴリズムはランダム化手法を使用します。適応サンプリングと比較したHyperLogLogの利点は次のとおりです。

    • 新しいアルゴリズムの正確性は、元のアルゴリズムと似ています。

    • 必要なメモリーは非常に少なく、一般的にシノプシス・サイズの大幅な削減につながります。

AUTO_STAT_EXTENSIONS

データベース統計を収集する場合、拡張機能の自動作成を制御します。

次の値を設定できます。

  • ON - 適用可能な場合に、SQLプラン・ディレクティブでは、ワークロードの述語の列の使用に基づいて、列グループ統計の作成をトリガーできます。

  • OFF - データベースで列グループ統計が自動的に作成されることはありません。これらは、CREATE_EXTENDED_STATSファンクションが実行されたとき、またはDBMS_STATSMETHOD_OPT句で明示的に拡張統計情報が指定されたときにのみ作成されます。これはデフォルトです。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

CONCURRENT

統計情報が複数のオブジェクトで同時に収集されるか、一度に1オブジェクトずつ順次収集されるかを決定します。有効な値は、次のとおりです。

  • MANUAL - 手動統計収集でのみ、同時実行性が有効化されます。

  • AUTOMATIC - 自動統計収集でのみ、同時実行性が有効化されます。

  • ALL - 手動と自動の両方の統計収集で、同時実行性が有効化されます。

  • OFF - 手動と自動の両方の統計情報で、同時実行性が無効化されます。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

サンプリングする行のパーセントが決定されます。

有効範囲は0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、最適な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。

GLOBAL_TEMP_TABLE_STATS

グローバル一時表に対して収集された統計情報を共有統計情報として格納するか、セッション統計情報として格納するかを制御します。このプリファレンスは次の2つの値を取ります。

  • SHARED: すべてのセッションで同じ統計セットが参照されます。

  • SESSION - グローバル一時表でGATHER_TABLE_STATSプロシージャによって収集された統計情報は、セッション固有です。そのため、統計収集プロセスと同じセッションで発行された問合せに対してのみ使用されます。セッション固有の統計は、セッションが終了すると削除されます。

GRANULARITY

収集する統計情報の粒度が決定されます。このプリファレンスは、パーティション表にのみ使用されます。

有効な値は次のとおりです。

  • ALL - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

  • AUTO - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

  • DEFAULT - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、GLOBAL AND PARTITIONを使用します。

  • GLOBAL - グローバルな統計情報を収集します。

  • GLOBAL AND PARTITION - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

  • PARTITION - パーティション・レベルの統計情報を収集します。

  • SUBPARTITION - サブパーティション・レベルの統計情報を収集します。

INCREMENTAL

全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。

通常、表がパーティション化されると、新しいパーティションにデータがロードされます。新しいパーティションが追加され、データがロードされるため、表のグローバルな統計情報を最新に保つ必要があります。次の条件が満たされている場合、表全体ではなく、変更されたパーティションのみをスキャンすることによって、表のグローバルな統計情報が更新されます。

  • パーティション表のINCREMENTALの値がTRUEに設定されている場合。

  • パーティション表のPUBLISHの値がTRUEに設定されている場合。

  • 表の統計を収集するときに、ユーザーがESTIMATE_PERCENTAUTO_SAMPLE_SIZEを、GRANULARITYAUTOを指定しています。

パーティション表のINCREMENTAL値がFALSE (デフォルト値)に設定されている場合、データベースでは全表スキャンを使用してグローバルな統計情報がメンテナンスされます。この手法は、大規模な表では、はるかにリソースを消費し、時間のかかる操作です。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、どのシノプシスを収集するかを制御します。値は次のいずれかとなります。

  • PARTITION - パーティション・レベルのシノプシスを収集します。

    これはデフォルト値です。パーティション化されていない表でPARTITIONが設定されている場合、データベースでシノプシスは収集されません。

  • TABLE - 表レベルのシノプシスを収集します。

    この値は、この表をパーティションと交換する場合に指定します。この表でGATHER_TABLE_STATSを実行(INCREMENTALTRUEに、INCREMENTAL_LEVELTABLEに設定)してから交換できます。この結果、データベースでこの表の表レベルのシノプシスが収集されます。交換が発生すると、パーティションに、交換前の表の表レベルのシノプシスが存在するようになります。プリファレンス値はSET_TABLE_PREFSでのみ使用でき、他のSET_*_PREFSプロシージャでは使用できません。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - 適応サンプリング・シノプシスとHyperLogLogシノプシスの共存が許可されます。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

METHOD_OPT

列統計収集およびヒストグラムの作成が制御されます。グローバル、スキーマ、データベースまたはディクショナリのレベルでプリファレンスを設定する場合、FOR ALL構文のみが許可されます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • integer - ヒストグラム・バケット数を指定します。1 - 2048の数値を指定する必要があります。
  • REPEAT - すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します。
  • AUTO - 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • SKEWONLY - 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

NO_INVALIDATE

統計情報を収集する表の依存カーソルの無効化が制御されます。デフォルトはDBMS_STATS.AUTO_INVALIDATEで、データベースによって依存カーソルを無効化するタイミングが決定されます。

TRUEに設定されている場合、データベースによって依存カーソルが無効化されることはありません。FALSEに設定されている場合、このプロシージャによって依存カーソルがすぐに無効化されます。

OPTIONS

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。このプリファレンスは次の値を取ります。

  • GATHER: 表中のすべてのオブジェクトの統計を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。統計情報を収集するバルク・ロード操作が実行される表にGATHER AUTOを設定することをお薦めします。このオプションは、INCREMENTALを有効にしていない表にのみ適用できます。これらの表でGATHER_TABLE_STATSプロシージャにGATHER AUTOオプションを指定して実行すると、すでに新規の統計の再収集はスキップされます。

PREFERENCE_OVERRIDES_PARAMETER

パラメータの入力値を、統計操作のそのパラメータのプリファレンス値でオーバーライドするかどうかを決定します。使用可能な値は、次のとおりです。

  • TRUE - 入力パラメータ値を無視し、対応するプリファレンスの値を使用します。

  • FALSE - 入力パラメータ値に従います。

このプリファレンスを指定すると、表、グローバルおよびデフォルトの優先順位が変更されません。

PUBLISH

収集ジョブが完了した後で、新しく収集された統計情報をパブリッシュするかどうかが決定されます。

統計情報を収集し、すぐにはパブリッシュしないようにすることができます。この手法により、パブリッシュ前に新しい統計情報をテストできます。

STALE_PERCENT

表の統計情報が失効し、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。

stale_percentの有効なドメインは、負数以外の数です。デフォルト値は10で、10%を超える変更がある表が失効とみなされることを意味します。

STAT_CATEGORY

インポートまたはエクスポートする統計情報を指定します。カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • OBJECT_STATS: 表、列および索引(デフォルト)の統計情報

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'は、表統計情報、列統計情報、索引統計情報およびシノプシスを指定します。

TABLE_CACHED_BLOCKS

索引のクラスタリング要因の計算時にバッファ・キャッシュにキャッシュされる平均ブロック数(予測値)を指定します。

WAIT_TIME_TO_UPDATE_STATS

統計情報の更新に必要なロックおよび確保のタイムアウトまでの分数を指定します。これは、0から65535までの範囲の値を受け入れます。デフォルト値は、15分です。値が0の場合、ロックおよび確保が非待機モードになります。

セキュリティ・モデル

このプロシージャを起動するために特別な権限やロールは必要ありません。ただし、統計情報を同時に収集するには、DBAロールまたは統計情報の収集に必要な権限に加えて、CREATE JOBMANAGE SCHEDULERおよびMANAGE ANY QUEUEの権限を持っている必要があります。

例外

  • ORA-20000: 統計情報を同時に収集できません。リソース・マネージャが有効になっていません。

  • ORA-20001: 入力値が無効です

使用上のノート

次のガイドラインに留意してください。

  • ユーザーがGATHER_*_STATSプロシージャを発行した場合、CONCURRENTプリファレンスは、統計情報を同時に収集するかどうかを判別します。DBMS_STATSにより、DEGREEパラメータの値に基づいて単一オブジェクトの統計を並列収集できます。ただし、並列性は1つのオブジェクトに限定されます。CONCURRENTプリファレンスにより、複数のデータベース・オブジェクトに対する並列処理の範囲が拡張されます。このアプローチは主に複数CPUのシステムを対象としており、単一CPUのコンピュータ上の小規模データベースには適さない場合があります。

    統計情報を同時に収集するには、リソース・マネージャを有効化して、JOB_QUEUE_PROCESSES初期化パラメータの設定を4以上にする必要があります。

  • ownnameおよびtabnameが指定され、表に対してプリファレンスが入力されている場合、このファンクションは、その表に対して指定されているとおりにプリファレンスを戻します。それ以外のすべての場合は、グローバル・プリファレンスが指定されている場合はそれを戻し、指定されていない場合はデフォルト値を戻します。

参照:

オプティマイザ統計プリファレンスの取得方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.62 GET_STATS_HISTORY_AVAILABILITYファンクション

このドキュメンテーションは、統計履歴を使用できる最も古いタイムスタンプを戻します。これより古いタイムスタンプには、統計をリストアできません。

構文

DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY
 RETURN TIMESTAMP WITH TIMEZONE;

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.63 GET_STATS_HISTORY_RETENTIONファンクション

このファンクションは、現在の統計履歴のリテンション値を戻します。

構文

DBMS_STATS.GET_STATS_HISTORY_RETENTION
 RETURN NUMBER;

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.64 GET_SYSTEM_STATSプロシージャ

このプロシージャは、stattab(stattabNULLの場合はディクショナリ)からシステムの統計情報を取得します。

構文

DBMS_STATS.GET_SYSTEM_STATS (
   status    OUT  VARCHAR2,
   dstart    OUT  DATE,
   dstop     OUT  DATE,
   pname     IN   VARCHAR2,
   pvalue    OUT  NUMBER,
   stattab   IN   VARCHAR2 DEFAULT NULL, 
   statid    IN   VARCHAR2 DEFAULT NULL,
   statown   IN   VARCHAR2 DEFAULT NULL);

パラメータ

表159-68 GET_SYSTEM_STATSプロシージャのパラメータ

パラメータ 説明

status

出力は次のいずれかです。

  • COMPLETED:

  • AUTOGATHERING:

  • MANUALGATHERING:

  • BADSTATS:

dstart

統計情報の収集が開始された日付。

status = MANUALGATHERINGの場合は、開始日が戻されます。

dstop

統計情報の収集が停止された日付。

  • status = COMPLETEの場合は、終了日が戻されます。

  • status = AUTOGATHERINGの場合は、将来の終了日が戻されます。

  • status = BADSTATSの場合は、終了期限の日付が戻されます。

pname

取得するパラメータ名。次の値の1つが入ります。

  • iotfrspeed - I/O転送速度(ミリ秒当たりのバイト数単位)

  • ioseektim - シーク時間+待機時間+オペレーティング・システムのオーバーヘッド時間(ミリ秒単位)

  • sreadtim - シングル・ブロックの読込み(ランダム読込み)平均時間(ミリ秒単位)

  • mreadtim - mbrcブロックを1回に読み込む(順次読取り)平均時間(ミリ秒単位)

  • cpuspeed - 1秒当たりの平均CPUサイクル数(100万単位)であり、ワークロードの統計情報('INTERVAL'か、'START'と'STOP'の両方のオプションを使用して収集)に対して取得したもの

  • cpuspeednw: 1秒当たりの平均CPUサイクル数(100万単位)であり、no-workloadの統計情報('NOWORKLOAD'オプションを使用して収集)に対して取得したもの。

  • mbrc - 順次読取りのマルチブロック読込み平均数(ブロック単位)

  • maxthr - 最大I/Oシステム・スループット(1秒当たりのバイト数単位)

  • slavethr - 平均スレーブI/Oスループット(1秒当たりのバイト数単位)

pvalue

取得するパラメータ値。

stattab

統計情報を取得するユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから取得されます。

statid

stattabに保存された統計情報に関連付けられた、オプションの識別子。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

ORA-20003: システムの統計情報を収集できません

ORA-20004: パラメータが存在しません。

使用上のノート

このプロシージャを実行するには、GATHER_SYSTEM_STATISTICSロールが必要です。

159.7.65 GET_TABLE_STATSプロシージャ

このオーバーロードされたプロシージャは、すべての表関連の統計情報を取得します。

構文

DBMS_STATS.GET_TABLE_STATS (
   ownname         VARCHAR2, 
   tabname         VARCHAR2, 
   partname        VARCHAR2 DEFAULT NULL,
   stattab         VARCHAR2 DEFAULT NULL,
   statid          VARCHAR2 DEFAULT NULL,
   numrows     OUT NUMBER, 
   numblks     OUT NUMBER,
   avgrlen     OUT NUMBER,
   statown         VARCHAR2 DEFAULT NULL);
DBMS_STATS.GET_TABLE_STATS (
   ownname            VARCHAR2,
   tabname            VARCHAR2,
   partname           VARCHAR2 DEFAULT NULL,
   stattab            VARCHAR2 DEFAULT NULL,
   statid             VARCHAR2 DEFAULT NULL,
   numrows        OUT NUMBER,
   numblks        OUT NUMBER,
   avgrlen        OUT NUMBER,
   statown            VARCHAR2 DEFAULT NULL,
   im_imcu_count  OUT NUMBER,
   im_block_count OUT NUMBER,
   scanrate       OUT NUMBER);
DBMS_STATS.GET_TABLE_STATS (
   ownname         VARCHAR2, 
   tabname         VARCHAR2, 
   partname        VARCHAR2 DEFAULT NULL,
   stattab         VARCHAR2 DEFAULT NULL,
   statid          VARCHAR2 DEFAULT NULL,
   numrows     OUT NUMBER, 
   numblks     OUT NUMBER,
   avgrlen     OUT NUMBER,
   cachedblk   OUT NUMBER,
   cachehit    OUT NUMBER);

パラメータ

表159-69 GET_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前です。

tabname

列が所属している表の名前。

partname

統計情報を取得する表パーティションの名前。表がパーティション化されていて、partnameNULLの場合、統計情報はグローバルな表レベルで取り出されます。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリから直接取り出されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

numrows

表またはパーティション内の行数。

numblks

表またはパーティション内のブロック数。

avgrlen

表またはパーティション表の行の平均長。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

im_imcu_count

表またはパーティション内のインメモリー圧縮ユニット(IMCU)の数。

im_block_count

表またはパーティション内のインメモリー・ブロックの数。

インメモリー・ブロックは、ディスク上の特定のデータ・ブロックに対応します。表がIM列ストアに完全に移入される場合、インメモリー・ブロックの数はデータ・ブロックの数と等しくなります。

scanrate

データベースが外部表をスキャンするMB/秒単位のレート。このパラメータは、外部表にのみ使用されます。

cachedblk

内部使用のみに対応しています。

cachehit

内部使用のみに対応しています。

セキュリティ・モデル

このプロシージャを呼び出す前に、表が存在することを確認してください。このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか権限が不十分、または要求したオブジェクトの統計情報が格納されていません。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

使用上のノート

  • オプティマイザは、キャッシュ・データを使用して、索引または統計表にアクセスするためのキャッシュ・ブロック数を見積もります。データベースで、ディスクの未キャッシュ・ブロック読込み時のI/Oコストに、バッファ・キャッシュ内のキャッシュ・ブロック取得時のCPUコスト、さらにデータ処理にかかるCPUコストを組み合せて、操作の合計コストが計算されます。

  • データベースでは、常にcachedblkおよびcachehitが維持されます。ただし、自動モードのDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATSプロシージャまたは手動モードのDBMS_STATS.GATHER_SYSTEM_STATSをユーザーがコールした場合のみ、対応するキャッシング統計情報が表および索引の統計情報の一部として最適化に使用されます。精度や信頼性に乏しいデータをユーザーに使用させないようにするため、オプティマイザは、オブジェクトごとにcachehitおよびcachedblkに対する信頼度要素を計算します。値の信頼度要素が信頼度の基準に達している場合はこの値が使用され、基準に達しない場合はデフォルト値が使用されます。

  • オブジェクト・キャッシング統計情報の自動メンテナンス・アルゴリズムでは、主要なデータベース・ワークロードが1つのみ存在することを前提としています。アルゴリズムによってこのワークロードに対して統計情報が調整され、他の小規模なワークロードが無視されます。この前提が当てはまらない場合は、手動モードを使用してオブジェクト・キャッシング統計情報を維持する必要があります。

  • 自動モードのオブジェクト・キャッシング統計情報のメンテナンス・アルゴリズムは、次の状況で統計情報が使用されることを防ぎます。

    • オブジェクトが最近作成されたなどの理由で十分なデータ分析ができていない場合

    • システムにメジャー・ワークロードがないために平均値が実際の値と対応していない場合

  • このデータベースでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

参照:

オプティマイザ統計プリファレンスの管理方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.66 IMPLEMENT_ADVISOR_TASKファンクション

このファンクションは、オプティマイザ統計アドバイザによって作成された推奨事項を実装します。

構文

DBMS_STATS.IMPLEMENT_ADVISOR_TASK (
  task_name          IN   VARCHAR2,
  execution_name     IN   VARCHAR2    := NULL,
  level              IN   VARCHAR2    := 'TYPICAL')
RETURN CLOB;

パラメータ

表159-70 IMPLEMENT_ADVISOR_TASKファンクションのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

execution_name

アドバイザの実行を修飾して識別する名前。指定しない場合、アドバイザによって自動的に生成されます。

指定した実行が既存の実行名と競合する場合は、ファンクションでエラーが戻されます。

level

実装のレベル。有効な値は、次のとおりです。

  • ALL: フィルタを無視し、すべての推奨事項を実装します。

  • TYPICAL: 準備されたフィルタに従って推奨事項を実装します。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • 事前定義されたAUTO_STATS_ADVISOR_TASKでこのサブプログラムを実行できます。

  • このサブプログラムは実行者権限を使用して実行します。

このタスクの実行結果は、実行しているユーザーの権限に依存します。

  • SYSTEMレベル

    ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーのみが、このタスクをシステム・レベルのルールで実行できます。

  • 操作レベル

    結果は次の権限に依存します。

    • ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーが、このタスクをすべての統計操作に実行できます。

    • ANALYZE ANY権限はあるがANALYZE ANY DICTIONARY権限はないユーザーが、このタスクをSYS以外のすべてのスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY DICTIONARY権限はあるがANALYZE ANY権限はないユーザーが、このタスクを独自のスキーマおよびSYSスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY権限もANALYZE ANY DICTIONARY権限もないユーザーのみが、この操作を独自のスキーマに関連した統計操作に実行できます。

  • オブジェクト・レベル

    ユーザーは、統計収集権限を持つすべてのオブジェクトにこのタスクを実行できます。

戻り値

このファンクションは、推奨事項が正常に実装されたことを示すXML CLOBを戻します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

例159-10 オプティマイザ統計アドバイザ推奨事項の実装

このスクリプトは、基本的なオプティマイザ統計アドバイザ・セッションを示しています。タスクを作成して実行し、レポートを生成し、推奨事項を実装します。

DECLARE
  v_tname      VARCHAR2(128) := 'my_task';
  v_ename      VARCHAR2(128) := NULL;
  v_report     CLOB := null;
  v_script     CLOB := null;
  v_imp_result CLOB;
BEGIN
  -- create a task
  v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);

  -- execute the task
  v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);

  -- view the task report
  v_report := DBMS_STATS.REPORT_ADVISOR_TASK(v_tname);
  DBMS_OUTPUT.PUT_LINE(v_report);

  -- implement all recommendations
  v_imp_result := DBMS_STATS.IMPLEMENT_ADVISOR_TASK(v_tname);
END;

ノート:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.67 IMPORT_COLUMN_STATSプロシージャ

このプロシージャは、stattabで識別されるユーザー統計表から特定の列に関する統計情報を取り出し、ディクショナリに格納します。

構文

DBMS_STATS.IMPORT_COLUMN_STATS (
   ownname       VARCHAR2, 
   tabname       VARCHAR2, 
   colname       VARCHAR2,
   partname      VARCHAR2 DEFAULT NULL,
   stattab       VARCHAR2, 
   statid        VARCHAR2 DEFAULT NULL,
   statown       VARCHAR2 DEFAULT NULL,
   no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   force         BOOLEAN DEFAULT FALSE);

パラメータ

表159-71 IMPORT_COLUMN_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

列が所属している表の名前。

colname

列または拡張の名前。

partname

表パーティション名。表がパーティション化されていて、partnameNULLの場合、グローバルでパーティション化された列統計情報がインポートされます。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

TRUEに設定されている場合、統計情報は、ロックされていてもインポートされます。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

ORA-20005: オブジェクト統計はロックされています

使用上のノート

Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.68 IMPORT_DATABASE_PREFSプロシージャ

このプロシージャは、Oracleによって所有されている表を除き、すべての表の統計プリファレンスをインポートするために使用されます。これらの表は、add_sysパラメータにTRUEを渡すことによって含めることができます。

構文

DBMS_STATS.IMPORT_DATABASE_PREFS (
    stattab    IN  VARCHAR2,
    statid     IN  VARCHAR2 DEFAULT NULL,
    statown    IN  VARCHAR2 DEFAULT NULL
    add_sys    IN  BOOLEAN DEFAULT FALSE);

パラメータ

表159-72 IMPORT_DATABASE_PREFSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報のインポート先の統計表の名前。

statid

stattab内の統計情報を関連付けるオプションの識別子。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

add_sys

TRUEを指定すると、Oracle所有の表が含まれます。

例外

ORA-20000: 権限が不十分です。

使用上のノート

  • このプロシージャを実行するには、SYSDBAロールまたはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

DBMS_STATS.IMPORT_DATABASE_PREFS('STATTAB', statown=>'SH');

159.7.69 IMPORT_DATABASE_STATSプロシージャ

このプロシージャは、データベース内のすべてのオブジェクトに関する統計情報をユーザー統計表から取り出し、ディクショナリに格納します。

構文

DBMS_STATS.IMPORT_DATABASE_STATS (
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   statown         VARCHAR2 DEFAULT NULL,
   no_invalidate   BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force           BOOLEAN DEFAULT FALSE,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-73 IMPORT_DATABASE_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

オブジェクト(表)のレベルでロックされている統計情報を上書きします。

  • TRUE: 統計情報のロックを無視して統計情報をインポートします。

  • FALSE: 統計情報は、ロックされていない場合のみインポートされます。

stat_category

インポートする統計情報を指定し、カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • 'OBJECT_STATS': 表、列および索引(デフォルト)の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

使用上のノート

  • このプロシージャを実行するには、SYSDBAロールまたはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.70 IMPORT_DICTIONARY_STATSプロシージャ

このプロシージャは、すべてのディクショナリのスキーマ('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)に関する統計情報をユーザー統計表から取り出し、ディクショナリに格納します。

構文

DBMS_STATS.IMPORT_DICTIONARY_STATS (
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   statown         VARCHAR2 DEFAULT NULL,
   no_invalidate   BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force           BOOLEAN DEFAULT FALSE,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-74 IMPORT_DICTIONARY_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

オブジェクト(表)のレベルで統計情報のロックを無視します。

  • TRUE: 統計情報のロックを無視して統計情報をインポートします。

  • FALSE: 統計情報は、ロックされていない場合のみインポートされます。

stat_category

インポートする統計情報を指定し、カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • 'OBJECT_STATS': 表、列および索引(デフォルト)の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

使用上のノート

  • このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.71 IMPORT_FIXED_OBJECTS_STATSプロシージャ

このプロシージャは、固定表に関する統計情報をユーザー統計表から取り出し、ディクショナリに格納します。

構文

DBMS_STATS.IMPORT_FIXED_OBJECTS_STATS (
   stattab       VARCHAR2, 
   statid        VARCHAR2 DEFAULT NULL,
   statown       VARCHAR2 DEFAULT NULL,
   no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force         BOOLEAN DEFAULT FALSE);

パラメータ

表159-75 IMPORT_FIXED_OBJECTS_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

統計情報のロックを無視します。

  • TRUE: 統計情報のロックを無視して統計情報をインポートします。

  • FALSE: 統計情報は、ロックされていない場合のみインポートされます。

使用上のノート

  • このプロシージャを実行するには、SYSDBAまたはANALYZE ANY DICTIONARYシステム権限が必要です。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.72 IMPORT_INDEX_STATSプロシージャ

このプロシージャは、stattabで識別されるユーザー統計表から特定の索引に関する統計情報を取得し、ディクショナリに格納します。

構文

DBMS_STATS.IMPORT_INDEX_STATS (
   ownname       VARCHAR2, 
   indname       VARCHAR2,
   partname      VARCHAR2 DEFAULT NULL,
   stattab       VARCHAR2, 
   statid        VARCHAR2 DEFAULT NULL,
   statown       VARCHAR2 DEFAULT NULL,
   no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force         BOOLEAN DEFAULT FALSE);

パラメータ

表159-76 IMPORT_INDEX_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

indname

索引の名前

partname

索引パーティション名。索引がパーティション化されていて、partnameNULLの場合、グローバルでパーティション化された索引統計情報がインポートされます。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

索引の統計情報がロックされていても、統計情報をインポートします。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

ORA-20005: オブジェクト統計はロックされています

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.73 IMPORT_SCHEMA_PREFSプロシージャ

このプロシージャは、指定した所有者名で所有されているすべての表の統計プリファレンスをインポートするために使用されます。

構文

DBMS_STATS.IMPORT_SCHEMA_PREFS (
    ownname    IN  VARCHAR2,
    stattab    IN  VARCHAR2,
    statid     IN  VARCHAR2 DEFAULT NULL,
    statown    IN  VARCHAR2 DEFAULT NULL);

パラメータ

表159-77 IMPORT_SCHEMA_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

stattab

統計情報のインポート元の統計表の名前

statid

(オプション)stattab内の統計情報を関連付ける識別子。

statown

stattabが含まれているスキーマ(ownname以外の場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを実行するには、所有者として接続するか、あるいはSYSDBA権限またはANALYZE ANYシステム権限を持っている必要があります。

  • すべての引数はVARCHAR2タイプです。値は引用符で囲みます。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

DBMS_STATS.IMPORT_SCHEMA_PREFS('SH', 'STAT');

159.7.74 IMPORT_SCHEMA_STATSプロシージャ

このプロシージャは、ownnameで識別されるスキーマ内のすべてのオブジェクトに関する統計情報をユーザー統計表から取得し、ディクショナリに格納します。

構文

DBMS_STATS.IMPORT_SCHEMA_STATS (
   ownname         VARCHAR2,
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   statown         VARCHAR2 DEFAULT NULL,
   no_invalidate   BOOLEAN DEFAULTto_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force           BOOLEAN DEFAULT FALSE,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-78 IMPORT_SCHEMA_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

オブジェクト(表)のレベルでロックされている統計情報を上書きします。

  • TRUE: 統計情報のロックを無視して統計情報をインポートします。

  • FALSE: 統計情報は、ロックされていない場合のみインポートされます。

stat_category

インポートする統計情報を指定し、カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • 'OBJECT_STATS': 表、列および索引(デフォルト)の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.75 IMPORT_SYSTEM_STATSプロシージャ

このプロシージャは、stattabで識別されるユーザー統計表からシステムの統計情報を取り出し、ディクショナリに格納します。

構文

DBMS_STATS.IMPORT_SYSTEM_STATS (
   stattab       VARCHAR2, 
   statid        VARCHAR2 DEFAULT NULL,
   statown       VARCHAR2 DEFAULT NULL);

パラメータ

表159-79 IMPORT_SYSTEM_STATSプロシージャのパラメータ

パラメータ 説明

stattab

統計情報を取り出すユーザー統計表の識別子。

statid

stattabから取り出された統計情報に関連付けられた、オプションの識別子。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

ORA-20003: システムの統計情報をエクスポートできません。

使用上のノート

このプロシージャを実行するには、GATHER_SYSTEM_STATISTICSロールが必要です。

Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.76 IMPORT_TABLE_PREFSプロシージャ

このプロシージャは、指定したスキーマ内の指定した表の統計プリファレンスを設定するために使用されます。

構文

DBMS_STATS.IMPORT_TABLE_PREFS (
    ownname    IN  VARCHAR2,
    tabname    IN  VARCHAR2,
    stattab    IN  VARCHAR2,
    statid     IN  VARCHAR2 DEFAULT NULL,
    statown    IN  VARCHAR2 DEFAULT NULL);

パラメータ

表159-80 IMPORT_TABLE_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

tabname

表名

stattab

統計情報のインポート元の統計表の名前

statid

(オプション)stattab内の統計情報を関連付ける識別子。

statown

stattabが含まれているスキーマ(ownname以外の場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

使用上のノート

  • このプロシージャを実行するには、その表の所有者として接続するか、またはANALYZE ANYシステム権限を持っている必要があります。

  • すべての引数はVARCHAR2タイプです。値は引用符で囲みます。

  • Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

DBMS_STATS.IMPORT_TABLE_PREFS('SH', 'SALES', 'STAT');

159.7.77 IMPORT_TABLE_STATSプロシージャ

このプロシージャは、stattabで識別されるユーザー統計表から特定の表に関する統計情報を取得し、ディクショナリに格納します。

cascadeを使用すると、指定した表に関連付けられているすべての索引統計情報もインポートされます。

構文

DBMS_STATS.IMPORT_TABLE_STATS (
   ownname         VARCHAR2, 
   tabname         VARCHAR2,
   partname        VARCHAR2 DEFAULT NULL,
   stattab         VARCHAR2, 
   statid          VARCHAR2 DEFAULT NULL,
   cascade         BOOLEAN  DEFAULT TRUE,
   statown         VARCHAR2 DEFAULT NULL,
   no_invalidate   BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force           BOOLEAN DEFAULT FALSE,
   stat_category   VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);

パラメータ

表159-81 IMPORT_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

表の名前

partname

表パーティション名。表がパーティション化されていて、partnameNULLの場合、グローバルでパーティション表統計情報がインポートされます。

stattab

統計情報を取り出す場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

cascade

TRUEの場合は、この表の列と索引の統計情報もまたインポートされます。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

表の統計情報がロックされていても、統計情報をインポートします。

stat_category

インポートする統計情報を指定し、カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • 'OBJECT_STATS': 表、列および索引(デフォルト)の統計情報。

  • SYNOPSES: 増分統計をサポートする情報

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: ユーザー統計表の値が無効または矛盾しています。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

Oracleでは、文字セットの異なるデータベース間での統計情報のインポートおよびエクスポートはサポートされていません。

159.7.78 INTERRUPT_ADVISOR_TASKプロシージャ

このプロシージャは、現在実行中のオプティマイザ統計アドバイザ・タスクを中断します。

通常終了のようにタスクが操作を終了し、この時点の中間結果にアクセスできます。RESUME_ADVISOR_TASKプロシージャを使用してタスクを再開することもできます。

構文

DBMS_STATS.INTERRUPT_ADVISOR_TASK (
  task_name IN VARCHAR2);

パラメータ

表159-82 INTERRUPT_ADVISOR_TASKプロシージャのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

ユーザーによってタスクが実行され、中断されて、別のユーザーによって再開されるケースについて考えます。この場合、オプティマイザ統計アドバイザでは、タスクを再開したユーザーの権限に基づいて、再開された実行をチェックします。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

例159-11 オプティマイザ統計アドバイザ・タスクの中断

この例では、SQL*Plusセッションを開始して、my_taskというアドバイザ・タスクを作成して実行します。

DECLARE
  v_tname   VARCHAR2(128) := 'my_task';
  v_ename   VARCHAR2(128) := NULL;
BEGIN
  -- create a task
  v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);

  -- execute the task
  v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
/

個々の端末で、2つ目のSQL*Plusセッションを開始して、次のプログラムを実行します。

XEC DBMS_STATS.INTERRUPT_ADVISOR_TASK('my_task');

最初のセッションでは、タスクの取消しを示すORA-13632が戻されます。

ORA-13638: The user interrupted the current operation.

159.7.79 LOCK_PARTITION_STATSプロシージャ

このプロシージャによって、ユーザーはパーティションの統計情報をロックできます。

構文

DBMS_STATS.LOCK_PARTITION_STATS (
    ownname    VARCHAR2,
    tabname    VARCHAR2,
    partname   VARCHAR2);

パラメータ

表159-83 LOCK_PARTITION_STATSプロシージャのパラメータ

パラメータ 説明

ownname

ロックするスキーマの名前。

tabname

表の名前

partname

(サブ・)パーティション名。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.80 LOCK_SCHEMA_STATSプロシージャ

このプロシージャは、スキーマのすべての表の統計情報をロックします。

構文

DBMS_STATS.LOCK_SCHEMA_STATS (
   ownname    VARCHAR2);

パラメータ

表159-84 LOCK_SCHEMA_STATSプロシージャのパラメータ

パラメータ 説明

ownname

ロックするスキーマの名前。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • 表の統計情報がロックされている場合は、表の統計情報、列の統計情報、ヒストグラムおよびすべての依存索引の統計情報を含む表に依存する、すべての統計情報がロックされているとみなされます。

  • 個々の表、索引または列のディクショナリ内の統計情報を修正するSET_*DELETE_*IMPORT_*GATHER_*の各プロシージャは、オブジェクトの統計情報がロックされている場合はエラーになります。

  • 複数のオブジェクト上で動作するプロシージャ(GATHER_SCHEMA_STATSなど)は、オブジェクトの統計情報がロックされている場合、統計情報の変更をスキップします。多くのプロシージャには、ロックを無視するforce引数があります。

  • このプロシージャは、現在の統計情報セットを制限するか、または統計情報を空(未収集)のままにして、動的統計情報を使用します。

  • EXPORT_*_STATSプロシージャを使用する場合、ロックまたはロック解除の状態は、表の統計情報とともにエクスポートされません。

  • UNLOCK_SCHEMA_STATSプロシージャUNLOCK_TABLE_STATSプロシージャも対応するパーティションの統計情報をロック解除するようには設定されていません。LOCK_TABLE_STATSプロシージャを起動すると、統計情報のロック・ビットが表レベルで設定されます。この場合、パーティションや索引などの依存オブジェクトの統計情報を収集できません。同様に、表の統計情報がロックされると、依存がロックされるため、LOCK_PARTITION_STATSプロシージャを明示的に起動する必要がなくなります。

159.7.81 LOCK_TABLE_STATSプロシージャ

このプロシージャは、表の統計情報をロックします。

構文

DBMS_STATS.LOCK_TABLE_STATS (
   ownname    VARCHAR2,
   tabname    VARCHAR2);

パラメータ

表159-85 LOCK_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

表の名前

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • 表の統計情報がロックされている場合は、表の統計情報、列の統計情報、ヒストグラムおよびすべての依存索引の統計情報を含む表に依存する、すべての統計情報がロックされているとみなされます。

  • 個々の表、索引または列のディクショナリ内の統計情報を修正するSET_*DELETE_*IMPORT_*GATHER_*の各プロシージャは、オブジェクトの統計情報がロックされている場合はエラーになります。

  • 複数のオブジェクト上で動作するプロシージャ(GATHER_SCHEMA_STATSなど)は、オブジェクトの統計情報がロックされている場合、統計情報の変更をスキップします。多くのプロシージャには、ロックを無視するforce引数があります。

  • このプロシージャは、現在の統計情報セットを制限するか、または統計情報を空(未収集)のままにして、動的統計情報を使用します。

  • EXPORT_*_STATSプロシージャを使用する場合、ロックまたはロック解除の状態は、表の統計情報とともにエクスポートされません。

  • UNLOCK_SCHEMA_STATSプロシージャUNLOCK_TABLE_STATSプロシージャも対応するパーティションの統計情報をロック解除するようには設定されていません。LOCK_TABLE_STATSプロシージャを起動すると、統計情報のロック・ビットが表レベルで設定されます。この場合、パーティションや索引などの依存オブジェクトの統計情報を収集できません。同様に、表の統計情報がロックされると、依存がロックされるため、LOCK_PARTITION_STATSプロシージャを明示的に起動する必要がなくなります。

159.7.82 MERGE_COL_USAGEプロシージャ

このプロシージャは、dblinkを使用して、列使用情報をソース・データベースからローカル・データベースにマージします。

構文

列使用情報が指定した表または列にすでに存在する場合は、MERGE_COL_USAGEはローカルとリモートの両方の情報をマージします。

DBMS_STATS.MERGE_COL_USAGE (
   dblink    IN    VARCHAR2);

パラメータ

表159-86 MERGE_COL_USAGEプロシージャのパラメータ

パラメータ 説明

dblink

dblinkの名前

使用上のノート

このプロシージャを実行するには、ユーザーはSYSである必要があります。また、dblinkの作成中に指定されたユーザーは、SYSスキーマの表で選択した権限を持っていることが予期されます。

例外

ORA-20000: 権限が不十分です

ORA-20001: パラメータdblinkにはNULLを指定できません。

ORA-20002: TEMP表を作成できません。

159.7.83 PREPARE_COLUMN_VALUESプロシージャ

これらのプロシージャは、ユーザー指定の最小値、最大値およびヒストグラム終点の実際の値を、SET_COLUMN_STATSを使用して将来格納するためにOracleの内部表記に変換します。

構文

DBMS_STATS.PREPARE_COLUMN_VALUES (
   srec     IN OUT StatRec, 
   charvals        CHARARRAY);

DBMS_STATS.PREPARE_COLUMN_VALUES (
   srec      IN OUT StatRec, 
   datevals         DATEARRAY);

DBMS_STATS.PREPARE_COLUMN_VALUES ( 
   srec     IN OUT StatRec, 
   dblvals         DBLARRAY);

DBMS_STATS.PREPARE_COLUMN_VALUES ( 
   srec     IN OUT StatRec, 
   fltvals         FLTARRAY);

DBMS_STATS.PREPARE_COLUMN_VALUES (
   srec     IN OUT StatRec, 
   numvals         NUMARRAY);

DBMS_STATS.PREPARE_COLUMN_VALUES ( 
   srec     IN OUT StatRec, 
   rawvals         RAWARRAY);

パラメータ

表159-87 PREPARE_COLUMN_VALUESプロシージャのパラメータ

パラメータ 説明

srec.epc

charvalsdatevalsdblvalsfltvalsnumvalsまたはrawvalsで指定される値の数。この値は2から2050の範囲で指定し、ヒストグラム情報を認めないプロシージャ(nvarcharrowid)では2を設定する必要があります。

最初に対応する配列のエントリは列の最小値を含み、最後のエントリは最大値を含みます。2つを超えるエントリがある場合、その他のエントリは、残りの高さ調整ヒストグラムまたは頻度ヒストグラムのエンドポイント値(小さい値から大きい値に順序立てられた中間値を持つ)を含みます。この値は圧縮のために調整できるため、戻り値は、SET_COLUMN_STATSへのコールに対して現状のままになります。

srec.bkvals

頻度またはハイブリッド・ヒストグラムが必要な場合、この配列には、charvalsdatevalsdblvalsfltvalsnumvalsまたはrawvalsで指定されている各個別値の発生回数が含まれます。そうでない場合、この配列は単なる出力パラメータであり、このプロシージャのコール時にはNULLが設定されている必要があります。

srec.rpcnts

ハイブリッド・ヒストグラムが必要な場合、この配列には、charvalsdatevalsnumvalsまたはrawvalsで指定されている各個別値に等しいか、それよりも小さい値の合計頻度が含まれます。そうでない場合、この配列は単なる出力引数であり、このプロシージャのコール時にはNULLが設定されている必要があります。

たとえば、ある配列でnumvals (numvals(i)=4, rpcnts(i)=13)は、4列以下に13行あることを意味します。

ノート:

  • srec.rpcntsを入力した場合には、前述のようにsrec.bkvalsを入力する必要があります。

  • bkvalsまたはrpcnts(あるいはその両方)を入力した場合、charvalsdatevalsnumvalsまたはrawvalsに重複があってはいけません。

表159-88に、データ・タイプ固有の入力パラメータ(1つを使用)を示します。

表159-88 データ・タイプ固有の入力パラメータ

タイプ 説明

charvals

列のタイプが文字ベースの場合の値の配列。各文字列の最初の64バイトまでが使用されます。配列のエントリ数は、2から2050の範囲内である必要があります。データ・タイプが固定のCHARである場合、適切な正規化を行うには、文字列にスペースを追加して15文字にする必要があります。

datevals

列のタイプが日付ベースの場合の値の配列。

dblvals

列のタイプがdoubleベースの場合の値の配列。

fltvals

列のタイプがfloatベースの場合の値の配列。

numvals

列のタイプが数値ベースの場合の値の配列。

rawvals

列のタイプがRAWの場合の値の配列。各値の最初の64バイトまでが使用されます。

nvmin、nvmax

列のタイプが各国語文字セット・ベースの場合の最大値と最小値。このタイプの列について、ヒストグラム情報は提供できません。データ・タイプが固定のCHARである場合、適切な正規化を行うには、文字列にスペースを追加して15文字にする必要があります。

rwmin、rwmax

列タイプがROWIDの場合の最大値と最小値。このタイプの列に、ヒストグラム情報は提供されません。

出力パラメータ

表159-89 PREPARE_COLUMN_VALUESプロシージャの出力パラメータ

パラメータ 説明

srec.minval

SET_COLUMN_STATSへのコールでの使用に適した最小値の内部表記。

srec.maxval

SET_COLUMN_STATSへのコールでの使用に適した最大値の内部表記。

srec.bkvals

SET_COLUMN_STATSへのコールでの使用に適した配列。

srec.novals

SET_COLUMN_STATSへのコールでの使用に適した配列。

srec.eavals

SET_COLUMN_STATSへのコールでの使用に適した配列。

srec.rpcnts

SET_COLUMN_STATSへのコールでの使用に適した配列。

例外

ORA-20001: 入力値が無効または矛盾しています。

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.84 PREPARE_COLUMN_VALUES_NVARCHARプロシージャ

このプロシージャは、ユーザー指定の最小値、最大値およびヒストグラム終点の実際の値を、SET_COLUMN_STATSプロシージャを使用して将来格納するためにOracleの内部表記に変換します。

構文

DBMS_STATS.PREPARE_COLUMN_VALUES_NVARCHAR (
   srec     IN OUT StatRec, 
   nvmin           NVARCHAR2, 
   nvmax           NVARCHAR2);

パラメータ

表159-90 PREPARE_COLUMN_VALUES_NVARCHARプロシージャのパラメータ

パラメータ 説明

srec.epc

charvalsdatevalsdblvalsfltvalsnumvalsまたはrawvalsで指定される値の数。この値は2から2050の範囲で指定し、ヒストグラム情報を認めないプロシージャ(nvarcharrowid)では2を設定する必要があります。

最初に対応する配列のエントリは列の最小値を含み、最後のエントリは最大値を含みます。2つを超えるエントリがある場合、その他のエントリは、残りの高さ調整ヒストグラムまたは頻度ヒストグラムのエンドポイント値(小さい値から大きい値に順序立てられた中間値を持つ)を含みます。この値は圧縮のために調整できるため、戻り値は、SET_COLUMN_STATSへのコールに対して現状のままになります。

srec.bkvals

頻度またはハイブリッド・ヒストグラムが必要な場合、この配列には、charvalsdatevalsdblvalsfltvalsnumvalsまたはrawvalsで指定されている各個別値の発生回数が含まれます。そうでない場合、この配列は単なる出力パラメータであり、このプロシージャのコール時にはNULLが設定されている必要があります。

srec.rpcnts

ハイブリッド・ヒストグラムが必要な場合、この配列には、charvalsdatevalsnumvalsまたはrawvalsで指定されている各個別値に等しいか、それよりも小さい値の合計頻度が含まれます。そうでない場合、この配列は単なる出力引数であり、このプロシージャのコール時にはNULLが設定されている必要があります。

たとえば、ある配列でnumvals (numvals(i)=4, rpcnts(i)=13)は、4列以下に13行あることを意味します。

ノート:

  • srec.rpcntsを入力した場合には、前述のようにsrec.bkvalsを入力する必要があります。

  • bkvalsまたはrpcnts(あるいはその両方)を入力した場合、charvalsdatevalsnumvalsまたはrawvalsに重複があってはいけません。

表159-88に、データ・タイプ固有の入力パラメータ(1つを使用)を示します。

表159-91 PREPARE_COLUMN_VALUES_NVARCHARデータ・タイプ固有の入力パラメータ

タイプ 説明

nvmin、nvmax

列のタイプが各国語文字セット・ベースの場合の最大値と最小値。このタイプの列について、ヒストグラム情報は提供できません。データ・タイプが固定のCHARである場合、適切な正規化を行うには、文字列にスペースを追加して15文字にする必要があります。

出力パラメータ

表159-92 PREPARE_COLUMN_VALUES_NVARCHARプロシージャの出力パラメータ

パラメータ 説明

srec.minval

SET_COLUMN_STATSへのコールでの使用に適した最小値の内部表記。

srec.maxval

SET_COLUMN_STATSへのコールでの使用に適した最大値の内部表記。

srec.bkvals

SET_COLUMN_STATSへのコールでの使用に適した配列。

srec.novals

SET_COLUMN_STATSへのコールでの使用に適した配列。

srec.eavals

SET_COLUMN_STATSへのコールでの使用に適した配列。

srec.rpcnts

SET_COLUMN_STATSへのコールでの使用に適した配列。

例外

ORA-20001: 入力値が無効または矛盾しています。

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.85 PREPARE_COLUMN_VALUES_ROWIDプロシージャ

このプロシージャは、ユーザー指定の最小値、最大値およびヒストグラム終点のデータ・タイプ固有の値を、SET_COLUMN_STATSを使用して将来格納するためにOracleの内部表記に変換します。

構文

DBMS_STATS.PREPARE_COLUMN_VALUES_ROWID (
   srec  IN OUT StatRec, 
   rwmin        ROWID, 
   rwmax        ROWID);

プラグマ

pragma restrict_references(prepare_column_values_rowid, WNDS, RNDS, WNPS, RNPS);

パラメータ

表159-93 PREPARE_COLUMN_VALUES_ROWIDプロシージャのパラメータ

パラメータ 説明

srec

値(IN):

  • epc

  • bkvals

  • rpcnts

値(OUT):

  • minval

  • maxval

  • bkvals

  • novals

  • eavals

  • rpcnts

rwmin

列タイプがROWIDの場合の最小値。このタイプの列に、ヒストグラム情報は提供されません。

rwmax

列タイプがROWIDの場合の最大値。このタイプの列に、ヒストグラム情報は提供されません。

表159-94 StatRecレコード・タイプのフィールド

フィールド 説明

epc (IN)

charvalsdatevalsdblvalsfltvalsnumvalsまたはrawvalsで指定される値の数。この値は2から2050の範囲で指定し、ヒストグラム情報を認めないプロシージャ(nvarcharrowid)では2を設定する必要があります。

最初に対応する配列のエントリは列の最小値を含み、最後のエントリは最大値を含みます。2つを超えるエントリがある場合、その他のエントリは、残りの高さ調整ヒストグラムまたは頻度ヒストグラムのエンドポイント値(小さい値から大きい値に順序立てられた中間値を持つ)を含みます。この値は圧縮のために調整できるため、戻り値は、SET_COLUMN_STATSへのコールに対して現状のままになります。

bkvals (IN)

頻度またはハイブリッド・ヒストグラムが必要な場合、この配列には、charvalsdatevalsdblvalsfltvalsnumvalsまたはrawvalsで指定されている各個別値の発生回数が含まれます。そうでない場合、この配列は単なる出力パラメータであり、このプロシージャのコール時にはNULLが設定されている必要があります。

rpcnts (IN)

ハイブリッド・ヒストグラムが必要な場合、この配列には、charvalsdatevalsnumvalsまたはrawvalsで指定されている各個別値に等しいか、それよりも小さい値の合計頻度が含まれます。そうでない場合、この配列は単なる出力引数であり、このプロシージャのコール時にはNULLが設定されている必要があります。

たとえば、ある配列でnumvals (numvals(i)=4, rpcnts(i)=13)は、4列以下に13行あることを意味します。

ノート:

  • srec.rpcntsを入力した場合には、前述のようにsrec.bkvalsを入力する必要があります。

  • bkvalsまたはrpcnts(あるいはその両方)を入力した場合、charvalsdatevalsnumvalsまたはrawvalsに重複があってはいけません。

minval (OUT)

SET_COLUMN_STATSへのコールでの使用に適した最小値の内部表記。

maxval (OUT)

SET_COLUMN_STATSへのコールでの使用に適した最大値の内部表記。

bkvals (OUT)

SET_COLUMN_STATSへのコールでの使用に適した配列。

novals (OUT)

SET_COLUMN_STATSへのコールでの使用に適した配列。

eavals (OUT)

SET_COLUMN_STATSへのコールでの使用に適した配列。

rpcnts (OUT)

SET_COLUMN_STATSへのコールでの使用に適した配列。

使用上のノート

このプロシージャを起動するために特別な権限やロールは必要ありません。

159.7.86 PUBLISH_PENDING_STATSプロシージャ

このプロシージャは、保留中として収集および格納された統計情報をパブリッシュするために使用されます。

構文

DBMS_STATS.PUBLISH_PENDING_STATS (
    ownname         IN  VARCHAR2 DEFAULT USER,
    tabname         IN  VARCHAR2,
    no_invalidate       BOOLEAN DEFAULT 
       TO_NO_INVALIDATE_TYPE(GET_PARAM('NO_INVALIDATE')),
    force           IN  BOOLEAN DEFAULT FALSE);

パラメータ

表159-95 PUBLISH_PENDING_STATSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

tabname

表名

no_invalidate

TRUEに設定されている場合は、依存カーソルを無効化しません。FALSEに設定した場合、依存カーソルは即時に無効化されます。依存カーソルの無効化の時機をOracleが決定できるようにするには、DBMS_STATS.AUTO_INVALIDATEを使用します。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

TRUEの場合、ロックを無効にします。

セキュリティ・モデル

このプロシージャを実行するには、このプロシージャによって処理される表の統計情報を収集する権限と同じ権限を持っている必要があります。

例外

ORA-20000: 権限が不十分です

使用上のノート

  • パラメータtabnameNULLの場合、指定したスキーマのすべての表にパブリッシュが適用されます。

  • デフォルトの所有者/スキーマは、このプロシージャを実行するユーザーです。

DBMS_STATS.PUBLISH_PENDING_STATS ('SH', null);

159.7.87 PURGE_STATSプロシージャ

このプロシージャは、ディクショナリに保存されている統計情報の古いバージョンをパージします。

このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

構文

DBMS_STATS.PURGE_STATS( 
    before_timestamp       TIMESTAMP WITH TIME ZONE);

パラメータ

表159-96 PURGE_STATSプロシージャのパラメータ

パラメータ 説明

before_timestamp

このタイムスタンプがパージされる前に保存された統計情報のバージョン。NULLの場合、自動パージによるパージ・ポリシーを使用します。自動パージでは、(現在の時間 - 統計履歴のリテンション値)と(システムでの最近の分析時間 - 1)のうちで古いほうの時間を基準として、それよりも古いすべての履歴を削除します。この統計履歴のリテンション値は、ALTER_STATS_HISTORY_RETENTIONプロシージャを使用して変更できます。デフォルトは31日です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 値が無効または矛盾しています。

使用上のノート

このプロシージャを呼び出すには、ANALYZE ANY権限とANALYZE ANY DICTIONARY権限が必要です。

159.7.88 REMAP_STAT_TABLEプロシージャ

このプロシージャは、ユーザー統計表のオブジェクトの名前を再マップします。これにより、同じ定義の異なる名前を持つオブジェクトに統計情報をインポートできます。

構文

DBMS_STATS.REMAP_STAT_TABLE (
   ownname    IN    VARCHAR2,
   stattab    IN    VARCHAR2, 
   src_own    IN    VARCHAR2, 
   src_tab    IN    VARCHAR2, 
   tgt_own    IN    VARCHAR2, 
   tgt_tab    IN    VARCHAR2);

パラメータ

表159-97 REMAP_STAT_TABLEプロシージャのパラメータ

パラメータ 説明

ownname

統計表の所有者。NULLは、現行のスキーマを意味します。

stattab

ユーザー統計表の識別子。

src_own

名前を変更する表の所有者。この引数は、NULLにはできません。

src_tab

名前を変更する表の名前。NULLの場合、すべての表の所有者がsrc_ownになります。

tgt_own

表の所有者の新しい名前。列や索引などの依存オブジェクトの所有者の名前も更新されます。src_ownによって所有されていないsrc_tabの索引は名前変更されません。この引数は、NULLにできません。

tgt_tab

表の新しい名前。この引数は、src_tabNULLではない場合のみ有効です。

例外

ORA-20000: 権限が不十分です

ORA-20001: 無効な入力です

次の文は、ユーザー統計表sh.ustatで、shのすべてのオブジェクトをshsaveに再マップします。

DBMS_STATS.REMAP_STAT_TABLE ('sh', 'ustat', 'sh', NULL, 'shsave', NULL);

前述の再マップ・プロシージャが完了したら、次の文を使用して、統計情報をshsaveのオブジェクトにインポートできます。

DBMS_STATS.IMPORT_SCHEMA_STATS ('shsave', 'ustat', statown => 'sh');

次の文は、sh.customersshsave.customers_savに再マップします。

DBMS_STATS.REMAP_STAT_TABLE ('sh', 'ustat', 'sh', 'customers','shsave', 'customers_sav');

159.7.89 REPORT_ADVISOR_TASKファンクション

このファンクションは、オプティマイザ統計アドバイザ・タスクの結果をレポートします。

構文

DBMS_STATS.REPORT_ADVISOR_TASK(
  task_name          IN   VARCHAR2,
  execution_name     IN   VARCHAR2   := NULL,
  type               IN   VARCHAR2   := 'TEXT',
  section            IN   VARCHAR2   := 'ALL',
  level              IN   VARCHAR2   := 'TYPICAL')
RETURN CLOB;

パラメータ

表159-98 REPORT_ADVISOR_TASKファンクションのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

execution_name

アドバイザのタスク実行を修飾して識別する名前。指定しない場合、指定したタスクの最新の実行が使用されます。

type

オプティマイザ統計アドバイザ・レポートのタイプ。設定可能な値は、TEXTHTMLおよびXMLです。

section

レポート内のセクション。使用可能な値はSUMMARYFINDINGSERRORSおよびALLです。'SUMMARY +FINDINGS +ERRORS''ALL -ERRORS'などのように、プラス(+)演算子とマイナス(-)演算子を使用して、異なる値の組合せを指定できます。

level

レポートの形式。使用可能な値はBASICTYPICALALLおよびSHOW_HIDDENです。'BASIC +SHOW_HIDDEN''TYPICAL +SHOW_HIDDEN'などのように、他の3つの入力値とともにSHOW_HIDDENを指定できます。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • 事前定義されたAUTO_STATS_ADVISOR_TASKでこのサブプログラムを実行できます。

  • このサブプログラムは実行者権限を使用して実行します。

このタスクの実行結果は、実行しているユーザーの権限に依存します。

  • SYSTEMレベル

    ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーのみが、このタスクをシステム・レベルのルールで実行できます。

  • 操作レベル

    結果は次の権限に依存します。

    • ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーが、このタスクをすべての統計操作に実行できます。

    • ANALYZE ANY権限はあるがANALYZE ANY DICTIONARY権限はないユーザーが、このタスクをSYS以外のすべてのスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY DICTIONARY権限はあるがANALYZE ANY権限はないユーザーが、このタスクを独自のスキーマおよびSYSスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY権限もANALYZE ANY DICTIONARY権限もないユーザーのみが、この操作を独自のスキーマに関連した統計操作に実行できます。

  • オブジェクト・レベル

    ユーザーは、統計収集権限を持つすべてのオブジェクトにこのタスクを実行できます。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: ユーザー入力エラー

  • ORA-20012: オプティマイザ統計アドバイザのエラー

戻り値

このファンクションは、レポートを含むCLOBを戻します。

(オプション)ここでAPIまたはサブプログラムの使用例を示して簡潔に説明します。

例159-12 HTMLレポートの生成

この例では、myrepというプロシージャを作成してコールし、HTMLレポートを生成します。

SET ECHO ON
SET FEEDBACK ON
SET SERVEROUTPUT ON
SET TRIMS ON
SET LINESIZE 300

EXECUTE DBMS_OUTPUT.ENABLE (buffer_size => 10000000);

CREATE OR REPLACE PROCEDURE myrep(p_tname VARCHAR2, p_ftype VARCHAR2, which VARCHAR2) 
IS
  v_report CLOB          := null;
  v_script CLOB          := null;
  v_ftype  VARCHAR2(400) := p_ftype;
  v_tname  VARCHAR2(400) := p_tname;
  v_len    NUMBER(10);
  v_ps     NUMBER(10) := 10000;
  v_pn     NUMBER(10) := 1;
  v_ret    VARCHAR2(32767);
BEGIN
   IF which = 'REPORT'
   THEN
      -- generate a report
      v_report := DBMS_STATS.REPORT_ADVISOR_TASK(
                    task_name => v_tname,
                    type      => v_ftype,
                    section   => 'ALL', 
                    level     => 'ALL');
      v_len := DBMS_LOB.getlength(v_report);
      WHILE (v_pn < v_len)
      LOOP
        DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(v_report, v_ps, v_pn));
        v_pn := v_pn + v_ps;
      END LOOP;
   ELSE
      -- generate a script
      v_script := DBMS_STATS.SCRIPT_ADVISOR_TASK(v_tname);
      v_len := DBMS_LOB.getlength(v_script);
      WHILE (v_pn < v_len)
      LOOP
        DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR( v_script, v_ps, v_pn));
        v_pn := v_pn + v_ps;
      END LOOP;
   END IF;
END;
/

SHOW ERRORS

SPOOL report.txt
EXECUTE myrep('my_task','HTML','REPORT');
SPOOL OFF

例159-13 AUTO_STATS_ADVISOR_TASKのテキスト・レポートの生成

次の例では、前述の例で作成したmyrepプロシージャをAUTO_STATS_ADVISOR_TASKに対して起動します。

EXEC myrep('AUTO_STATS_ADVISOR_TASK','TEXT','REPORT');

次の出力例に、レポートの一部を示します。

GENERAL INFORMATION
-------------------------------------------------------------------------------

 Task Name       : AUTO_STATS_ADVISOR_TASK 
 Execution Name  : EXEC_97                 
 Created         : 07-08-16 10:18:10       
 Last Modified   : 07-11-16 03:02:30

-------------------------------------------------------------------------------
SUMMARY
-------------------------------------------------------------------------------
 For execution EXEC_97 of task AUTO_STATS_ADVISOR_TASK, the Statistics Advisor  
 has 10 finding(s). The findings are related to the following rules:  
 COMPLETEAUTOJOB, MAINTAINSTATSHISTORY, USEDEFAULTPREFERENCE,  
 AVOIDSETPROCEDURES, USEDEFAULTPARAMS, USEGATHERSCHEMASTATS, AVOIDSTALESTATS,
 UNLOCKNONVOLATILETABLE, USEINCREMENTAL, AVOIDANALYZETABLE. Please refer to the 
 finding section for detailed information. 
-------------------------------------------------------------------------------
FINDINGS
-------------------------------------------------------------------------------
 Rule Name:         MaintainStatsHistory   
 Rule Description:  Maintain Statistics History

 Finding:  Statistics history tables are too big.    

 Recommendation:  Check the other findings of this rule, as well as the         
                  findings for the rules AvoidFrequentStatsCollection,          
                  UseDefaultPreference, UseDefaultParams for possible causes    
                  and recommendations.                                          
 Rationale:  The size of the statistics history table could be big because of   
             violations of other rules.

----------------------------------------------------
 Rule Name:         UseDefaultPreference              
 Rule Description:  Use Default Preference for Stats Collection  
 Finding:  Global preference SYS_FLAGS is set to a non-default value '1'.  


Recommendation:  Set the value of preference SYS_FLAGS to '0'.  
 Example:           
 -- Setting preference cascade to default value: 
 dbms_stats.set_global_prefs('CASCADE', NULL);

 Rationale:  Preference SYS_FLAGS is for Oracle internal use only, setting it   
             to nondefault value '1' could cause unforeseen consequences.
.
.
.

159.7.90 REPORT_COL_USAGEファンクション

このファンクションは、記録された列(グループ)の使用方法の情報を報告します。

構文

DBMS_STATS.REPORT_COL_USAGE (
   ownname    IN    VARCHAR2,
   tabname    IN    VARCHAR2)
RETURN CLOB;

パラメータ

表159-99 REPORT_COL_USAGEファンクションのパラメータ

パラメータ 説明

ownname

所有者名。NULLの場合、データベース内のすべてのスキーマの表で列の使用情報がレポートされます。

tabname

表名。NULLの場合、ownnameのすべての表で列の使用情報がレポートされます。

使用上のノート

このプロシージャを実行するには、SYSDBA管理権限、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

159.7.91 REPORT_GATHER_AUTO_STATSファンクション

このファンクションは、自動統計情報収集ジョブをレポート・モードで実行します。つまり、統計情報は、実際には収集されませんが、自動統計情報収集が起動されたときに影響を受けるすべてのオブジェクトがレポートされます。

構文

DBMS_STATS.REPORT_GATHER_AUTO_STATS (
   detail_level      VARCHAR2  DEFAULT 'TYPICAL',
   format            VARCHAR2  DEFAULT 'TEXT')
 RETURN CLOB;

パラメータ

表159-100 REPORT_GATHER_AUTO_STATSファンクションのパラメータ

パラメータ 説明

detail_level

レポートの内容の詳細レベル

  • BASIC: レポートには次のものが含まれます。

    - 操作ID

    - 操作名

    - 操作のターゲット・オブジェクト

    - 開始時刻

    - 終了時刻

    - 完了ステータス(成功、失敗など)

  • TYPICAL: BASICレベルで提供される情報に加えて、レポートにはこの操作で統計情報が収集される個別ターゲット・オブジェクトが含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ターゲット・オブジェクトの合計数

    - 正常に完了したオブジェクトの合計数

    - 失敗したオブジェクトの合計数

    - タイムアウトになったオブジェクトの合計数(自動統計情報収集にのみ適用される)

    ターゲット・オブジェクトに関するものは次のとおりです。

    - 各ターゲット・オブジェクトの所有者および名前

    - ターゲット・オブジェクト・タイプ(表、索引など)

    - 開始時刻

    - 終了時刻

    - 完了ステータス

  • ALL: TYPICALレベルで提供される情報に加えて、レポートには各ターゲット・オブジェクトに関する追加情報が含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ジョブ名

    - セッションID

    - パラメータ値

    - 操作が失敗した場合のエラー・メッセージ

    ターゲット・オブジェクトに関するものは次のとおりです。

    - ジョブ名

    - バッチ詳細

    - 推定コスト

    - ターゲット・リスト内のランク

    - ヒストグラムが収集された列

    - 収集された拡張統計情報のリスト(ある場合)

    - ターゲット・リストにオブジェクトを含める理由

    - タスクが失敗した場合の追加のエラー詳細

レポートのいくつかのフィールド(ジョブ名、推定タスク・コストなど)は、操作が同時実行された場合(CONCURRENTプリファレンスがオンの場合)のみ入力されます。

format

レポート・フォーマットは次のとおりです。

  • XML

  • HTML

  • テキスト(デフォルト)

使用上のノート

ユーザーSYSのみがREPORT_GATHER_AUTO_STATSファンクションを実行できます。

159.7.92 REPORT_GATHER_DATABASE_STATSファンクション

このファンクションは、GATHER_DATABASE_STATSファンクションをレポート・モードで実行します。

データベースで統計が収集されることはありませんが、GATHER_DATABASE_STATSを起動したときに影響を受けるすべてのオブジェクトがレポートされます。入力パラメータ・セットは、2つのパラメータが追加されている点を除けば、GATHER_DATABASE_STATS内のものと同じです。

構文

DBMS_STATS.REPORT_GATHER_DATABASE_STATS (
   estimate_percent     IN    NUMBER     DEFAULT to_estimate_percent_type (
                                           GET_PARAM('ESTIMATE_PERCENT')),
   block_sample         IN    BOOLEAN    DEFAULT FALSE,
   method_opt           IN    VARCHAR2   DEFAULT GET_PARAM('METHOD_OPT'),
   degree               IN    NUMBER     DEFAULT TO_DEGREE_TYPE(
                                           GET_PARAM('DEGREE')), 
   granularity          IN    VARCHAR2   DEFAULT GET_PARAM('GRANULARITY'), 
   cascade              IN    BOOLEAN    DEFAULT to_cascade_type (
                                           GET_PARAM('CASCADE')),
   stattab              IN    VARCHAR2   DEFAULT NULL, 
   statid               IN    VARCHAR2   DEFAULT NULL,
   options              IN    VARCHAR2   DEFAULT 'GATHER',
   statown              IN    VARCHAR2   DEFAULT NULL,
   gather_sys           IN    BOOLEAN    DEFAULT TRUE,
   no_invalidate        IN    BOOLEAN    DEFAULT TO_NO_INVALIDATE_TYPE (
                                           GET_PARAM('NO_INVALIDATE')),
   gather_temp          IN    BOOLEAN    DEFAULT FALSE,
   gather_fixed         IN    BOOLEAN    DEFAULT FALSE,
   stattype             IN    VARCHAR2   DEFAULT DATA,
   obj_filter_list      IN    ObjectTab  DEFAULT NULL,
   detail_level         IN    VARCHAR2   DEFAULT 'TYPICAL',
   format               IN    VARCHAR2   DEFAULT 'TEXT') 
 RETURN CLOB;

パラメータ

表159-101 REPORT_GATHER_DATABASE_STATSファンクションのパラメータ

パラメータ 説明

estimate_percent

サンプル・サイズに使用する行のパーセント。有効範囲は0.000001から100です。NULL値の場合は計算されます。

定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

block_sample

ランダム行サンプリングのかわりにランダム・ブロック・サンプリングを使用するかどうかを示します。ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。このパラメータは、統計情報の推定時にのみ使用されます。

method_opt

メソッド・オプション。このパラメータは、FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]の値を受け入れます。

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します。
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

並列度。degreeのデフォルトはNULLです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1(シリアル実行)からDEFAULT_DEGREE(CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の粒度が決定されます。このプリファレンスは、パーティション表にのみ使用されます。

有効な値は次のとおりです。

  • ALL - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

  • AUTO - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

  • DEFAULT - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、GLOBAL AND PARTITIONを使用します。

  • GLOBAL - グローバルな統計情報を収集します。

  • GLOBAL AND PARTITION - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

  • PARTITION - パーティション・レベルの統計情報を収集します。

  • SUBPARTITION - サブパーティション・レベルの統計情報を収集します。

cascade

索引についても統計情報を収集します。このオプションを使用することは、表と列の統計情報の収集に加えて、データベース内の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。索引の統計情報を収集するかどうかをOracleが決定できるようにするには、定数DBMS_STATS.AUTO_CASCADEを使用します。これはデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

データベースでは、統計表が分析対象のオブジェクトと同じスキーマに存在していることを前提としています。そのため、このオプションを使用するには、そのような表がスキーマごとに1つ存在する必要があります。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

options

統計情報を収集するオブジェクトの詳細は、次のように指定します。

GATHER: スキーマ内のすべてのオブジェクトに関する統計情報を収集します。

GATHER AUTO: 必要な統計情報をすべて自動的に収集します。Oracleは、新しい統計情報を必要とするオブジェクトを暗黙的に判別し、その統計情報を収集する方法を判別します。GATHER AUTOが指定された場合、有効な追加パラメータはstattabstatidobjlistおよびstatownのみで、その他のパラメータ設定はすべて無視されます。処理されたオブジェクトのリストを戻します。

GATHER STALE: *_tab_modificationsビューを調べて判別した失効オブジェクトについて、統計情報を収集します。また、失効と判別されたオブジェクトのリストも戻します。

GATHER EMPTY: 現在統計情報がないオブジェクトの統計情報を収集します。統計情報がないオブジェクトのリストを戻します。

LIST AUTO: GATHER AUTOを使用して処理されるオブジェクトのリストを戻します。

LIST STALE: *_tab_modificationsビューを調べて判別した失効オブジェクトのリストを戻します。

LIST EMPTY: 現在統計情報がないオブジェクトのリストを戻します。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

gather_sys

SYSユーザーが所有するオブジェクトの統計情報を収集します。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

gather_temp

TRUEのときにグローバル一時表に関する統計情報を収集します。デフォルトはFALSEです。

一時表は、ON COMMIT PRESERVE ROWS句を使用して作成される必要があります。また、このプロシージャが実行されるセッションのデータに基づいて統計情報が収集されますが、この統計情報はすべてのセッションで共有されます。

gather_fixed

TRUEのときに固定表に関する統計情報を収集します。デフォルトはFALSEです。

固定表に関する統計情報を収集できるのは、ユーザーSYSのみです。ownnameSYSまたはNULLである必要があります。固定表に関する統計情報を収集する場合、次の引数に対して指定した値は無視されます。

  • estimate_percent

  • block_sample

  • stattab

  • statid

  • statown

データベースによって、統計情報が収集される固定表の依存カーソルが無効化されることはありません。このオプションは内部使用専用です。

stattype

統計情報のタイプ:

  • DATA - データ統計のみ

  • CACHE - キャッシュ統計のみ

  • ALL - すべての統計情報

obj_filter_list

オブジェクト・フィルタのリスト。オブジェクト・フィルタに指定する属性値は、二重引用符で囲まないかぎり、大/小文字が区別されません。属性値には、ワイルドカードを使用できます。

指定された場合、GATHER_DATABASE_STATSは、必要に応じて、リスト内の1つ以上のオブジェクト・フィルタを満たすオブジェクトについてのみ統計情報を収集します。1つのオブジェクト・フィルタで、オブジェクト属性に対する制約を指定できます。たとえば、1つのオブジェクト・フィルタで、属性a1およびa2に対してNULL以外の値s1およびs2が指定されます。(o.a1 LIKE s1) AND (o.a2 LIKE s2)がTRUEの場合、オブジェクトoはこのオブジェクト・フィルタを満たすとみなされます。

detail_level

レポートの内容の詳細レベル。有効な値は次のとおりです。

  • BASIC: レポートには次のものが含まれます。

    - 操作ID

    - 操作名

    - 操作のターゲット・オブジェクト

    - 開始時刻

    - 終了時刻

    - 完了ステータス(成功、失敗など)

  • TYPICAL: BASICレベルで提供される情報に加えて、レポートにはこの操作で統計情報が収集される個別ターゲット・オブジェクトが含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ターゲット・オブジェクトの合計数

    - 正常に完了したオブジェクトの合計数

    - 失敗したオブジェクトの合計数

    - タイムアウトになったオブジェクトの合計数(自動統計情報収集にのみ適用される)

    ターゲット・オブジェクトに関するものは次のとおりです。

    - 各ターゲット・オブジェクトの所有者および名前

    - ターゲット・オブジェクト・タイプ(表、索引など)

    - 開始時刻

    - 終了時刻

    - 完了ステータス

  • ALL: TYPICALレベルで提供される情報に加えて、レポートには各ターゲット・オブジェクトに関する追加情報が含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ジョブ名

    - セッションID

    - パラメータ値

    - 操作が失敗した場合のエラー・メッセージ

    ターゲット・オブジェクトに関するものは次のとおりです。

    - ジョブ名

    - バッチ詳細

    - 推定コスト

    - ターゲット・リスト内のランク

    - ヒストグラムが収集された列

    - 収集された拡張統計情報のリスト(ある場合)

    - タスクが失敗した場合の追加のエラー詳細

レポートのいくつかのフィールド(ジョブ名、推定タスク・コストなど)は、操作が同時実行された場合(CONCURRENTプリファレンスがオンの場合)のみ入力されます。

format

レポートの形式。有効な値は、次のとおりです。

  • XML

  • HTML

  • TEXT (デフォルト)

戻り値

レポートを含むCLOBオブジェクト。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

使用上のノート

このプロシージャを実行するには、SYSDBAロールまたはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

159.7.93 REPORT_GATHER_DICTIONARY_STATSファンクション

このファンクションは、GATHER_DICTIONARY_STATSプロシージャをレポート・モードで実行します。

データベースで統計が収集されることはありませんが、GATHER_DICTIONARY_STATSを起動したときに影響を受けるすべてのオブジェクトがレポートされます。レポートの詳細レベルは、detail_level入力パラメータで定義されます。「REPORT_GATHER_DICTIONARY_STATSファンクション」detail_levelformatの説明を参照してください。その他すべての入力パラメータについては、「GATHER_DICTIONARY_STATSプロシージャ」を参照してください。

構文

DBMS_STATS.REPORT_GATHER_DICTIONARY_STATS (
   comp_id               IN    VARCHAR2   DEFAULT NULL, 
   estimate_percent      IN    NUMBER     DEFAULT TO_ESTIMATE_PERCENT_TYPE 
                                                (GET_PARAM('ESTIMATE_PERCENT')),
   block_sample          IN    BOOLEAN    DEFAULT FALSE,
   method_opt            IN    VARCHAR2   DEFAULT GET_PARAM('METHOD_OPT'),
   degree                IN    NUMBER     DEFAULT TO_DEGREE_TYPE 
                                                (GET_PARAM('DEGREE')),
   granularity           IN    VARCHAR2   DEFAULT GET_PARAM('GRANULARITY'),
   cascade               IN    BOOLEAN    DEFAULT TO_CASCADE_TYPE
                                                (GET_PARAM('CASCADE')),
   stattab               IN    VARCHAR2   DEFAULT NULL, 
   options               IN    VARCHAR2   DEFAULT 'GATHER AUTO', 
   no_invalidate         IN    BOOLEAN    DEFAULT TO_NO_INVALIDATE_TYPE
                                                (GET_PARAM('NO_INVALIDATE')),
   stattype              IN    VARCHAR2   DEFAULT 'DATA',
   obj_filter_list       IN    ObjectTab  DEFAULT NULL,
   detail_level          IN    VARCHAR2   DEFAULT 'TYPICAL',
   format                IN    VARCHAR2   DEFAULT 'TEXT') 
 RETURN CLOB;

パラメータ

表159-102 REPORT_GATHER_DICTIONARY_STATSファンクションのパラメータ

パラメータ 説明

comp_id

分析するスキーマのコンポーネントID。NULLの場合、すべてのRDBMSコンポーネントのスキーマが分析されます。DBA_REGISTRYビューのCOMP_ID列を参照してください。このプロシージャでは、引数の指定内容に関係なく、SYSスキーマとSYSTEMスキーマの統計情報を常に収集します。

estimate_percent

サンプリングする行のパーセント(NULLは計算を意味します)。有効範囲は0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します

block_sample

ランダム行サンプリングのかわりにランダム・ブロック・サンプリングを使用するかどうかを決定します。ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。統計情報の推定を実行した場合にのみ該当します。

method_opt

メソッド・オプション。このパラメータには次の値を使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します。
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

並列度。degreeのデフォルトはNULLです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。

初期化パラメータに基づいてデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1(シリアル実行)からDEFAULT_DEGREE(CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の粒度が決定されます。このプリファレンスは、パーティション表にのみ使用されます。

有効な値は次のとおりです。

  • ALL - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

  • AUTO - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

  • DEFAULT - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、GLOBAL AND PARTITIONを使用します。

  • GLOBAL - グローバルな統計情報を収集します。

  • GLOBAL AND PARTITION - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

  • PARTITION - パーティション・レベルの統計情報を収集します。

  • SUBPARTITION - サブパーティション・レベルの統計情報を収集します。

cascade

索引に関する統計情報も収集します。索引の統計情報の収集は、並列処理されません。このオプションを使用することは、表と列の統計情報の収集に加えて、スキーマ内の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。索引の統計情報を収集するかどうかをOracleが決定できるようにするには、定数DBMS_STATS.AUTO_CASCADEを使用します。これがデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

options

統計情報を収集するオブジェクトの詳細は、次のように指定します。

  • 'GATHER': スキーマ内のすべてのオブジェクトに関する統計情報を収集します。

  • 'GATHER AUTO': 必要な統計情報をすべて自動的に収集します。Oracleは、新しい統計情報を必要とするオブジェクトを暗黙的に判別し、その統計情報を収集する方法を判別します。'GATHER AUTO'が指定された場合、有効な追加パラメータはcomp_idstattabstatidおよびstatownのみで、その他のパラメータ設定はすべて無視されます。また、処理されたオブジェクトのリストも戻します。

  • 'GATHER STALE': *_tab_modificationsビューを調べて判別した失効オブジェクトについて、統計情報を収集します。また、失効と判別されたオブジェクトのリストも戻します。

  • 'GATHER EMPTY': 現在統計情報がないオブジェクトの統計情報を収集します。また、統計情報がないオブジェクトのリストも戻します。

  • 'LIST AUTO': 'GATHER AUTO'を使用して処理されるオブジェクトのリストを戻します。

  • 'LIST STALE': *_tab_modificationsビューを調べて判別した失効オブジェクトのリストを戻します。

  • 'LIST EMPTY': 現在統計情報がないオブジェクトのリストを戻します。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattype

統計情報のタイプ:

  • DATA - データ統計のみ

  • CACHE - キャッシュ統計のみ

  • ALL - すべての統計情報

obj_filter_list

オブジェクト・フィルタのリスト。指定された場合、必要に応じて、リスト内の1つ以上のオブジェクト・フィルタを満たすオブジェクトについてのみ統計情報を収集します。1つのオブジェクト・フィルタで、オブジェクト属性に対する制約を指定できます。オブジェクト・フィルタに指定する属性値は、二重引用符で囲まないかぎり、大/小文字が区別されません。属性値には、ワイルドカードを使用できます。1つのオブジェクト・フィルタで、属性a1、a2、...に対してNULL以外の値s1、s2、...が指定されているとします。(o.a1 like s1)、(o.a2 like s2)、...がTRUEの場合、オブジェクトoはこのオブジェクト・フィルタを満たすとみなされます。

detail_level

「REPORT_GATHER_DICTIONARY_STATSファンクション」の説明を参照してください。

format

「REPORT_GATHER_DICTIONARY_STATSファンクション」の説明を参照してください。

戻り値

レポートを含むCLOBオブジェクト。

使用上のノート

このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

例外

ORA-20000: 索引が存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.94 REPORT_GATHER_FIXED_OBJ_STATSファンクション

このファンクションは、GATHER_FIXED_OBJECTS_STATSプロシージャをレポート・モードで実行します。

つまり、統計情報は、実際には収集されませんが、GATHER_FIXED_OBJ_STATSが起動されたときに影響を受けるすべてのオブジェクトがレポートされます。入力パラメータ・セットは、2つのパラメータが追加されている点を除けば、GATHER_FIXED_OBJ_STATS内のものとまったく同じです。

構文

DBMS_STATS.REPORT_GATHER_FIXED_OBJ_STATS (
   stattab          IN  VARCHAR2 DEFAULT NULL,
   statid           IN  VARCHAR2 DEFAULT NULL,
   statown          IN  VARCHAR2 DEFAULT NULL, 
   no_invalidate    IN  BOOLEAN  DEFAULT TO_NO_INVALIDATE_TYPE (
                                     GET_PARAM('NO_INVALIDATE')),
   detail_level     IN  VARCHAR2   DEFAULT 'TYPICAL',
   format           IN  VARCHAR2   DEFAULT 'TEXT') 
 RETURN CLOB;

パラメータ

表159-103 REPORT_GATHER_FIXED_OBJ_STATSプロシージャのパラメータ

パラメータ 説明

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

detail_level

レポートの内容の詳細レベル

  • BASIC: レポートには次のものが含まれます。

    - 操作ID

    - 操作名

    - 操作のターゲット・オブジェクト

    - 開始時刻

    - 終了時刻

    - 完了ステータス(成功、失敗など)

  • TYPICAL: BASICレベルで提供される情報に加えて、レポートにはこの操作で統計情報が収集される個別ターゲット・オブジェクトが含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ターゲット・オブジェクトの合計数

    - 正常に完了したオブジェクトの合計数

    - 失敗したオブジェクトの合計数

    - タイムアウトになったオブジェクトの合計数(自動統計情報収集にのみ適用される)

    ターゲット・オブジェクトに関するものは次のとおりです。

    - 各ターゲット・オブジェクトの所有者および名前

    - ターゲット・オブジェクト・タイプ(表、索引など)

    - 開始時刻

    - 終了時刻

    - 完了ステータス

  • ALL: TYPICALレベルで提供される情報に加えて、レポートには各ターゲット・オブジェクトに関する追加情報が含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ジョブ名

    - セッションID

    - パラメータ値

    - 操作が失敗した場合のエラー・メッセージ

    ターゲット・オブジェクトに関するものは次のとおりです。

    - ジョブ名

    - バッチ詳細

    - 推定コスト

    - ターゲット・リスト内のランク

    - ヒストグラムが収集された列

    - 収集された拡張統計情報のリスト(ある場合)

    - タスクが失敗した場合の追加のエラー詳細

レポートのいくつかのフィールド(ジョブ名、推定タスク・コストなど)は、操作が同時実行された場合(CONCURRENTプリファレンスがオンの場合)のみ入力されます。

format

レポート・フォーマットは次のとおりです。

  • XML

  • HTML

  • テキスト(デフォルト)

戻り値

レポートを含むCLOBオブジェクト。

使用上のノート

このプロシージャを実行するには、SYSDBAまたはANALYZE ANY DICTIONARYシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

159.7.95 REPORT_GATHER_SCHEMA_STATSファンクション

このファンクションは、GATHER_SCHEMA_STATSプロシージャをレポート・モードで実行します。

データベースで実際に統計が収集されることはありませんが、GATHER_SCHEMA_STATSを起動したときに影響を受けるすべてのオブジェクトがレポートされます。入力パラメータ・セットは、2つのパラメータが追加されている点を除けば、GATHER_SCHEMA_STATS内のものとまったく同じです。

構文

DBMS_STATS.REPORT_GATHER_SCHEMA_STATS ( 
   ownname           IN   VARCHAR2, 
   estimate_percent  IN   NUMBER      DEFAULT TO_ESTIMATE_PERCENT_TYPE ( 
                                        GET_PARAM ('ESTIMATE_PERCENT')), 
   block_sample      IN   BOOLEAN     DEFAULT FALSE, 
   method_opt        IN   VARCHAR2    DEFAULT GET_PARAM ('METHOD_OPT'),
   degree            IN   NUMBER      DEFAULT TO_DEGREE_TYPE (
                                        GET_PARAM('DEGREE')), 
   granularity       IN   VARCHAR2    DEFAULT GET_PARAM('GRANULARITY'), 
   cascade           IN   BOOLEAN     DEFAULT TO_CASCADE_TYPE (
                                        GET_PARAM ('CASCADE')), 
   stattab           IN   VARCHAR2    DEFAULT NULL, 
   statid            IN   VARCHAR2    DEFAULT NULL, 
   options           IN   VARCHAR2    DEFAULT 'GATHER', 
   statown           IN   VARCHAR2    DEFAULT NULL, 
   no_invalidate     IN   BOOLEAN     DEFAULT TO_NO_INVALIDATE_TYPE (
                                        GET_PARAM ('NO_INVALIDATE')),
   force             IN   BOOLEAN     DEFAULT FALSE,
   obj_filter_list   IN   ObjectTab   DEFAULT NULL,
   detail_level      IN   VARCHAR2    DEFAULT 'TYPICAL',
   format            IN   VARCHAR2    DEFAULT 'TEXT') 
 RETURN CLOB;

パラメータ

表159-104 REPORT_GATHER_SCHEMA_STATSファンクションのパラメータ

パラメータ 説明

ownname

分析するスキーマ(NULLは現行のスキーマを意味します)。

estimate_percent

推定する行のパーセント(NULLは計算を意味します)で、有効な範囲は、0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズがOracleにより決定されます。これがデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

block_sample

ランダム行サンプリングのかわりにランダム・ブロック・サンプリングを使用するかどうかを示します。ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。統計情報の推定を行った場合にのみ該当します。

method_opt

次を受け入れます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

並列度。degreeのデフォルトはNULLです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1(シリアル実行)からDEFAULT_DEGREE(CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の細分化(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

cascade

索引についても統計情報を収集します。このオプションを使用することは、表と列の統計情報の収集に加えて、スキーマ内の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。索引の統計情報を収集するかどうかをOracleが決定できるようにするには、定数DBMS_STATS.AUTO_CASCADEを使用します。これはデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

options

統計情報を収集するオブジェクトの詳細は、次のように指定します。

GATHER: スキーマ内のすべてのオブジェクトに関する統計情報を収集します。

GATHER AUTO: 必要な統計情報をすべて自動的に収集します。Oracleは、新しい統計情報を必要とするオブジェクトを暗黙的に判別し、その統計情報を収集する方法を判別します。GATHER AUTOが指定された場合、有効な追加パラメータはownnamestattabstatidobjlistおよびstatownのみで、その他のパラメータ設定はすべて無視されます。処理されたオブジェクトのリストを戻します。

GATHER STALE: *_tab_modificationsビューを調べて判別した失効オブジェクトについて、統計情報を収集します。また、失効と判別されたオブジェクトのリストも戻します。

GATHER EMPTY: 現在統計情報がないオブジェクトについて統計情報を収集し、統計情報なしと判別されたオブジェクトのリストも戻します。

LIST AUTO: GATHER AUTOを使用して処理されるオブジェクトのリストを戻します。

LIST STALE: *_tab_modificationsビューを調べて判別した失効オブジェクトのリストを戻します。

LIST EMPTY: 現在統計情報がないオブジェクトのリストを戻します。

objlist

失効または空と判別されたオブジェクトのリスト。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

ロックされている場合でも、オブジェクトの統計情報を収集します。

obj_filter_list

オブジェクト・フィルタのリスト。指定された場合、GATHER_SCHEMA_STATSは、必要に応じて、リスト内の1つ以上のオブジェクト・フィルタを満たすオブジェクトについてのみ統計情報を収集します。1つのオブジェクト・フィルタで、オブジェクト属性に対する制約を指定できます。オブジェクト・フィルタに指定する属性値は、二重引用符で囲まないかぎり、大/小文字が区別されません。属性値には、ワイルドカードを使用できます。1つのオブジェクト・フィルタで、属性a1、a2、...に対してNULL以外の値s1、s2、...が指定されているとします。(o.a1 like s1)、(o.a2 like s2)、...がTRUEの場合、オブジェクトoはこのオブジェクト・フィルタを満たすとみなされます。詳細は、「オブジェクト・フィルタ・リストの適用」を参照してください。

detail_level

レポートの内容の詳細レベル

  • BASIC: レポートには次のものが含まれます。

    - 操作ID

    - 操作名

    - 操作のターゲット・オブジェクト

    - 開始時刻

    - 終了時刻

    - 完了ステータス(成功、失敗など)

  • TYPICAL: BASICレベルで提供される情報に加えて、レポートにはこの操作で統計情報が収集される個別ターゲット・オブジェクトが含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ターゲット・オブジェクトの合計数

    - 正常に完了したオブジェクトの合計数

    - 失敗したオブジェクトの合計数

    - タイムアウトになったオブジェクトの合計数(自動統計情報収集にのみ適用される)

    ターゲット・オブジェクトに関するものは次のとおりです。

    - 各ターゲット・オブジェクトの所有者および名前

    - ターゲット・オブジェクト・タイプ(表、索引など)

    - 開始時刻

    - 終了時刻

    - 完了ステータス

  • ALL: TYPICALレベルで提供される情報に加えて、レポートには各ターゲット・オブジェクトに関する追加情報が含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ジョブ名

    - セッションID

    - パラメータ値

    - 操作が失敗した場合のエラー・メッセージ

    ターゲット・オブジェクトに関するものは次のとおりです。

    - ジョブ名

    - バッチ詳細

    - 推定コスト

    - ターゲット・リスト内のランク

    - ヒストグラムが収集された列

    - 収集された拡張統計情報のリスト(ある場合)

    - タスクが失敗した場合の追加のエラー詳細

レポートのいくつかのフィールド(ジョブ名、推定タスク・コストなど)は、操作が同時実行された場合(CONCURRENTプリファレンスがオンの場合)のみ入力されます。

format

レポート・フォーマットは次のとおりです。

  • XML

  • HTML

  • テキスト(デフォルト)

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

例外

ORA-20000: スキーマが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

オブジェクト・フィルタ・リストの適用

次の例では、SAMPLEスキーマのT接頭辞を持つ任意の表、またはHRスキーマの任意の表(失効している場合)で統計情報が収集されることを指定しています。

    DECLARE
      filter_lst  DBMS_STATS.OBJECTTAB := DBMS_STATS.OBJECTTAB();
    BEGIN
      filter_lst.extend(2);
      filter_lst(1).ownname := 'SAMPLE';
      filter_lst(1).objname := 'T%';
      filter_lst(2).ownname := 'HR';
      DBMS_STATS.GATHER_SCHEMA_STATS(NULL, obj_filter_list => filter_lst,
                                     options => 'GATHER STALE');
    END; 

159.7.96 REPORT_GATHER_TABLE_STATSファンクション

このプロシージャは、GATHER_TABLE_STATSプロシージャをレポート・モードで実行します。

つまり、統計情報は、実際には収集されませんが、GATHER_TABLE_STATSが起動されたときに影響を受けるすべてのオブジェクトがレポートされます。

構文

DBMS_STATS.REPORT_GATHER_TABLE_STATS (
   ownname          VARCHAR2, 
   tabname          VARCHAR2, 
   partname         VARCHAR2 DEFAULT NULL,
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')), 
   block_sample     BOOLEAN  DEFAULT FALSE,
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   no_invalidate    BOOLEAN  DEFAULT  to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   stattype         VARCHAR2 DEFAULT 'DATA',
   force            BOOLEAN  DEFAULT FALSE)
   detail_level     VARCHAR2 DEFAULT 'TYPICAL',   format           VARCHAR2 DEFAULT 'TEXT')
 RETURN CLOB;

パラメータ

表159-105 REPORT_GATHER_TABLE_STATSファンクションのパラメータ

パラメータ 説明

ownname

分析する表のスキーマ。

tabname

表の名前。

partname

パーティションの名前

estimate_percent

推定する行のパーセント(NULLは計算を意味します)で、有効な範囲は、0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズがOracleにより決定されます。これがデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

block_sample

ランダム行サンプリングのかわりにランダム・ブロック・サンプリングを使用するかどうかを示します。ランダム・ブロック・サンプリングがより効率的ですが、データがディスク上にランダムに分散していない場合、サンプル値はある程度相関があります。統計情報の推定を行った場合にのみ該当します。

method_opt

次のオプションのいずれかを使用するか、または両方を組み合せて使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

  • FOR COLUMNS [column_clause] [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

column_clauseは、column_clause := column_name | extension name | extensionのように定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。
  • - column_name: 列の名前。
  • - extension: (column_name, Colume_name [, ...])の書式の列グループまたは式。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

degree

並列度。degreeのデフォルトはNULLです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。NULLの場合、CREATE TABLE文またはALTER TABLE文のDEGREE句で指定された表のデフォルト値が使用されます。初期化パラメータに基づくデフォルト値を指定するには、定数DBMS_STATS.DEFAULT_DEGREEを使用します。AUTO_DEGREE値を指定すると、並列度が自動的に決定されます。オブジェクトのサイズに応じて、1(シリアル実行)からDEFAULT_DEGREE(CPU数と初期化パラメータに基づくシステム・デフォルト値)までの間の値になります。DEGREE=>NULLDEGREE=>nまたはDEGREE=>DBMS_STATS.DEFAULT_DEGREEの使用時にオブジェクトのサイズがパラレル実行に適さない場合は、DBMS_STATSの現行の実装ではシリアル実行が使用される場合があります。

granularity

収集する統計情報の細分化(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'APPROX_GLOBAL AND PARTITION' - 'GLOBAL AND PARTITION'に似ていますが、この場合、グローバルな統計情報がパーティション・レベルの統計情報から集計されます。このオプションでは、列の個別値の数および索引の個別キーの数を除く、すべての統計情報が集計されます。表レベルの列の既存ヒストグラムも集計されます。集計には統計のあるパーティションのみが使用され、正確なグローバル統計情報を取得するために、ユーザーはすべてのパーティションの統計情報があることを確認する必要があります。グローバルな統計情報は、partnameNULLの場合または集計を実行できない場合(いずれかのパーティションの統計情報がない場合など)に収集されます。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

cascade

表の索引について統計情報を収集します。このオプションを使用することは、表の各索引でGATHER_INDEX_STATSプロシージャを実行するのと同じです。定数DBMS_STATS.AUTO_CASCADEを使用すると、索引統計を収集するかどうかがOracleにより決定されます。これはデフォルトです。デフォルト値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します

stattab

現在の統計情報の保存場所を示すユーザー統計表の識別子。

statid

stattab内の統計情報を関連付ける識別子(オプション)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

stattype

統計タイプ。許可されている値は、DATAのみです。

force

ロックされている場合でも、表の統計情報を収集します。

detail_level

レポートの内容の詳細レベル

  • BASIC: レポートには次のものが含まれます。

    - 操作ID

    - 操作名

    - 操作のターゲット・オブジェクト

    - 開始時刻

    - 終了時刻

    - 完了ステータス(成功、失敗など)

  • TYPICAL: BASICレベルで提供される情報に加えて、レポートにはこの操作で統計情報が収集される個別ターゲット・オブジェクトが含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ターゲット・オブジェクトの合計数

    - 正常に完了したオブジェクトの合計数

    - 失敗したオブジェクトの合計数

    - タイムアウトになったオブジェクトの合計数(自動統計情報収集にのみ適用される)

    ターゲット・オブジェクトに関するものは次のとおりです。

    - 各ターゲット・オブジェクトの所有者および名前

    - ターゲット・オブジェクト・タイプ(表、索引など)

    - 開始時刻

    - 終了時刻

    - 完了ステータス

  • ALL: TYPICALレベルで提供される情報に加えて、レポートには各ターゲット・オブジェクトに関する追加情報が含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ジョブ名

    - セッションID

    - パラメータ値

    - 操作が失敗した場合のエラー・メッセージ

    ターゲット・オブジェクトに関するものは次のとおりです。

    - ジョブ名

    - バッチ詳細

    - 推定コスト

    - ターゲット・リスト内のランク

    - ヒストグラムが収集された列

    - 収集された拡張統計情報のリスト(ある場合)

    - タスクが失敗した場合の追加のエラー詳細

レポートのいくつかのフィールド(ジョブ名、推定タスク・コストなど)は、操作が同時実行された場合(CONCURRENTプリファレンスがオンの場合)のみ入力されます。

format

レポート・フォーマットは次のとおりです。

  • XML

  • HTML

  • テキスト(デフォルト)

戻り値

レポートを含むCLOBオブジェクト。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.97 REPORT_SINGLE_STATS_OPERATIONファンクション

このファンクションはマルチテナント環境で特定のプラガブル・データベース(PDB)の指定された操作のレポートを生成します(オプション)。

構文

DBMS_STATS.REPORT_SINGLE_STATS_OPERATIONS (
   opid              NUMBER,
   detail_level      VARCHAR2  DEFAULT 'TYPICAL',
   format            VARCHAR2  DEFAULT 'TEXT'
   container_id      NUMBER    DEFAULT NULL)
 RETURN CLOB;

パラメータ

表159-106 REPORT_SINGLE_STATS_OPERATIONファンクションのパラメータ

パラメータ 説明

opid

操作ID

detail_level

レポートの内容の詳細レベル

  • BASIC: レポートには次のものが含まれます。

    - 操作ID

    - 操作名

    - 操作のターゲット・オブジェクト

    - 開始時刻

    - 終了時刻

    - 完了ステータス(成功、失敗など)

  • TYPICAL: BASICレベルで提供される情報に加えて、レポートにはこの操作で統計情報が収集される個別ターゲット・オブジェクトが含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ターゲット・オブジェクトの合計数

    - 正常に完了したオブジェクトの合計数

    - 失敗したオブジェクトの合計数

    - タイムアウトになったオブジェクトの合計数(自動統計情報収集にのみ適用される)

    ターゲット・オブジェクトに関するものは次のとおりです。

    - 各ターゲット・オブジェクトの所有者および名前

    - ターゲット・オブジェクト・タイプ(表、索引など)

    - 開始時刻

    - 終了時刻

    - 完了ステータス

  • ALL: TYPICALレベルで提供される情報に加えて、レポートには各ターゲット・オブジェクトに関する追加情報が含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ジョブ名

    - セッションID

    - パラメータ値

    - 操作が失敗した場合のエラー・メッセージ

    ターゲット・オブジェクトに関するものは次のとおりです。

    - ジョブ名

    - バッチ詳細

    - 推定コスト

    - ターゲット・リスト内のランク

    - ヒストグラムが収集された列

    - 収集された拡張統計情報のリスト(ある場合)

    - ターゲット・リストにオブジェクトを含める理由(自動統計情報収集操作タスクにのみ適用される)。

    - タスクが失敗した場合の追加のエラー詳細

レポートのいくつかのフィールド(ジョブ名、推定タスク・コストなど)は、操作が同時実行された場合(CONCURRENTプリファレンスがオンの場合)のみ入力されます。

format

レポート・フォーマットは次のとおりです。

  • XML

  • HTML

  • TEXT (デフォルト)

container_id

この操作が実行されたプラガブル・データベース(PDB)のID。マルチテナント環境では、操作IDによって操作が一意に識別されません。つまり、各PDBの異なる操作に同じ操作IDが割り当てられている場合があります。したがって、マルチテナント環境では、PDB IDが指定されない場合、レポートに複数の操作が含まれる場合があります。通常の(CDBではない)データベース環境では、操作IDは操作ごとに一意です。

使用上のノート

このプロシージャを呼び出すには、ANALYZE ANY権限とANALYZE ANY DICTIONARY権限が必要です。

159.7.98 REPORT_STATS_OPERATIONSファンクション

このファンクションは、2つのタイムスタンプ(指定されている場合と指定されていない場合がある)の間に実行されるすべての統計操作のレポートを生成します。

これを使用するとレポートの範囲を狭め、レポートに自動統計情報収集の実行のみを含めることができます。さらに、マルチテナント環境では、オプションとしてプラガブル・データベース(PDB)のIDを指定して、指定されたプラガブル・データベースからの統計操作のみが報告されるようにすることもできます。

構文

DBMS_STATS.REPORT_STATS_OPERATIONS (
   detail_level       VARCHAR2 DEFAULT 'TYPICAL',
   format             VARCHAR2 DEFAULT 'TEXT',
   latestN            NUMBER DEFAULT NULL,
   since              TIMESTAMP WITH TIME ZONE DEFAULT NULL,
   until              TIMESTAMP WITH TIME ZONE DEFAULT NULl,
   auto_only          BOOLEAN DEFAULT FALSE,
   container_ids      DBMS_UTILITY.NUMBER_ARRAY DEFAULT DBMS_STATS.NULL_NUMTAB)
 RETURN CLOB;

パラメータ

表159-107 REPORT_STATS_OPERATIONSファンクションのパラメータ

パラメータ 説明

detail_level

レポートの内容の詳細レベル

  • BASIC: レポートには次のものが含まれます。

    - 操作ID

    - 操作名

    - 操作のターゲット・オブジェクト

    - 開始時刻

    - 終了時刻

    - 完了ステータス(成功、失敗など)

  • TYPICAL: BASICレベルで提供される情報に加えて、レポートにはこの操作で統計情報が収集される個別ターゲット・オブジェクトが含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ターゲット・オブジェクトの合計数

    - 正常に完了したオブジェクトの合計数

    - 失敗したオブジェクトの合計数

    - タイムアウトになったオブジェクトの合計数(自動統計情報収集にのみ適用される)。

  • ALL: TYPICALレベルで提供される情報に加えて、レポートには各ターゲット・オブジェクトに関する追加情報が含まれています。具体的には、次のような操作関連の詳細情報が含まれます。

    - ジョブ名(操作がジョブで実行された場合)。

    - セッションID

    - パラメータ値

    - 操作が失敗した場合の追加のエラー詳細。

format

レポート・フォーマットは次のとおりです。

  • XML

  • HTML

  • テキスト(デフォルト)

latestN

指定された時間ポイント(開始と終了)の間に実行された最新のN個の操作のみが含まれるようにレポートを制限します。デフォルト値はNULLで、当てはまるすべての操作がレポートされることを意味します。

since

レポートには、このタイムスタンプ後に開始された統計操作のみが含まれます。

until

レポートには、このタイムスタンプ前に終了した統計操作のみが含まれます。

auto_only

TRUEの場合、レポートには、自動統計情報収集ジョブのみが含まれます。

container_ids

マルチテナント環境では、1つ以上のプラガブル・データベース(PDB)が含まれています。container_idsはPDBの1組のIDを表し、指定されたPDBからの統計操作のみが報告されるようにします(マルチテナント環境のみに適用されます)。

使用上のノート

このプロシージャを呼び出すには、ANALYZE ANY権限とANALYZE ANY DICTIONARY権限が必要です。

container_ids入力パラメータのタイプはDBMS_UTILITY.NUMBER_ARRAYで、これはPL/SQL連想配列コレクションです。連想配列タイプでは、より柔軟性な、harvals表のように編成されたエントリが許可されていますが、このファンクションは、container_idsを正規表コレクション(最初のIDが索引1にあり、最後のIDが索引container_ids.countにある。2つのID間に空の配列スロットは存在しない)として処理します。3つのコンテナIDの例を次に示します。

DECLARE
    conid_tab  DBMS_UTILITY.NUMBER_ARRAY;
    report clob;
BEGIN
    conid_tab(1) := 124;
    conid_tab(2) := 63;
    conid_tab(3) := 98;
    report := DBMS_STATS.REPORT_STATS_OPERATIONS (container_ids => conid_tab);
END;

159.7.99 RESET_ADVISOR_TASKプロシージャ

このプロシージャは、オプティマイザ統計アドバイザ・タスクの実行を初期状態にリセットします。現在実行されていないタスクのみをリセットします。

構文

DBMS_STATS.RESET_ADVISOR_TASK (
  task_name IN VARCHAR2);

パラメータ

表159-108 RESET_ADVISOR_TASKプロシージャのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

159.7.100 RESET_COL_USAGEプロシージャ

このプロシージャは、記録された列(グループ)の使用情報を削除します。

このプロシージャは、シード列の使用を初期化する必要があるという非常に稀なケースでのみ使用する必要があります。

構文

DBMS_STATS.RESET_COL_USAGE (
   ownname    IN    VARCHAR2,
   tabname    IN    VARCHAR2);

パラメータ

表159-109 RESET_COL_USAGEプロシージャのパラメータ

パラメータ 説明

ownname

所有者名。NULLの場合、データベース内のすべてのスキーマの表で列の使用情報が削除されます。

tabname

表名。NULLの場合、ownnameのすべての表で列の使用情報が削除されます。所有者とtabnameの両方がNULLの場合、シード列の使用が停止されます(該当する場合)。詳細は、「SEED_COL_USAGEプロシージャ」を参照してください。

使用上のノート

このプロシージャを実行するには、SYSDBA管理権限、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

159.7.101 RESET_GLOBAL_PREF_DEFAULTSプロシージャ

このプロシージャは、グローバル・プリファレンス(CASCADEESTIMATE_PERCENTGRANULARITYなど)をデフォルト値に設定します。

また、SET_GLOBAL_PREFSプロシージャによって設定されたグローバル・プリファレンスを元に戻します。

構文

DBMS_STATS.RESET_GLOBAL_PREF_DEFAULTS;

使用上のノート

このプロシージャを呼び出すには、ANALYZE ANY権限とANALYZE ANY DICTIONARY権限が必要です。

159.7.102 RESET_PARAM_DEFAULTSプロシージャ

この推奨されないプロシージャは、すべてのパラメータのデフォルト値をOracleの推奨値にリセットします。

ノート:

テクノロジが改良されたため、このサブプログラムは使用されなくなりました(このサブプログラムは、下位互換性を維持する目的でのみ保持されています)。このプロシージャのかわりに、RESET_GLOBAL_PREF_DEFAULTSプロシージャを使用します。

次も参照してください。DBMS_STATSの推奨されないサブプログラム

構文

DBMS_STATS.RESET_PARAM_DEFAULTS;

159.7.103 RESTORE_DATABASE_STATSプロシージャ

このプロシージャは、データベース内のすべての表の統計情報を、指定したタイムスタンプ(as_of_timestamp)でリストアします。

構文

DBMS_STATS.RESTORE_DATABSE_STATS( 
   as_of_timestamp        TIMESTAMP WITH TIME ZONE, 
   force                  BOOLEAN DEFAULT FALSE,
   no_invalidate          BOOLEAN DEFAULT to_no_invalidate_type
                                                    (GET_PARAM('NO_INVALIDATE')));

パラメータ

表159-110 RESTORE_DATABASE_STATSプロシージャのパラメータ

パラメータ 説明

as_of_timestamp

統計情報をリストアするタイムスタンプ。

force

統計情報は、ロックされていてもリストアされます。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 値が無効または矛盾しています。

ORA-20006: 統計情報をリストアできません。統計履歴を使用できません。

159.7.104 RESTORE_DICTIONARY_STATSプロシージャ

このプロシージャは、すべてのディクショナリ表('SYS'、'SYSTEM'およびRDBMSコンポーネントのスキーマ)の統計情報を、指定したタイムスタンプ(as_of_timestamp)でリストアします。

構文

DBMS_STATS.RESTORE_DICTIONARY_STATS( 
   as_of_timestamp        TIMESTAMP WITH TIME ZONE, 
   force                  BOOLEAN DEFAULT FALSE,
   no_invalidate          BOOLEAN DEFAULT to_no_invalidate_type
                                                    (GET_PARAM('NO_INVALIDATE')));

パラメータ

表159-111 RESTORE_DICTIONARY_STATSプロシージャのパラメータ

パラメータ 説明

as_of_timestamp

統計情報をリストアするタイムスタンプ。

force

統計情報は、ロックされていてもリストアされます。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

使用上のノート

このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 値が無効または矛盾しています。

ORA-20006: 統計情報をリストアできません。統計履歴を使用できません。

159.7.105 RESTORE_FIXED_OBJECTS_STATSプロシージャ

このプロシージャは、すべての固定表の統計情報を、指定したタイムスタンプ(as_of_timestamp)でリストアします。

構文

DBMS_STATS.RESTORE_FIXED_OBJECTS_STATS( 
   as_of_timestamp        TIMESTAMP WITH TIME ZONE, 
   force                  BOOLEAN DEFAULT FALSE,
   no_invalidate          BOOLEAN DEFAULT to_no_invalidate_type
                                                    (GET_PARAM('NO_INVALIDATE')));

パラメータ

表159-112 RESTORE_FIXED_OBJECTS_STATSプロシージャのパラメータ

パラメータ 説明

as_of_timestamp

統計情報をリストアするタイムスタンプ。

force

統計情報は、ロックされていてもリストアされます。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

使用上のノート

このプロシージャを実行するには、SYSDBAまたはANALYZE ANY DICTIONARYシステム権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 値が無効または矛盾しています。

ORA-20006: 統計情報をリストアできません。統計履歴を使用できません。

159.7.106 RESTORE_SCHEMA_STATSプロシージャ

このプロシージャは、スキーマ内のすべての表の統計情報を、指定したタイムスタンプ(as_of_timestamp)でリストアします。

構文

DBMS_STATS.RESTORE_SCHEMA_STATS( 
   ownname                VARCHAR2, 
   as_of_timestamp        TIMESTAMP WITH TIME ZONE, 
   force                  BOOLEAN DEFAULT FALSE,
   no_invalidate          BOOLEAN DEFAULT to_no_invalidate_type
                                                    (GET_PARAM('NO_INVALIDATE')));

パラメータ

表159-113 RESTORE_SCHEMA_STATSプロシージャのパラメータ

パラメータ 説明

ownname

統計情報をリストアする表のスキーマ。

as_of_timestamp

統計情報をリストアするタイムスタンプ。

force

統計情報は、ロックされていてもリストアされます。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 値が無効または矛盾しています。

ORA-20006: 統計情報をリストアできません。統計履歴を使用できません。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.107 RESTORE_SYSTEM_STATSプロシージャ

このプロシージャは、システムの統計情報を、指定したタイムスタンプ(as_of_timestamp)でリストアします。

構文

DBMS_STATS.RESTORE_SCHEMA_STATS( 
   as_of_timestamp        TIMESTAMP WITH TIME ZONE);

パラメータ

表159-114 RESTORE_SYSTEM_STATSプロシージャのパラメータ

パラメータ 説明

as_of_timestamp

統計情報をリストアするタイムスタンプ。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 値が無効または矛盾しています。

ORA-20006: 統計情報をリストアできません。統計履歴を使用できません。

使用上のノート

このプロシージャを実行するには、GATHER_SYSTEM_STATISTICSロールが必要です。

159.7.108 RESTORE_TABLE_STATSプロシージャ

このプロシージャは、表の統計情報を、指定したタイムスタンプ(as_of_timestamp)でリストアします。また、関連付けられた索引と列の統計がリストアされます。

指定したタイムスタンプでの表の統計情報がロックされている場合、プロシージャはその統計情報をロックします。プロシージャは、ユーザー定義の統計情報をリストアしません。

構文

DBMS_STATS.RESTORE_TABLE_STATS (
   ownname                   VARCHAR2, 
   tabname                   VARCHAR2, 
   as_of_timestamp           TIMESTAMP WITH TIME ZONE,
   restore_cluster_index     BOOLEAN DEFAULT FALSE,
   force                     BOOLEAN DEFAULT FALSE,
   no_invalidate             BOOLEAN DEFAULT to_no_invalidate_type
                                                    (GET_PARAM('NO_INVALIDATE')));

パラメータ

表159-115 RESTORE_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

統計情報をリストアする表のスキーマ。

tabname

表の名前。

as_of_timestamp

統計情報をリストアするタイムスタンプ。

restore_cluster_index

表がクラスタの一部であるときに、このパラメータがTRUEに設定されている場合は、クラスタ索引の統計情報をリストアします。

force

統計情報は、表の統計情報がロックされていてもリストアされます。指定したタイムスタンプでの表の統計情報がロックされていない場合は、その統計情報をロック解除します。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 値が無効または矛盾しています。

ORA-20006: 統計情報をリストアできません。統計履歴を使用できません。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.109 RESUME_ADVISOR_TASKプロシージャ

このプロシージャは、中断したタスクを再開します。最後に中断した実行のみを再開します。

構文

DBMS_STATS.RESUME_ADVISOR_TASK (
  task_name IN VARCHAR2);

パラメータ

表159-116 RESUME_ADVISOR_TASKプロシージャのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

ユーザーによってタスクが実行され、中断されて、別のユーザーによって再開されるケースについて考えます。この場合、オプティマイザ統計アドバイザでは、タスクを再開したユーザーの権限に基づいて、再開された実行をチェックします。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

例159-14 中断したタスクの再開

この例では、SQL*Plusセッションを開始して、my_taskというアドバイザ・タスクを作成して実行します。

DECLARE
  v_tname   VARCHAR2(128) := 'my_task';
  v_ename   VARCHAR2(128) := NULL;
BEGIN
  -- create a task
  v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);

  -- execute the task
  v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
/

個々の端末で、2つ目のSQL*Plusセッションを開始して、次のプログラムを実行します。

XEC DBMS_STATS.INTERRUPT_ADVISOR_TASK('my_task');

最初のセッションでは、タスクの取消しを示すORA-13632が戻されます。

ORA-13638: The user interrupted the current operation.

2つ目のSQL*Plusセッションで、次のようにタスク実行を再開します。

XEC DBMS_STATS.RESUME_ADVISOR_TASK('my_task');

159.7.110 SCRIPT_ADVISOR_TASKファンクション

オプティマイザ統計アドバイザで検出された問題に対して推奨されるアクションを実装するスクリプトを取得します。

生成されるスクリプトには、実行可能なPL/SQL文が含まれます。各アクションのコマンドの前には、潜在的な副作用をリストするコメントが示されます。コメントを確認して、目的のセクションのみを実行できます。

構文

DBMS_STATS.SCRIPT_ADVISOR_TASK (
  task_name          IN   VARCHAR2,
  execution_name     IN   VARCHAR2    := NULL,
  dir_name           IN   VARCHAR2    := NULL,
  level              IN   VARCHAR2    := 'TYPICAL')
RETURN CLOB;

パラメータ

表159-117 SCRIPT_ADVISOR_TASKファンクションのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

execution_name

アドバイザの実行を修飾して識別する名前。指定しない場合、アドバイザによって自動的に生成されます。

指定した実行が既存の実行名と競合する場合は、ファンクションでエラーが戻されます。

dir_name

生成されるスクリプトを書き込むディレクトリ名。名前が指定されない(NULL)場合、戻されるCLOBにスクリプトが含まれます。名前が指定されると、指定したディレクトリにCLOBの新しいファイルとしてスクリプトが戻されます。

level

生成するスクリプトのレベル。有効な値は、次のとおりです。

  • ALL: フィルタを無視し、すべての検索結果に対するスクリプトを生成します。

  • TYPICAL: 準備されたフィルタに従ってスクリプトを生成します。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • 事前定義されたAUTO_STATS_ADVISOR_TASKでこのサブプログラムを実行できます。

  • このサブプログラムは実行者権限を使用して実行します。

このタスクの実行結果は、実行しているユーザーの権限に依存します。

  • SYSTEMレベル

    ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーのみが、このタスクをシステム・レベルのルールで実行できます。

  • 操作レベル

    結果は次の権限に依存します。

    • ANALYZE ANYおよびANALYZE ANY DICTIONARYの両方の権限を持つユーザーが、このタスクをすべての統計操作に実行できます。

    • ANALYZE ANY権限はあるがANALYZE ANY DICTIONARY権限はないユーザーが、このタスクをSYS以外のすべてのスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY DICTIONARY権限はあるがANALYZE ANY権限はないユーザーが、このタスクを独自のスキーマおよびSYSスキーマに関連した統計操作に実行できます。

    • ANALYZE ANY権限もANALYZE ANY DICTIONARY権限もないユーザーのみが、この操作を独自のスキーマに関連した統計操作に実行できます。

  • オブジェクト・レベル

    ユーザーは、統計収集権限を持つすべてのオブジェクトにこのタスクを実行できます。

戻り値

このファンクションは、スクリプトを含むCLOBを戻します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

例159-15 オプティマイザ統計アドバイザ・スクリプトの作成

この例では、myrepというプロシージャを作成し、このプロシージャをコールして、推奨事項を実装するスクリプトを印刷します。

SET ECHO ON
SET FEEDBACK ON
SET SERVEROUTPUT ON
SET TRIMS ON
SET LINESIZE 300

EXECUTE DBMS_OUTPUT.ENABLE (buffer_size => 10000000);

CREATE OR REPLACE PROCEDURE myrep(p_tname VARCHAR2, p_ftype VARCHAR2, which VARCHAR2) 
IS
  v_report CLOB          := null;
  v_script CLOB          := null;
  v_ftype  VARCHAR2(400) := p_ftype;
  v_tname  VARCHAR2(400) := p_tname;
  v_len    NUMBER(10);
  v_ps     NUMBER(10)    := 10000;
  v_pn     NUMBER(10)    := 1;
  v_ret    VARCHAR2(32767);
BEGIN
   IF which = 'REPORT'
   THEN
      -- generate a report
      v_report := DBMS_STATS.REPORT_ADVISOR_TASK(
                    task_name => v_tname,
                    type      => v_ftype,
                    section   => 'ALL', 
                    level     => 'ALL');
      v_len := DBMS_LOB.getlength(v_report);
      WHILE (v_pn < v_len)
      LOOP
        DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(v_report, v_ps, v_pn));
        v_pn := v_pn + v_ps;
      END LOOP;
   ELSE
      -- generate a script
      v_script := DBMS_STATS.SCRIPT_ADVISOR_TASK(v_tname);
      v_len := DBMS_LOB.getlength(v_script);
      WHILE (v_pn < v_len)
      LOOP
        DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(v_script, v_ps, v_pn));
        v_pn := v_pn + v_ps;
      END LOOP;
   END IF;
END;
/

SHOW ERRORS

SPOOL report.txt
EXECUTE myrep('my_task','-','SCRIPT');
SPOOL OFF

159.7.111 SEED_COL_USAGEプロシージャ

このプロシージャは、指定したSQLチューニング・セットまたはデータベースで列使用情報を文からシードします。

このプロシージャは、SQL文を繰り返し、それらをコンパイルした上で、その文に表示される列の列使用情報をシードします。システムのワークロードを指定の時間にわたって監視し、監視ウィンドウでの処理中に実行された文に表示される列に基づいて、列の使用方法の情報をシードできます。

構文

DBMS_STATS.SEED_COL_USAGE (
   sqlset_name    IN    VARCHAR2,
   owner_name     IN    VARCHAR2,
   time_limit     IN    POSITIVE DEFAULT NULL);

パラメータ

表159-118 SEED_COL_USAGEプロシージャのパラメータ

パラメータ 説明

sqlset_name

監視対象の文を含むSQLチューニング・セットの名前。

このパラメータとowner_nameの両方がNULLの場合、このプロシージャは、指定した時間制限内にデータベース内のすべての文を監視します。

owner_name

監視対象の文を含むSQLチューニング・セットの所有者。

このパラメータとsqlset_nameの両方がNULLの場合、このプロシージャは、指定した時間制限内にデータベース内のすべての文を監視します。

time_limit

時間制限(分)。

セキュリティ・モデル

このプロシージャを呼び出すには、ANALYZE ANY権限とANALYZE ANY DICTIONARY権限が必要です。

例外

ORA-20000: 権限が不十分です

使用上のノート

このプロシージャは、列のグループもレポートします。記録される列のグループの拡張子は、CREATE_EXTENDED_STATSファンクションのプロシージャを使用して作成できます。sqlset_nameおよびowner_nameNULLの場合、次のtime_limit秒にシステムで実行される文に関する列(グループ)使用情報が記録されます。

この監視プロシージャは、SYS.COL_USAGE$で表示できる従来の列使用情報とは異なる情報を記録します。このプロシージャは、SYS.COL_GROUP_USAGE$に情報を格納します。

次の例では、5分または300秒にわたって監視が実行されます。

BEGIN
   DBMS_STATS.SEED_COL_USAGE (null,null,300);
END;

159.7.112 SET_ADVISOR_TASK_PARAMETERプロシージャ

このプロシージャは、オプティマイザ統計アドバイザ・タスク・パラメータの値を更新します。

構文

DBMS_STATS.SET_ADVISOR_TASK_PARAMETER (
  task_name     IN   VARCHAR2,
  parameter     IN   VARCHAR2,
  value         IN   VARCHAR2);

パラメータ

表159-119 SET_ADVISOR_TASK_PARAMETERプロシージャのパラメータ

パラメータ 説明

task_name

オプティマイザ統計アドバイザ・タスクの名前。

parameter

設定するパラメータの名前。指定したパラメータが存在しない場合はエラーが戻されます。

value

パラメータの新しい値。

セキュリティ・モデル

次の点に注意してください。

  • このサブプログラムを実行するには、ADVISOR権限を持つ必要があります。

  • タスクの所有者である必要があります。

  • このサブプログラムは実行者権限を使用して実行します。

例外

  • ORA-20000: 権限が不十分です

  • ORA-20001: 入力値が無効です

  • ORA-20012: オプティマイザ統計アドバイザのエラー

参照:

オプティマイザ統計アドバイザを管理する方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.113 SET_COLUMN_STATSプロシージャ

このプロシージャは、列に関連する情報を設定します。

ユーザー定義の統計情報を処理するこのバージョンでは、指定の統計タイプは、実際のユーザー定義の統計情報に加え、ディクショナリに格納されるタイプでもあります。この統計タイプがNULLの場合は、索引または列に関連付けられている統計タイプが格納されます。

構文

DBMS_STATS.SET_COLUMN_STATS (
   ownname       VARCHAR2, 
   tabname       VARCHAR2, 
   colname       VARCHAR2, 
   partname      VARCHAR2 DEFAULT NULL,
   stattab       VARCHAR2 DEFAULT NULL, 
   statid        VARCHAR2 DEFAULT NULL,
   distcnt       NUMBER DEFAULT NULL,
   density       NUMBER DEFAULT NULL,
   nullcnt       NUMBER DEFAULT NULL,
   srec          StatRec DEFAULT NULL,
   avgclen       NUMBER DEFAULT NULL,
   flags         NUMBER DEFAULT NULL,
   statown       VARCHAR2 DEFAULT NULL,
   no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force         BOOLEAN DEFAULT FALSE);

ユーザー定義統計情報には、次の構文を使用します。

DBMS_STATS.SET_COLUMN_STATS (
   ownname       VARCHAR2, 
   tabname       VARCHAR2, 
   colname       VARCHAR2, 
   partname      VARCHAR2 DEFAULT NULL,
   stattab       VARCHAR2 DEFAULT NULL, 
   statid        VARCHAR2 DEFAULT NULL,
   ext_stats     RAW,
   stattypown    VARCHAR2 DEFAULT NULL, 
   stattypname   VARCHAR2 DEFAULT NULL, 
   statown       VARCHAR2 DEFAULT NULL,
   no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force         BOOLEAN DEFAULT FALSE);

パラメータ

表159-120 SET_COLUMN_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前です。

tabname

列が所属している表の名前。

colname

列または拡張の名前。

partname

統計情報を格納する表パーティションの名前。表がパーティション化されていて、partnameNULLの場合、統計情報はグローバルな表レベルで格納されます。

stattab

統計情報の格納場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリ内に直接格納されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

ext_stats

ユーザー定義の統計情報

stattypown

統計タイプのスキーマ。

stattypname

統計タイプの名前。

distcnt

個別値の数。

density

列密度。この値がNULLで、distcntNULLでない場合、密度はdistcntから導出されます。

nullcnt

NULLの数

srec

PREPARE_COLUMN_VALUESまたはGET_COLUMN_STATSへのコールで入力されたStatRec構造。

avgclen

列の平均長(バイト単位)。

flags

Oracle内部で使用(NULLのままにします)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

force

列の統計情報がロックされている場合でも、この値を設定します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効または矛盾しています。

ORA-20005: オブジェクト統計はロックされています

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.114 SET_DATABASE_PREFSプロシージャ

このプロシージャは、データベースで所有されている表を除き、すべての表の統計プリファレンスを設定します。これらの表は、add_sysパラメータにTRUEを渡すことによって含めることができます。

構文

DBMS_STATS.SET_DATABASE_PREFS (
    pname            IN   VARCHAR2,
    pvalue           IN   VARCHAR2,
    add_sys          IN   BOOLEAN DEFAULT FALSE);

パラメータ

表159-121 SET_DATABASE_PREFSプロシージャのパラメータ

パラメータ 説明

pname

プリファレンスの名前。次のプリファレンスの既存の値を設定でき、デフォルトのプリファレンス値が使用されます:

  • APPROXIMATE_NDV_ALGORITHM

  • AUTO_STAT_EXTENSIONS

  • CASCADE

  • DEGREE

  • ESTIMATE_PERCENT

  • GLOBAL_TEMP_TABLE_STATS

  • GRANULARITY

  • INCREMENTAL

  • INCREMENTAL_STALENESS

  • INCREMENTAL_LEVEL

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • STAT_CATEGORY

  • TABLE_CACHED_BLOCKS

pvalue

プリファレンスの値。NULLが指定されている場合は、Oracleのデフォルト値が設定されます。

add_sys

TRUEを指定すると、Oracle所有の表が含まれます。

表159-122 統計プリファレンス

プリファレンス 説明

APPROXIMATE_NDV_ALGORITHM

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。シノプシスを、個別値をサンプリングする内部管理構造とみなします。

次のプリファレンスを削除できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。既存のパフォーマンスが許容範囲であり、レガシー・コンテンツを再フォーマットするパフォーマンス・コストを発生させたくない場合、この方法が有益です。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。これは最も保守的なオプションです。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。動的サンプリングとは対照的に、HyperLogLogアルゴリズムはランダム化手法を使用します。適応サンプリングと比較したHyperLogLogの利点は次のとおりです。

    • 新しいアルゴリズムの正確性は、元のアルゴリズムと似ています。

    • 必要なメモリーは非常に少なく、一般的にシノプシス・サイズの大幅な削減につながります。

AUTO_STAT_EXTENSIONS

データベース統計を収集する場合、拡張機能の自動作成を制御します。

次の値を設定できます。

  • ON - 適用可能な場合に、SQLプラン・ディレクティブでは、ワークロードの述語の列の使用に基づいて、列グループ統計の作成をトリガーできます。

  • OFF - データベースで列グループ統計が自動的に作成されることはありません。これらは、CREATE_EXTENDED_STATSファンクションが実行されたとき、またはDBMS_STATSMETHOD_OPT句で明示的に拡張統計情報が指定されたときにのみ作成されます。これはデフォルトです。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

サンプリングする行のパーセントが決定されます。

有効範囲は0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、最適な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。

GLOBAL_TEMP_TABLE_STATS

グローバル一時表に対して収集された統計情報を共有統計情報として格納するか、セッション統計情報として格納するかを制御します。このプリファレンスは次の2つの値を取ります。

  • SHARED: すべてのセッションで同じ統計セットが参照されます。

  • SESSION - グローバル一時表でGATHER_TABLE_STATSプロシージャによって収集された統計情報は、セッション固有です。そのため、統計収集プロセスと同じセッションで発行された問合せに対してのみ使用されます。セッション固有の統計は、セッションが終了すると削除されます。

GRANULARITY

収集する統計情報の粒度が決定されます。このプリファレンスは、パーティション表にのみ使用されます。

有効な値は次のとおりです。

  • ALL - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

  • AUTO - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

  • DEFAULT - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、GLOBAL AND PARTITIONを使用します。

  • GLOBAL - グローバルな統計情報を収集します。

  • GLOBAL AND PARTITION - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

  • PARTITION - パーティション・レベルの統計情報を収集します。

  • SUBPARTITION - サブパーティション・レベルの統計情報を収集します。

INCREMENTAL

全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。

通常、表がパーティション化されると、新しいパーティションにデータがロードされます。新しいパーティションが追加され、データがロードされるため、表のグローバルな統計情報を最新に保つ必要があります。次の条件が満たされている場合、表全体ではなく、変更されたパーティションのみをスキャンすることによって、表のグローバルな統計情報が更新されます。

  • パーティション表のINCREMENTALの値がTRUEに設定されている場合。

  • パーティション表のPUBLISHの値がTRUEに設定されている場合。

  • 表の統計を収集するときに、ユーザーがESTIMATE_PERCENTAUTO_SAMPLE_SIZEを、GRANULARITYAUTOを指定しています。

パーティション表のINCREMENTAL値がFALSE (デフォルト値)に設定されている場合、データベースでは全表スキャンを使用してグローバルな統計情報がメンテナンスされます。この手法は、大規模な表では、はるかにリソースを消費し、時間のかかる操作です。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、どのシノプシスを収集するかを制御します。値は次のいずれかとなります。

  • PARTITION - パーティション・レベルのシノプシスを収集します。

    これはデフォルト値です。パーティション化されていない表でPARTITIONが設定されている場合、データベースでシノプシスは収集されません。

  • TABLE - 表レベルのシノプシスを収集します。

    この値は、この表をパーティションと交換する場合に指定します。この表でGATHER_TABLE_STATSを実行(INCREMENTALTRUEに、INCREMENTAL_LEVELTABLEに設定)してから交換できます。この結果、データベースでこの表の表レベルのシノプシスが収集されます。交換が発生すると、パーティションに、交換前の表の表レベルのシノプシスが存在するようになります。プリファレンス値はSET_TABLE_PREFSでのみ使用でき、他のSET_*_PREFSプロシージャでは使用できません。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - 適応サンプリング・シノプシスとHyperLogLogシノプシスの共存が許可されます。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

METHOD_OPT

列統計収集およびヒストグラムの作成が制御されます。グローバル、スキーマ、データベースまたはディクショナリのレベルでプリファレンスを設定する場合、FOR ALL構文のみが許可されます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • integer - ヒストグラム・バケット数を指定します。1 - 2048の数値を指定する必要があります。
  • REPEAT - すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します。
  • AUTO - 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます。
  • SKEWONLY - 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。値を変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

NO_INVALIDATE

統計情報を収集する表の依存カーソルの無効化が制御されます。デフォルトはDBMS_STATS.AUTO_INVALIDATEで、データベースによって依存カーソルを無効化するタイミングが決定されます。

TRUEに設定されている場合、データベースによって依存カーソルが無効化されることはありません。FALSEに設定されている場合、このプロシージャによって依存カーソルがすぐに無効化されます。

OPTIONS

統計情報を収集する必要があるオブジェクトを指定します。有効な値は次のとおりです。

  • GATHER: データベース内のすべてのオブジェクトに関する統計情報を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。これはデフォルトです。

    データベースで、新しい統計情報を必要とするオブジェクトを暗黙的に判別し、その統計情報を収集する方法を判別します。GATHER AUTOが指定された場合、有効な追加パラメータはcomp_idno_invalidatestattabstatidおよびstatownのみで、その他のパラメータ設定はすべて無視されます。また、処理されたオブジェクトのリストも戻します。

PREFERENCE_OVERRIDES_PARAMETER

パラメータの入力値を、統計操作のそのパラメータのプリファレンス値でオーバーライドするかどうかを決定します。使用可能な値は、次のとおりです。

  • TRUE - 入力パラメータ値を無視し、対応するプリファレンスの値を使用します。

  • FALSE - 入力パラメータ値に従います。

このプリファレンスを指定すると、表、グローバルおよびデフォルトの優先順位が変更されません。

PUBLISH

収集ジョブが完了した後で、新しく収集された統計情報をパブリッシュするかどうかが決定されます。

統計情報を収集し、すぐにはパブリッシュしないようにすることができます。この手法により、パブリッシュ前に新しい統計情報をテストできます。

STALE_PERCENT

表の統計情報が失効し、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。

stale_percentの有効なドメインは、負数以外の数です。デフォルト値は10で、10%を超える変更がある表が失効とみなされることを意味します。

STAT_CATEGORY

インポートまたはエクスポートする統計情報を指定します。カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • OBJECT_STATS: 表、列および索引(デフォルト)の統計情報
  • SYNOPSES: 増分統計をサポートする情報
  • REALTIME_STATS: リアルタイム統計のみを指定します。

OBJECT_STATS, SYNOPSESには、表統計、列統計、索引統計およびシノプシスを指定します。

TABLE_CACHED_BLOCKS

索引のクラスタリング要因の計算時にバッファ・キャッシュにキャッシュされる平均ブロック数(予測値)を指定します。

セキュリティ・モデル

このプロシージャを実行するには、SYSDBAロール、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

使用上のノート

引数は両方ともVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲みます。

DBMS_STATS.SET_DATABASE_PREFS('CASCADE', 'DBMS_STATS.AUTO_CASCADE');
DBMS_STATS.SET_DATABASE_PREFS('ESTIMATE_PERCENT','9');
DBMS_STATS.SET_DATABASE_PREFS('DEGREE','99');

参照:

オプティマイザ統計プリファレンスの設定方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.115 SET_GLOBAL_PREFSプロシージャ

このプロシージャは、グローバル・レベルの統計プリファレンスを設定します。

構文

DBMS_STATS.SET_GLOBAL_PREFS (
    pname     IN   VARCHAR2,
    pvalue    IN   VARCHAR2);

パラメータ

表159-123 SET_GLOBAL_PREFSプロシージャのパラメータ

パラメータ 説明

pname

プリファレンスの名前。次のプリファレンスのデフォルト値を設定できます。

  • APPROXIMATE_NDV_ALGORITHM

  • AUTO_STAT_EXTENSIONS

  • AUTOSTATS_TARGET

  • CASCADE

  • CONCURRENT

  • DEGREE

  • ESTIMATE_PERCENT

  • GLOBAL_TEMP_TABLE_STATS

  • GRANULARITY

  • INCREMENTAL

  • INCREMENTAL_LEVEL

  • INCREMENTAL_STALENESS

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • STAT_CATEGORY

  • TABLE_CACHED_BLOCKS

  • WAIT_TIME_TO_UPDATE_STATS

pvalue

プリファレンスの値。NULLが指定されている場合は、Oracleのデフォルト値が設定されます。

表159-124 グローバルな統計プリファレンス

プリファレンス 説明

APPROXIMATE_NDV_ALGORITHM

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。シノプシスを、個別値をサンプリングする内部管理構造とみなします。

次のプリファレンスを削除できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。既存のパフォーマンスが許容範囲であり、レガシー・コンテンツを再フォーマットするパフォーマンス・コストを発生させたくない場合、この方法が有益です。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。これは最も保守的なオプションです。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。動的サンプリングとは対照的に、HyperLogLogアルゴリズムはランダム化手法を使用します。適応サンプリングと比較したHyperLogLogの利点は次のとおりです。

    • 新しいアルゴリズムの正確性は、元のアルゴリズムと似ています。

    • 必要なメモリーは非常に少なく、一般的にシノプシス・サイズの大幅な削減につながります。

AUTO_STAT_EXTENSIONS

データベース統計を収集する場合、拡張機能の自動作成を制御します。

次の値を設定できます。

  • ON - 適用可能な場合に、SQLプラン・ディレクティブでは、ワークロードの述語の列の使用に基づいて、列グループ統計の作成をトリガーできます。

  • OFF - データベースで列グループ統計が自動的に作成されることはありません。これらは、CREATE_EXTENDED_STATSファンクションが実行されたとき、またはDBMS_STATSMETHOD_OPT句で明示的に拡張統計情報が指定されたときにのみ作成されます。これはデフォルトです。

AUTOSTATS_TARGET

統計情報収集に必要なオブジェクトを制御します。値は次のいずれかとなります。

  • 'ALL': システム内のすべてのオブジェクトに関して収集された統計情報

  • 'ORACLE': Oracle所有のすべてのオブジェクトに関して収集された統計情報

  • 'AUTO': 統計情報を収集するオブジェクトをOracleが指定します。

このプリファレンスは、自動統計情報収集にのみ適用されます。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

CONCURRENT

統計情報が複数のオブジェクトで同時に収集されるか、一度に1オブジェクトずつ順次収集されるかを決定します。有効な値は、次のとおりです。

  • MANUAL - 手動統計収集でのみ、同時実行性が有効化されます。

  • AUTOMATIC - 自動統計収集でのみ、同時実行性が有効化されます。

  • ALL - 手動と自動の両方の統計収集で、同時実行性が有効化されます。

  • OFF - 手動と自動の両方の統計情報で、同時実行性が無効化されます。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

サンプリングする行のパーセントが決定されます。

有効範囲は0.000001から100です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、最適な統計を生成するための適切なサンプル・サイズをデータベースで決定できるようになります。これはデフォルトです。

GLOBAL_TEMP_TABLE_STATS

グローバル一時表に対して収集された統計情報を共有統計情報として格納するか、セッション統計情報として格納するかを制御します。このプリファレンスは次の2つの値を取ります。

  • SHARED: すべてのセッションで同じ統計セットが参照されます。

  • SESSION - グローバル一時表でGATHER_TABLE_STATSプロシージャによって収集された統計情報は、セッション固有です。そのため、統計収集プロセスと同じセッションで発行された問合せに対してのみ使用されます。セッション固有の統計は、セッションが終了すると削除されます。

GRANULARITY

収集する統計情報の粒度が決定されます。このプリファレンスは、パーティション表にのみ使用されます。

有効な値は次のとおりです。

  • ALL - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

  • AUTO - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

  • DEFAULT - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、GLOBAL AND PARTITIONを使用します。

  • GLOBAL - グローバルな統計情報を収集します。

  • GLOBAL AND PARTITION - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

  • PARTITION - パーティション・レベルの統計情報を収集します。

  • SUBPARTITION - サブパーティション・レベルの統計情報を収集します。

INCREMENTAL

全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。

通常、表がパーティション化されると、新しいパーティションにデータがロードされます。新しいパーティションが追加され、データがロードされるため、表のグローバルな統計情報を最新に保つ必要があります。次の条件が満たされている場合、表全体ではなく、変更されたパーティションのみをスキャンすることによって、表のグローバルな統計情報が更新されます。

  • パーティション表のINCREMENTALの値がTRUEに設定されている場合。

  • パーティション表のPUBLISHの値がTRUEに設定されている場合。

  • 表の統計を収集するときに、ユーザーがESTIMATE_PERCENTAUTO_SAMPLE_SIZEを、GRANULARITYAUTOを指定しています。

パーティション表のINCREMENTAL値がFALSE (デフォルト値)に設定されている場合、データベースでは全表スキャンを使用してグローバルな統計情報がメンテナンスされます。この手法は、大規模な表では、はるかにリソースを消費し、時間のかかる操作です。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、どのシノプシスを収集するかを制御します。値は次のいずれかとなります。

  • PARTITION - パーティション・レベルのシノプシスを収集します。

    これはデフォルト値です。パーティション化されていない表でPARTITIONが設定されている場合、データベースでシノプシスは収集されません。

  • TABLE - 表レベルのシノプシスを収集します。

    この値は、この表をパーティションと交換する場合に指定します。この表でGATHER_TABLE_STATSを実行(INCREMENTALTRUEに、INCREMENTAL_LEVELTABLEに設定)してから交換できます。この結果、データベースでこの表の表レベルのシノプシスが収集されます。交換が発生すると、パーティションに、交換前の表の表レベルのシノプシスが存在するようになります。プリファレンス値はSET_TABLE_PREFSでのみ使用でき、他のSET_*_PREFSプロシージャでは使用できません。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - 適応サンプリング・シノプシスとHyperLogLogシノプシスの共存が許可されます。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

METHOD_OPT

列統計収集およびヒストグラムの作成が制御されます。次のオプションのいずれかを使用するか、または両方を組み合せて使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます
  • - column_name: 列の名前。
  • - extension: (column_name, colume_name [, ...])の書式の列グループまたは式。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。

NO_INVALIDATE

統計情報を収集する表の依存カーソルの無効化が制御されます。デフォルトはDBMS_STATS.AUTO_INVALIDATEで、データベースによって依存カーソルを無効化するタイミングが決定されます。

TRUEに設定されている場合、データベースによって依存カーソルが無効化されることはありません。FALSEに設定されている場合、このプロシージャによって依存カーソルがすぐに無効化されます。

OPTIONS

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。このプリファレンスは次の値を取ります。

  • GATHER: 表中のすべてのオブジェクトの統計を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。統計情報を収集するバルク・ロード操作が実行される表にGATHER AUTOを設定することをお薦めします。このオプションは、INCREMENTALを有効にしていない表にのみ適用できます。これらの表でGATHER_TABLE_STATSプロシージャにGATHER AUTOオプションを指定して実行すると、すでに新規の統計の再収集はスキップされます。

PREFERENCE_OVERRIDES_PARAMETER

パラメータの入力値を、統計操作のそのパラメータのプリファレンス値でオーバーライドするかどうかを決定します。使用可能な値は、次のとおりです。

  • TRUE - 入力パラメータ値を無視し、対応するプリファレンスの値を使用します。

  • FALSE - 入力パラメータ値に従います。

このプリファレンスを指定すると、表、グローバルおよびデフォルトの優先順位が変更されません。

PUBLISH

収集ジョブが完了した後で、新しく収集された統計情報をパブリッシュするかどうかが決定されます。

統計情報を収集し、すぐにはパブリッシュしないようにすることができます。この手法により、パブリッシュ前に新しい統計情報をテストできます。

STALE_PERCENT

表の統計情報が失効し、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。

stale_percentの有効なドメインは、負数以外の数です。デフォルト値は10で、10%を超える変更がある表が失効とみなされることを意味します。

STAT_CATEGORY

インポートまたはエクスポートする統計情報を指定します。カンマ区切りの複数の値が受け入れられます。サポートされている値は次のとおりです。

  • OBJECT_STATS: 表、列および索引(デフォルト)の統計情報

  • SYNOPSES: 増分統計をサポートする情報

'OBJECT_STATS, SYNOPSES'は、表統計情報、列統計情報、索引統計情報およびシノプシスを指定します。

TABLE_CACHED_BLOCKS

索引のクラスタリング要因の計算時にバッファ・キャッシュにキャッシュされる平均ブロック数(予測値)を指定します。

WAIT_TIME_TO_UPDATE_STATS

統計情報の更新に必要なロックおよび確保のタイムアウトまでの分数を指定します。これは、0から65535までの範囲の値を受け入れます。デフォルト値は、15分です。値が0の場合、ロックおよび確保が非待機モードになります。

セキュリティ・モデル

このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

例外

ORA-20000: 権限が不十分です

ORA-20001: 入力値が無効です。

使用上のノート

  • この設定は、分析する表に対してプリファレンスが指定されていない場合にのみ有効です。

  • 引数は両方ともVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲みます。

例159-16 グローバル・レベルの統計プリファレンスのオーバーライド

SET_GLOBAL_PREFSプロシージャを使用して、表プリファレンス設定を含まないデータベースの表ごとにESTIMATE_PERCENTプリファレンスを5に設定します。sh.costsはプリファレンス設定を含まないため、グローバル設定がこの表に適用されます。

SQL> EXEC DBMS_STATS.SET_GLOBAL_PREFS ('ESTIMATE_PERCENT', '5');

PL/SQL procedure successfully completed.

SET_TABLE_PREFSを使用して、sh.sales表に対してのみPREFERENCE_OVERRIDES_PARAMETERプリファレンスをtrueに設定します。

SQL> EXEC DBMS_STATS.SET_TABLE_PREFS('sh','sales','PREFERENCE_OVERRIDES_PARAMETER','TRUE');
 
PL/SQL procedure successfully completed.

sh.salesの統計を収集する場合、スクリプトにより、ESTIMATE_PERCENT10に設定するように試行されます。ただし、PREFERENCE_OVERRIDES_PARAMETERがこの表に対してTRUEに設定され、グローバル・プリファレンスが定義されているため、Oracle Databaseは、指定した設定の10ではなく、グローバル設定の5を使用して統計を収集します。

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS ('sh', 'costs', ESTIMATE_PERCENT=>10);

PL/SQL procedure successfully completed.

参照:

オプティマイザ統計プリファレンスの設定方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.116 SET_INDEX_STATSプロシージャ

これらのプロシージャは、索引に関連する統計情報を設定します。

ext_statsを受け入れるこのプロシージャのバージョンにより、ドメイン索引とともに使用する統計情報が設定されます。指定の統計タイプは、実際のユーザー定義の統計情報に加え、ディクショナリに格納されるタイプでもあります。この統計タイプがNULLの場合は、データベースによって、索引または列に関連付けられている統計タイプが格納されます。

構文

DBMS_STATS.SET_INDEX_STATS (
   ownname       VARCHAR2,
   indname       VARCHAR2,
   partname      VARCHAR2  DEFAULT NULL,
   stattab       VARCHAR2  DEFAULT NULL,
   statid        VARCHAR2  DEFAULT NULL,
   numrows       NUMBER    DEFAULT NULL,
   numlblks      NUMBER    DEFAULT NULL,
   numdist       NUMBER    DEFAULT NULL,
   avglblk       NUMBER    DEFAULT NULL,
   avgdblk       NUMBER    DEFAULT NULL,
   clstfct       NUMBER    DEFAULT NULL,
   indlevel      NUMBER    DEFAULT NULL,
   flags         NUMBER    DEFAULT NULL,
   statown       VARCHAR2  DEFAULT NULL,
   no_invalidate BOOLEAN   DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   guessq        NUMBER    DEFAULT NULL,
   cachedblk     NUMBER    DEFAULT NULL,
   cachehit      NUMBER    DEFUALT NULL,
   force         BOOLEAN   DEFAULT FALSE);

ユーザー定義のドメイン索引の統計情報には、次の構文を使用します。

DBMS_STATS.SET_INDEX_STATS (
   ownname       VARCHAR2, 
   indname       VARCHAR2,
   partname      VARCHAR2  DEFAULT NULL,
   stattab       VARCHAR2  DEFAULT NULL, 
   statid        VARCHAR2  DEFAULT NULL,
   ext_stats     RAW,
   stattypown    VARCHAR2 DEFAULT NULL, 
   stattypname   VARCHAR2 DEFAULT NULL, 
   statown       VARCHAR2 DEFAULT NULL,
   no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(
                                    get_param('NO_INVALIDATE')),
   force         BOOLEAN   DEFAULT FALSE);

パラメータ

表159-125 SET_INDEX_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

indname

索引の名前

partname

統計情報を格納する索引パーティションの名前。索引がパーティション化されていて、partnameNULLの場合、統計情報はグローバルな索引レベルで格納されます。

stattab

統計情報の格納場所を示すユーザー統計表の識別子。stattabNULLの場合、統計情報はディクショナリ内に直接格納されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)(stattabNULLでない場合にのみ該当します)。

ext_stats

ユーザー定義の統計情報

stattypown

統計タイプのスキーマ。

stattypname

統計タイプの名前。

numrows

索引(パーティション)内の行数。

numlblks

索引(パーティション)内のリーフ・ブロックの数。

numdist

索引(パーティション)内の個別キーの数。

avglblk

この索引(パーティション)について各個別キーが出現するリーフ・ブロックの平均整数値。この値が提供されない場合、この値はnumlblksnumdistから導出されます。

avgdblk

この索引(パーティション)について個別キーが指す表内のデータ・ブロックの平均整数値。この値が提供されない場合、この値はclstfctnumdistから導出されます。

clstfct

all_indexesビューのclustering_factor列の説明を参照してください。

indlevel

索引(パーティション)の高さ。

flags

Oracle内部で使用(NULLのままにします)。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。DBMS_STATS.AUTO_INVALIDATE.を使用すると、従属カーソルを無効化するかどうかがOracleにより決定されます。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

guessq

推測品質。all_indexesビューのpct_direct_access列の説明を参照してください。

cachedblk

内部使用のみ。設定しないでください。

cachehit

内部使用のみ。設定しないでください。

force

索引の統計情報がロックされている場合でも、この値を設定します。

セキュリティ・モデル

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です

ORA-20005: オブジェクト統計はロックされています

使用上のノート

  • オプティマイザは、キャッシュ・データを使用して、索引または統計表にアクセスするためのキャッシュ・ブロック数を見積もります。操作の合計コストは、ディスクの未キャッシュ・ブロック読込み時のI/Oコストに、バッファ・キャッシュ内のキャッシュ・ブロック取得時のCPUコスト、さらにデータ処理にかかるCPUコストを組み合せた合計値です。

  • Oracleは常にcachedblkおよびcachehitを維持しますが、自動モードのDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATSプロシージャまたは手動モードのDBMS_STATS.GATHER_SYSTEM_STATSをユーザーがコールした場合のみ、対応するキャッシング統計情報を表および索引の統計情報の一部として最適化に使用します。精度や信頼性に乏しいデータをユーザーに使用させないようにするため、オプティマイザは、オブジェクトごとにcachehitおよびcachedblkに対する'信頼度要素'を計算します。値の'信頼度要素'が信頼度の基準に達している場合はこの値を使用し、基準に達しない場合はデフォルト値を使用します。

  • オブジェクト・キャッシング統計情報の自動メンテナンス・アルゴリズムは、システム専用のメジャー・ワークロードを1つのみ想定し、他のマイナーなワークロードは無視してこのワークロードに統計情報が適合するように調整します。これに当てはまらない場合は、手動モードを使用してオブジェクト・キャッシング統計情報を維持する必要があります。

  • 自動モードのオブジェクト・キャッシング統計情報のメンテナンス・アルゴリズムは、次の状況で統計情報が使用されることを防ぎます。

    • オブジェクトが最近作成されたなどの理由で十分なデータ分析ができていない場合。

    • システムにメジャー・ワークロードがないために平均値が実際の値と対応していない場合。

参照:

人為的な統計の設定方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.117 SET_PARAMプロシージャ

この推奨されないプロシージャは、DBMS_STATSプロシージャのパラメータのデフォルト値を設定します。

ノート:

テクノロジが改良されたため、このサブプログラムは使用されなくなりました(このサブプログラムは、下位互換性を維持する目的でのみ保持されています)。この場合は、SET_GLOBAL_PREFSプロシージャを使用してください。

「DBMS_STATSの推奨されないサブプログラム」も参照してください。

GET_PARAM ファンクションを使用して、パラメータの現在のデフォルト値を取得できます。

構文

DBMS_STATS.SET_PARAM (
   pname      IN    VARCHAR2, 
   pval       IN    VARCHAR2);

パラメータ

表159-126 SET_PARAMプロシージャのパラメータ

パラメータ 説明

pname

パラメータ名。次のパラメータのデフォルト値を設定できます。

  • CASCADE: SET_PARAMで設定したCASCADEのデフォルト値は、プロシージャのエクスポート/インポートでは使用しません。収集プロシージャのみが使用します。

  • DEGREE

  • ESTIMATE_PERCENT

  • METHOD_OPT

  • NO_INVALIDATE

  • GRANULARITY

  • AUTOSTATS_TARGET: このパラメータは、自動統計情報収集にのみ適用されます。このパラメータの値は、統計情報収集に必要なオブジェクトを制御します(「pval」を参照)。

pval

パラメータ値。NULLが指定されている場合は、Oracle指定のデフォルト値が設定されます。pnameAUTOSTATS_TARGETの場合、有効な値は次のとおりです。

  • 'ALL': システム内のすべてのオブジェクトに関する統計情報を収集します。

  • 'ORACLE': Oracle所有のすべてのオブジェクトに関する統計情報を収集します。

  • 'AUTO': 統計情報を収集するオブジェクトをOracleが指定します。

使用上のノート

  • このプロシージャを実行するには、SYSDBA、またはANALYZE ANY DICTIONARYANALYZE ANYの両方のシステム権限が必要です。

  • 引数は両方ともVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲む必要があることに注意してください。

  • NULL'NULL'の違いにも注意してください。

    • 引用符なしのNULLの場合、パラメータはOracle推奨の値に設定されます。

    • 引用符で囲んだ'NULL'の場合、パラメータの値はNULLに設定されます。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

DBMS_STATS.SET_PARAM('CASCADE','DBMS_STATS.AUTO_CASCADE');
DBMS_STATS.SET_PARAM('ESTIMATE_PERCENT','5');
DBMS_STATS.SET_PARAM('DEGREE','NULL');

159.7.118 SET_PROCESSING_RATEプロシージャ

このプロシージャは、指定した操作の処理速度の値を設定します。

構文

DBMS_STATS.SET_PROCESSING_RATE (
   opname      IN    VARCHAR2, 
   procrate    IN    NUMBER);

パラメータ

表159-127 SET_PROCESSING_RATEプロシージャのパラメータ

パラメータ 説明

opname

操作の名前。

procrate

処理速度。有効な値は次のとおりです。

  • AGGR

  • ALL

  • CPU

  • CPU_ACCESS

  • CPU_AGGR

  • CPU_BYTES_PER_SEC

  • CPU_FILTER

  • CPU_GBY

  • CPU_HASH_JOIN

  • CPU_JOIN

  • CPU_NL_JOIN

  • CPU_RANDOM_ACCESS

  • CPU_SEQUENTIAL_ACCESS

  • CPU_SM_JOIN

  • CPU_SORT

  • HASH

  • IO

  • IO_ACCESS

  • IO_BYTES_PER_SEC

  • IO_RANDOM_ACCESS

  • IO_SEQUENTIAL_ACCESS

  • MEMCMP

  • MEMCPY

セキュリティ・モデル

このプロシージャを実行するには、OPTIMIZER_PROCESSING_RATEロールが必要です。

使用上のノート

AUTO DOPは、これらの処理率を使用して、SQL文の最適な並列度を決定します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

159.7.119 SET_SCHEMA_PREFSプロシージャ

このプロシージャは、指定したユーザーが所有しているすべての表の統計プリファレンスを設定します。

構文

DBMS_STATS.SET_SCHEMA_PREFS (
    ownname   IN   VARCHAR2,
    pname     IN   VARCHAR2,
    pvalue    IN   VARCHAR2);

パラメータ

表159-128 SET_SCHEMA_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

pname

プリファレンスの名前。次のプリファレンスのデフォルト値を設定できます。

  • AUTO_STAT_EXTENSIONS

  • CASCADE

  • DEGREE

  • ESTIMATE_PERCENT

  • GLOBAL_TEMP_TABLE_STATS

  • GRANULARITY

  • INCREMENTAL

  • INCREMENTAL_LEVEL

  • INCREMENTAL_STALENESS

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • TABLE_CACHED_BLOCKS

pvalue

プリファレンスの値。NULLが指定されている場合は、データベースのデフォルト値が設定されます。

表159-129 統計プリファレンス

プリファレンス 説明

AUTO_STAT_EXTENSIONS

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。個別値をサンプリングする内部管理構造としてシノプシスをみなすことができます。

次のプリファレンスを設定できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。既存のパフォーマンスが許容範囲であり、レガシー・コンテンツを再フォーマットするパフォーマンス・コストを発生させたくない場合、この方法が有益です。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。これは最も保守的なオプションです。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。適応サンプリングとは対照的に、HyperLogLogアルゴリズムはランダム化手法を使用します。適応サンプリングと比較したHyperLogLogの利点は次のとおりです。

    • 新しいアルゴリズムの正確性は、元のアルゴリズムと似ています。

    • 必要なメモリーは非常に少なく、一般的にシノプシス・サイズの大幅な削減につながります。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

推定する行のパーセントが決定されます。有効なレンジは、[0.000001,100]です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズがOracleにより決定されます。これはデフォルトです。

GLOBAL_TEMP_TABLE_STATS

このプリファレンスの値は、次のいずれかです。

  • SHARED: すべてのセッションで同じ統計セットが参照されます。

  • SESSION: グローバルな一時表でGATHER_TABLE_STATSプロシージャにより収集された統計はセッション固有であるため、統計収集プロセスと同じセッションで発行された問合せのみで使用されます。セッション固有の統計情報は、セッション終了時に削除されます。

GRANULARITY

収集する統計情報の粒度が決定されます(表がパーティション化されている場合にのみ該当します)。使用可能な値は次のとおりです。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

INCREMENTAL

全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。パーティション表では、多くの場合、新しいデータを新しいパーティションにロードします。新しいパーティションが追加され、データがロードされるため、表のグローバルな統計情報を最新に保つ必要があります。Oracleでは、次の条件が満たされている場合、表全体ではなく、変更されたパーティションのみをスキャンすることによって、表のグローバルな統計情報が更新されます。

  • パーティション表のINCREMENTALの値がTRUEに設定されている場合

  • パーティション表のPUBLISHの値がTRUEに設定されている場合

  • 表で統計情報を収集する際に、ユーザーがESTIMATE_PERCENTAUTO_SAMPLE_SIZEGRANULARITYAUTOを指定した場合

パーティション表のINCREMENTALの値がFALSE(デフォルト値)に設定されている場合は、リソースが集中的に使用され、時間がかかる操作を大きい表に対して行うグローバルな統計情報のメンテナンスに、全表スキャンが使用されます。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、どのシノプシスを収集するかを制御します。これは次の2つの値を取ります。

  • TABLE: 表レベルのシノプシスが収集されます。これは、この表をパーティションと交換する場合に使用されます。この表でGATHER_TABLE_STATSを実行(INCREMENTALTRUEに、INCREMENTAL_LEVELTABLEに設定)してから交換できます。その結果、表レベルのシノプシスがこの表で収集されます(現在、事前に宛先指定されていない表の表レベルのシノプシスのみがサポートされている)。交換が発生すると、パーティションに、交換前の表の表レベルのシノプシスが存在するようになります。このプリファレンス値は、SET_TABLE_PREFSプロシージャでのみ使用できます。SET_GLOBAL/DATABASE/SCHEMA_PREFSプロシージャでは使用できません。

  • PARTITION: パーティション・レベルのシノプシスが収集されます。これはデフォルト値です。PARTITIONがパーティション化されていない表で設定された場合、シノプシスは収集されません。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - APPROXIMATE_NDV_ALGORITHMプリファレンスがHYPERLOGLOGに設定されている場合でも、適応サンプリング形式のシノプシスが存在するパーティションは失効とみなされません。データベースで既存のシノプシスが使用されて、グローバルなNDVが導出されます。これがデフォルトの設定です。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 
   'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 
   'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

METHOD_OPT

列統計収集およびヒストグラムの作成が制御されます。次のオプションのいずれかを使用するか、または両方を組み合せて使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます
  • - column_name: 列の名前。
  • - extension: (column_name, colume_name [, ...])の書式の列グループまたは式。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。

NO_INVALIDATE

統計情報を収集する表の依存カーソルの無効化が制御されます。TRUEに設定されている場合、このパラメータによって依存カーソルが無効化されることはありません。FALSEに設定されている場合、このプロシージャによって依存カーソルがすぐに無効化されます。依存カーソルを無効化するタイミングをデータベースが決定できるようにするには、DBMS_STATS.AUTO_INVALIDATEを使用します。これはデフォルトです。

OPTIONS

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。このプリファレンスは次の値を取ります。

  • GATHER: 表中のすべてのオブジェクトの統計を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。統計情報を収集するバルク・ロード操作が実行される表にGATHER AUTOを設定することをお薦めします。このオプションは、INCREMENTALを有効にしていない表にのみ適用できます。これらの表でGATHER_TABLE_STATSプロシージャにGATHER AUTOオプションを指定して実行すると、すでに新規の統計の再収集はスキップされます。

PREFERENCE_OVERRIDES_PARAMETER

パラメータの入力値を、統計操作のそのパラメータのプリファレンス値でオーバーライドするかどうかを決定します。使用可能な値は次のとおりです。

  • TRUE - 入力パラメータ値を無視し、対応するプリファレンスの値を使用します。

  • FALSE - 入力パラメータ値に従います。

このプリファレンスを指定すると、表、グローバルおよびデフォルトの優先順位が変更されません。

PUBLISH

統計情報収集ジョブが完了した後で、新しく収集された統計情報をパブリッシュするかどうかが決定されます。Oracle Database 11gリリース1 (11.1)より前のリリースでは、統計情報収集ジョブが完了すると、新しい統計情報は自動的にディクショナリ表にパブリッシュされます。後続のリリースでは、統計情報を収集し、すぐにはパブリッシュしないようにすることができます。これにより、パブリッシュ前に新しい統計情報をテストできます。

STALE_PERCENT

表の統計情報が失効しているとみなされ、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。stale_percentの有効なドメインは、負数以外の数です。デフォルト値は10%です。stale_percentを0(ゼロ)に設定すると、表内の行が変更されるたびに、AUTO STATS収集ジョブによって、この表の統計情報が収集されることに注意してください。

TABLE_CACHED_BLOCKS

索引のクラスタリング要因の計算時に表のバッファ・キャッシュにキャッシュされる平均ブロック数を指定します。

セキュリティ・モデル

このプロシージャを実行するには、スキーマ所有者であるか、あるいはSYSDBA権限またはANALYZE ANYシステム権限を持っている必要があります。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

使用上のノート

引数は両方ともVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲みます。

DBMS_STATS.SET_SCHEMA_PREFS('SH','CASCADE','DBMS_STATS.AUTO_CASCADE');
DBMS_STATS.SET_SCHEMA_PREFS('SH','ESTIMATE_PERCENT','9');
DBMS_STATS.SET_SCHEMA_PREFS('SH','DEGREE','99');

参照:

オプティマイザ統計プリファレンスの設定方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.120 SET_SYSTEM_STATSプロシージャ

このプロシージャは、システムの統計情報を設定します。

構文

DBMS_STATS.SET_SYSTEM_STATS (
   pname          VARCHAR2,
   pvalue         NUMBER,
   stattab   IN   VARCHAR2 DEFAULT NULL, 
   statid    IN   VARCHAR2 DEFAULT NULL,
   statown   IN   VARCHAR2 DEFAULT NULL);

パラメータ

表159-130 SET_SYSTEM_STATSプロシージャのパラメータ

パラメータ 説明

pname

取得するパラメータ名。次の値の1つが入ります。

  • iotfrspeed - I/O転送速度(ミリ秒当たりのバイト数単位)

  • ioseektim - シーク時間+待機時間+オペレーティング・システムのオーバーヘッド時間(ミリ秒単位)

  • sreadtim - シングル・ブロックの読込み(ランダム読込み)平均時間(ミリ秒単位)

  • mreadtim - mbrcブロックを1回に読み込む(順次読取り)平均時間(ミリ秒単位)

  • cpuspeed - 1秒当たりの平均CPUサイクル数(100万単位)であり、ワークロードの統計情報('INTERVAL'か、'START'と'STOP'の両方のオプションを使用して収集)に対して取得したもの

  • cpuspeednw: 1秒当たりの平均CPUサイクル数(100万単位)であり、noworkloadの統計情報('NOWORKLOAD'オプションを使用して収集)に対して取得したもの。

  • mbrc - 順次読取りのマルチブロック読込み平均数(ブロック単位)

  • maxthr - 最大I/Oシステム・スループット(1秒当たりのバイト数単位)

  • slavethr - 平均スレーブI/Oスループット(1秒当たりのバイト数単位)

pvalue

取得するパラメータ値。

stattab

統計情報を取得するユーザー統計表の識別子。stattabがNULLの場合、統計情報はディクショナリから取得されます。

statid

stattabに保存された統計情報に関連付けられた、オプションの識別子。

statown

stattabを含んだスキーマ(現在のスキーマと異なる場合)。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

ORA-20003: システムの統計情報を設定できません。

ORA-20004: パラメータが存在しません。

使用上のノート

このプロシージャを実行するには、GATHER_SYSTEM_STATISTICSロールが必要です。

159.7.121 SET_TABLE_PREFSプロシージャ

このプロシージャは、指定したスキーマ内の指定した表の統計プリファレンスを設定します。

構文

DBMS_STATS.SET_TABLE_PREFS (
    ownname    IN  VARCHAR2,
    tabname    IN  VARCHAR2,
    pname      IN  VARCHAR2,
    pvalue     IN  VARCHAR2);

パラメータ

表159-131 SET_TABLE_PREFSプロシージャのパラメータ

パラメータ 説明

ownname

所有者名

tabname

表名

pname

プリファレンスの名前。次のプリファレンスのデフォルト値を設定できます。

  • APPROXIMATE_NDV_ALGORITHM

  • AUTO_STAT_EXTENSIONS

  • CASCADE

  • DEGREE

  • ESTIMATE_PERCENT

  • GRANULARITY

  • INCREMENTAL

  • INCREMENTAL_LEVEL

  • INCREMENTAL_STALENESS

  • METHOD_OPT

  • NO_INVALIDATE

  • OPTIONS

  • PREFERENCE_OVERRIDES_PARAMETER

  • PUBLISH

  • STALE_PERCENT

  • TABLE_CACHED_BLOCKS

pvalue

プリファレンスの値。NULLが指定されている場合は、Oracleのデフォルト値が設定されます。

表159-132 統計プリファレンス

プリファレンス 説明

APPROXIMATE_NDV_ALGORITHM

シノプシス生成アルゴリズムを指定します。シノプシスは、パーティションの列ごとに個別値の数(NDV)を追跡する特殊なタイプの統計です。シノプシスを、個別値をサンプリングする内部管理構造とみなします。

次のプリファレンスを削除できます。

  • REPEAT OR HYPERLOGLOG

    これはデフォルトです。INCREMENTALが表で有効である場合、データベースは適応サンプリング・アルゴリズムを使用する既存のシノプシスの形式を保存します。ただし、データベースはHyperLogLog形式で新しいシノプシスを作成します。既存のパフォーマンスが許容範囲であり、レガシー・コンテンツを再フォーマットするパフォーマンス・コストを発生させたくない場合、この方法が有益です。

  • ADAPTIVE SAMPLING

    データベースは、すべてのシノプシスの適応サンプリング・アルゴリズムを使用します。これは最も保守的なオプションです。

  • HYPERLOGLOG

    データベースでは、新しいシノプシスおよび失効したシノプシスのすべてにHyperLogLogアルゴリズムを使用します。動的サンプリングとは対照的に、HyperLogLogアルゴリズムはランダム化手法を使用します。適応サンプリングと比較したHyperLogLogの利点は次のとおりです。

    • 新しいアルゴリズムの正確性は、元のアルゴリズムと似ています。

    • 必要なメモリーは非常に少なく、一般的にシノプシス・サイズの大幅な削減につながります。

AUTO_STAT_EXTENSIONS

データベース統計を収集する場合、拡張機能の自動作成を制御します。

次の値を設定できます。

  • ON - 適用可能な場合に、SQLプラン・ディレクティブでは、ワークロードの述語の列の使用に基づいて、列グループ統計の作成をトリガーできます。

  • OFF - データベースで列グループ統計が自動的に作成されることはありません。これらは、CREATE_EXTENDED_STATSファンクションが実行されたとき、またはDBMS_STATSMETHOD_OPT句で明示的に拡張統計情報が指定されたときにのみ作成されます。これはデフォルトです。

CASCADE

索引の統計情報が表の統計情報の収集の一環として収集されるかどうかが決定されます。

CONCURRENT

このプリファレンスは、統計情報が複数のオブジェクトで同時に収集されるか、一度に1オブジェクトずつ順次収集されるかを決定します。

  • 'MANUAL': 並行性は、手動統計情報収集に対してのみオンになります。

  • 'AUTOMATIC': 並行性は、自動統計情報収集に対してのみオンになります。

  • 'ALL': 並行性は、自動と手動の両方の統計情報収集に対してオンになります。

  • 'OFF': 並行性は、手動と自動の両方の統計情報に対してオフになります。

DEGREE

統計情報を収集する場合に使用される並列度が決定されます。

ESTIMATE_PERCENT

推定する行のパーセントが決定されます。有効なレンジは、[0.000001,100]です。定数DBMS_STATS.AUTO_SAMPLE_SIZEを使用すると、有効な統計を生成するための適切なサンプル・サイズがOracleにより決定されます。これはデフォルトです。

GLOBAL_TEMP_TABLE_STATS

グローバル一時表に対して収集された統計情報を共有統計情報として格納するか、セッション統計情報として格納するかを制御します。これは次の2つの値を取ります。

  • SHARED: すべてのセッションで同じ統計セットが参照されます。

  • SESSION: グローバルな一時表でGATHER_TABLE_STATSプロシージャにより収集された統計はセッション固有であるため、統計収集プロセスと同じセッションで発行された問合せのみで使用されます。セッション固有の統計情報は、セッション終了時に削除されます。

GRANULARITY

収集する統計情報の粒度が決定されます(表がパーティション化されている場合にのみ該当します)。

'ALL' - すべての統計情報(サブパーティション、パーティションおよびグローバル)を収集します。

'AUTO' - パーティション化のタイプに基づいて細分化を決定します。これはデフォルト値です。

'DEFAULT' - グローバルおよびパーティション・レベルの統計情報を収集します。現在サポートされているこのオプションは今後使用されなくなりますが、下位互換性を保持する理由からこのドキュメントに含まれています。この機能には、'GLOBAL AND PARTITION'を使用する必要があります。現在のデフォルト値は、'AUTO'であることに注意してください。

'GLOBAL' - グローバルな統計情報を収集します。

'GLOBAL AND PARTITION' - グローバルおよびパーティション・レベルの統計情報を収集します。サブパーティション・レベルの統計情報は、それがコンポジット・パーティション・オブジェクトである場合でも収集されません。

'PARTITION' - パーティション・レベルの統計情報を収集します。

'SUBPARTITION' - サブパーティション・レベルの統計情報を収集します。

INCREMENTAL

全表スキャンを実行することなく、パーティション表のグローバルな統計情報をメンテナンスできるかどうかが決定されます。パーティション表では、多くの場合、新しいデータを新しいパーティションにロードします。新しいパーティションが追加され、データがロードされるため、表のグローバルな統計情報を最新に保つ必要があります。Oracleでは、次の条件が満たされている場合、表全体ではなく、変更されたパーティションのみをスキャンすることによって、表のグローバルな統計情報が更新されます。

  • パーティション表のINCREMENTALの値がTRUEに設定されている場合;

  • パーティション表のPUBLISHの値がTRUEに設定されている場合

  • 表で統計情報を収集する際に、ユーザーがESTIMATE_PERCENTAUTO_SAMPLE_SIZEGRANULARITYAUTOを指定した場合

パーティション表のINCREMENTALの値がFALSE(デフォルト値)に設定されている場合は、リソースが集中的に使用され、時間がかかる操作を大きい表に対して行うグローバルな統計情報のメンテナンスに、全表スキャンが使用されます。

INCREMENTAL_LEVEL

INCREMENTALプリファレンスがTRUEに設定されている場合、この値はどのシノプシスを収集するかを制御します。これは次の2つの値を取ります。

  • TABLE: 表レベルのシノプシスが収集されます。これは、この表をパーティションと交換する場合に使用されます。この表でGATHER_TABLE_STATSを実行(INCREMENTALTRUEに、INCREMENTAL_LEVELTABLEに設定)してから交換できます。その結果、表レベルのシノプシスがこの表で収集されます(現在、事前に宛先指定されていない表の表レベルのシノプシスのみがサポートされている)。交換が発生すると、パーティションに、交換前の表の表レベルのシノプシスが存在するようになります。このプリファレンス値は、SET_TABLE_PREFSプロシージャでのみ使用できます。SET_GLOBAL/DATABASE/SCHEMA_PREFSプロシージャでは使用できません。

  • PARTITION: パーティション・レベルのシノプシスが収集されます。これはデフォルト値です。PARTITIONがパーティション化されていない表で設定された場合、シノプシスは収集されません。

INCREMENTAL_STALENESS

パーティションまたはサブパーティションが失効したとみなされる状況を指定します。このパラメータは、'USE_STALE_PERCENT''USE_LOCKED_STATS'などの列挙値を取ります。'USE_STALE_PERCENT, USE_LOCKED_STATS, ALLOW_MIXED_FORMAT'などのように複数の値を指定することもできます。

パラメータは次の値を受け入れます。

  • USE_STALE_PERCENT - DMLの変更がSTALE_PERCENTプリファレンスで設定されたしきい値を下回る場合、パーティションまたはサブパーティションが失効しているとはみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されることはありません。

    STALE_PERCENT10であるという別の場合を想定します。INCREMENTAL_STALENESSUSE_STALE_PERCEMENTを指定します。ただし、この場合はパーティションがロックされ、20%のDMLの変更が生じています。パーティションがロックされているため、データベースで統計情報が再収集されることはありません。

  • USE_LOCKED_STATS - DML変更に関係なく、ロックされたパーティションまたはサブパーティションの統計情報は失効とみなされません。

    たとえば、STALE_PERCENT10である場合を想定します。'USE_LOCKED_STATS, USE_STALE_PERCENT'を指定します。ロックされているパーティションで20%のDMLの変更が生じています。パーティションは失効とみなされません。データベースで既存の統計情報が使用されて、グローバルな統計情報が導出されます。

  • ALLOW_MIXED_FORMAT - 適応サンプリング・シノプシスとHyperLogLogシノプシスの共存が許可されます。

  • NULL - DMLに変更が生じた場合は、パーティションまたはサブパーティションが失効しているとみなされます。

    たとえば、STALE_PERCENT10である場合を想定します。INCREMENTAL_STALENESSに値'NULL'を指定します。パーティションで5%のDMLの変更が生じています。データベースで統計情報が再収集されます。

次の2つの実行は異なります。

EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', 'NULL');
EXEC DBMS_STATS.SET_TABLE_PREFS
  ('sh', 'sales', 'INCREMENTAL_STALENESS', null);

最初の実行では一重引用符を使用して値NULLにプリファレンスを設定していますが、2つ目ではデフォルトのALLOW_MIXED_FORMATにプリファレンスを設定しています。

METHOD_OPT

指定した値によって、列統計収集およびヒストグラムの作成が制御されます。次のオプションのいずれかを使用するか、または両方を組み合せて使用できます。

  • FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

size_clauseは、size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}として定義されます。

  • - integer: ヒストグラム・バケット数。範囲は[1,2048]である必要があります。
  • - REPEAT: すでにヒストグラムがある列に対してのみ、ヒストグラムを収集します
  • - AUTO: 列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列が判断されます
  • - SKEWONLY: 列のデータ配分に基づいて、ヒストグラムを収集する列が判断されます
  • - column_name: 列の名前。
  • - extension: (column_name, colume_name [, ...])の書式の列グループまたは式。

デフォルトはFOR ALL COLUMNS SIZE AUTOです。

NO_INVALIDATE

指定した値によって、統計情報を収集する表の依存カーソルの無効化が制御されます。TRUEに設定した場合、依存カーソルは無効化されません。FALSEに設定した場合、依存カーソルは即時に無効化されます。依存カーソルの無効化の時機をOracleが決定できるようにするには、DBMS_STATS.AUTO_INVALIDATEを使用します。これはデフォルトです。

OPTIONS

GATHER_TABLE_STATSプロシージャで使用されるoptionsパラメータを判別します。このプリファレンスは次の値を取ります。

  • GATHER: 表中のすべてのオブジェクトの統計を収集します。これはデフォルトです。

  • GATHER AUTO: 必要な統計をすべて自動的に収集します。統計情報を収集するバルク・ロード操作が実行される表にGATHER AUTOを設定することをお薦めします。このオプションは、INCREMENTALを有効にしていない表にのみ適用できます。これらの表でGATHER_TABLE_STATSプロシージャにGATHER AUTOオプションを指定して実行すると、すでに新規の統計の再収集はスキップされます。

PREFERENCE_OVERRIDES_PARAMETER

パラメータの入力値を、統計操作のそのパラメータのプリファレンス値でオーバーライドするかどうかを決定します。使用可能な値は、次のとおりです。

  • TRUE - 入力パラメータ値を無視し、対応するプリファレンスの値を使用します。

  • FALSE - 入力パラメータ値に従います。

このプリファレンスを指定すると、表、グローバルおよびデフォルトの優先順位が変更されません。

PUBLISH

収集ジョブが完了した後で、新しく収集された統計情報をパブリッシュするかどうかが決定されます。

統計情報を収集し、すぐにはパブリッシュしないようにすることができます。この手法により、パブリッシュ前に新しい統計情報をテストできます。

STALE_PERCENT

表の統計情報が失効し、再度収集される前に変更する必要がある、その表内の行のパーセントが決定されます。

stale_percentの有効なドメインは、負数以外の数です。デフォルト値は10で、10%を超える変更がある表が失効とみなされることを意味します。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です。

使用上のノート

  • このプロシージャを実行するには、その表の所有者として接続するか、またはANALYZE ANYシステム権限を持っている必要があります。

  • すべての引数はVARCHAR2タイプであり、数値を表している場合でも値を引用符で囲みます。

DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'CASCADE', 'DBMS_STATS.AUTO_CASCADE');
DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'ESTIMATE_PERCENT', '9');
DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'DEGREE', '99');

例159-17 統計プリファレンスのオーバーライド

この例では、レガシー・スクリプトは、推奨されるAUTO_SAMPLE_SIZEを使用せずにESTIMATE_PERCENTを明示的に設定します。ユーザーがこれらのスクリプトを使用してsh.costs表でプリファレンスを設定しないようにすることが目標です。

ESTIMATE_PERCENTのプリファレンスがsh.costsまたはグローバル・レベルに設定されていないため、プリファレンスのデフォルトはAUTO_SAMPLE_SIZEです。

SELECT DBMS_STATS.GET_PREFS ('ESTIMATE_PERCENT', 'sh','costs') AS "STAT_PREFS" FROM DUAL;

STAT_PREFS
----------
DBMS_STATS.AUTO_SAMPLE_SIZE

デフォルトでは、Oracle Databaseは、統計収集プロシージャに渡されるプリファレンスを受け入れます。これらのパラメータをオーバーライドするには、SET_TABLE_PREFSを使用して、costs表に対してのみPREFERENCE_OVERRIDES_PARAMETERプリファレンスをTRUEに設定します。

EXEC DBMS_STATS.SET_TABLE_PREFS ('sh', 'costs', 'PREFERENCE_OVERRIDES_PARAMETER', 'TRUE');

sh.costsの統計を収集する場合、ユーザーが作成したスクリプトにより、estimate_percent100に設定するように試行されます。

EXEC DBMS_STATS.GATHER_TABLE_STATS('sh', 'costs', ESTIMATE_PERCENT=>100);

ただし、PREFERENCE_OVERRIDES_PARAMETERがこの表に対してTRUEに設定されているため、Oracle Databaseは、指定した値の100ではなく、デフォルトのAUTO_SAMPLE_SIZEを使用して統計を収集します。

参照:

オプティマイザ統計プリファレンスの設定方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.122 SET_TABLE_STATSプロシージャ

このプロシージャは、テスト用に表の統計情報を作成します。

構文

DBMS_STATS.SET_TABLE_STATS (
   ownname        VARCHAR2, 
   tabname        VARCHAR2, 
   partname       VARCHAR2 DEFAULT NULL,
   stattab        VARCHAR2 DEFAULT NULL, 
   statid         VARCHAR2 DEFAULT NULL,
   numrows        NUMBER   DEFAULT NULL, 
   numblks        NUMBER   DEFAULT NULL,
   avgrlen        NUMBER   DEFAULT NULL,
   flags          NUMBER   DEFAULT NULL,
   statown        VARCHAR2 DEFAULT NULL,
   no_invalidate  BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
   cachedblk      NUMBER   DEFAULT NULL,
   cachehit       NUMBER   DEFAULT NULL,
   force          BOOLEAN  DEFAULT FALSE,
   im_imcu_count  NUMBER   DEFAULT NULL,
   im_block_count NUMBER   DEFAULT NULL,
   scanrate       NUMBER   DEFAULT NULL);

パラメータ

表159-133 SET_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前です。

tabname

表の名前。

partname

統計情報を格納する表パーティションの名前。表がパーティション化されていて、partnameNULLの場合、統計情報はグローバルな表レベルで格納されます。

stattab

統計情報を格納する表。stattabNULLの場合、統計情報はデータ・ディクショナリ内に格納されます。

statid

stattab内の統計情報を関連付ける識別子(オプション)。この識別子は、stattabNULL以外の場合にのみ使用されます。

numrows

表またはパーティション内の行数。

numblks

表またはパーティションが占有するブロックの数。

avgrlen

表またはパーティション表の行の平均長。

flags

内部使用のみに対応しています。設定しないでください。

statown

stattabを含んだスキーマ(ownnameと異なる場合)。

no_invalidate

依存カーソルの有効化の設定。TRUEに設定されている場合、このプロシージャによって依存カーソルが無効化されることはありません。FALSEに設定されている場合、このプロシージャによって依存カーソルがすぐに無効化されます。依存カーソルを無効化するタイミングをデータベースが決定できるようにするには、DBMS_STATS.AUTO_INVALIDATEを使用します。これはデフォルトです。デフォルトを変更する場合は、SET_DATABASE_PREFSプロシージャSET_GLOBAL_PREFSプロシージャSET_SCHEMA_PREFSプロシージャおよびSET_TABLE_PREFSプロシージャを使用します。

cachedblk

内部使用のみに対応しています。設定しないでください。

cachehit

内部使用のみに対応しています。設定しないでください。

force

統計情報がロックされているときの動作を決定するフラグ。TRUEの場合は、表の統計情報がロックされている場合でも、このプロシージャによって値が設定されます。デフォルトでは、設定はFALSEです。

im_imcu_count

表またはパーティション内のインメモリー圧縮ユニット(IMCU)の数。

im_block_count

表またはパーティション内のインメモリー・ブロックの数。

scanrate

データベースが外部表をスキャンするMB/秒単位のレート。このパラメータは、外部表にのみ使用されます。

セキュリティ・モデル

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 入力値が無効です

ORA-20002: ユーザー統計表が不正です。アップグレードする必要があります。

ORA-20005: オブジェクト統計はロックされています

使用上のノート

テスト目的のため、DBMS_STATS.SET_*_STATSプロシージャを使用して表、索引またはシステムの人為的な統計を手動で作成できます。これらのプロシージャでは、人為的な統計を直接データ・ディクショナリ(stattabがnullである場合)またはユーザー作成表に挿入します。

ノート:

DBMS_STATS.SET_*_STATSプロシージャは、開発テストのみを目的としています。本番データベースで使用しないでください。データ・ディクショナリで統計を設定する場合、Oracle Databaseでは、設定された統計を実際の統計とみなします。これは、失効の基準を満たしていない場合に統計収集ジョブが人為的な統計を再収集しない可能性があることを意味します。

DBMS_STATS.SET_*_STATSプロシージャの最も一般的な使用例は、表内の行またはブロックの数の変更に応じて実行計画がどのように変更されたかを表示することと、一時表に対する現実的な統計情報を作成することです。

  • オプティマイザは、キャッシュ・データを使用して、索引または統計表にアクセスするためのキャッシュ・ブロック数を見積もります。データベースで、ディスクの未キャッシュ・ブロック読込み時のI/Oコストに、バッファ・キャッシュ内のキャッシュ・ブロック取得時のCPUコスト、さらにデータ処理にかかるCPUコストを組み合せて、操作の合計コストが計算されます。

  • データベースでは、常にcachedblkおよびcachehitが維持されます。ただし、自動モードのDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATSプロシージャまたは手動モードのDBMS_STATS.GATHER_SYSTEM_STATSをユーザーがコールした場合のみ、対応するキャッシング統計情報が表および索引の統計情報の一部として最適化に使用されます。精度や信頼性に乏しいデータをユーザーに使用させないようにするため、オプティマイザは、オブジェクトごとにcachehitおよびcachedblkに対する信頼度要素を計算します。値の信頼度要素が信頼度の基準に達している場合はこの値が使用され、基準に達しない場合はデフォルト値が使用されます。

  • オブジェクト・キャッシング統計情報の自動メンテナンス・アルゴリズムでは、主要なデータベース・ワークロードが1つのみ存在することを前提としています。アルゴリズムによってこのワークロードに対して統計情報が調整され、他の小規模なワークロードが無視されます。この前提が当てはまらない場合は、手動モードを使用してオブジェクト・キャッシング統計情報を維持する必要があります。

  • 自動モードのオブジェクト・キャッシング統計情報のメンテナンス・アルゴリズムは、次の状況で統計情報が使用されることを防ぎます。

    • オブジェクトが最近作成されたなどの理由で十分なデータ分析ができていない場合

    • データベースにメジャー・ワークロードがないために平均値が実際の値と対応していない場合。

参照:

人為的な統計の設定方法を学習するには、『Oracle Database SQLチューニング・ガイド』を参照してください。

159.7.123 SHOW_EXTENDED_STATS_NAMEファンクション

このファンクションは、ユーザー指定の拡張に対して作成された統計情報エントリの名前を戻します。拡張が作成されなかった場合は、エラーが発生します。

構文

DBMS_STATS.SHOW_EXTENDED_STATS_NAME (
   ownname    VARCHAR2, 
   tabname    VARCHAR2,
   extension  VARCHAR2)
 RETURN VARCHAR2;

パラメータ

表159-134 SHOW_EXTENDED_STATS_NAMEファンクションのパラメータ

パラメータ 説明

ownname

表の所有者名。

tabname

表の名前

extension

列グループまたは式を指定できます。指定した表に、列c1およびc2があるとします。たとえば、列グループは"(c1, c2)"、式は"(c1 + c2)"のようになります。

例外

ORA-20000: オブジェクトが存在しないか、権限が不十分です。

ORA-20001: 拡張の処理中にエラーが発生しました。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.124 TRANSFER_STATSプロシージャ

このプロシージャは、指定した表の統計情報を、dblinkによって指定されたリモート・データベースからローカル・データベースに転送します。

ソース・データベースの統計は保持されます。これは、シノプシスやDML監視情報などの統計関連構造も転送します。

構文

DBMS_STATS.TRANSFER_STATS (
   ownname     IN     VARCHAR2,
   tabname     IN     VARCHAR2,
   dblink      IN     VARCHAR2,   options     IN     NUMBER DEFAULT NULL);

パラメータ

表159-135 TRANSFER_STATSプロシージャのパラメータ

パラメータ 説明

ownname

表の所有者名。NULLの場合、データベース内のすべてのスキーマ。NULLの場合、プロシージャはグローバル・プリファレンスも転送します。

tabname

表の名前。NULLの場合、OWNNAME内のすべての表。

dblink

データベース・リンク名。

options

デフォルトでは、プロシージャはグローバル・プリファレンスを転送しません。ADD_GLOBAL_PREFSを指定すると、グローバル・プリファレンスがコピーされます。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.125 UNLOCK_PARTITION_STATSプロシージャ

このプロシージャによって、ユーザーはパーティションの統計情報をロック解除できます。

構文

DBMS_STATS.UNLOCK_PARTITION_STATS (
    ownname    VARCHAR2,
    tabname    VARCHAR2,
    partname   VARCHAR2);

パラメータ

表159-136 UNLOCK_PARTITION_STATSプロシージャのパラメータ

パラメータ 説明

ownname

ロック解除するスキーマの名前。

tabname

表の名前

partname

(サブ・)パーティション名。

使用上のノート

このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

159.7.126 UNLOCK_SCHEMA_STATSプロシージャ

このプロシージャは、スキーマ内のすべての表の統計情報をロック解除します。

構文

DBMS_STATS.UNLOCK_SCHEMA_STATS (
   ownname    VARCHAR2);

パラメータ

表159-137 UNLOCK_SCHEMA_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • 表の統計情報がロックされている場合は、表の統計情報、列の統計情報、ヒストグラムおよびすべての依存索引の統計情報を含む表に依存する、すべての統計情報がロックされているとみなされます。

  • 個々の表、索引または列のディクショナリ内の統計情報を修正するSET_*DELETE_*IMPORT_*GATHER_*の各プロシージャは、オブジェクトの統計情報がロックされている場合はエラーになります。

  • 複数のオブジェクト上で動作するプロシージャ(GATHER_SCHEMA_STATSなど)は、オブジェクトの統計情報がロックされている場合、統計情報の変更をスキップします。多くのプロシージャには、ロックを無視するforce引数があります。

  • UNLOCK_SCHEMA_STATSプロシージャUNLOCK_TABLE_STATSプロシージャも対応するパーティションの統計情報をロック解除するようには設定されていません。LOCK_TABLE_STATSプロシージャを起動すると、統計情報のロック・ビットが表レベルで設定されます。この場合、パーティションや索引などの依存オブジェクトの統計情報を収集できません。同様に、表の統計情報がロックされると、依存がロックされるため、LOCK_PARTITION_STATSプロシージャを明示的に起動する必要がなくなります。

159.7.127 UNLOCK_TABLE_STATSプロシージャ

このプロシージャは、表の統計情報をロック解除します。

構文

DBMS_STATS.UNLOCK_TABLE_STATS (
   ownname    VARCHAR2,
   tabname    VARCHAR2);

パラメータ

表159-138 UNLOCK_TABLE_STATSプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

tabname

表の名前

使用上のノート

  • このプロシージャを起動するには、表の所有者であるか、ANALYZE ANY権限が必要です。SYSが所有しているオブジェクトの場合、表の所有者であるか、ANALYZE ANY DICTIONARY権限またはSYSDBA権限が必要です。

  • 表の統計情報がロックされている場合は、表の統計情報、列の統計情報、ヒストグラムおよびすべての依存索引の統計情報を含む表に依存する、すべての統計情報がロックされているとみなされます。

  • 個々の表、索引または列のディクショナリ内の統計情報を修正するSET_*DELETE_*IMPORT_*GATHER_*の各プロシージャは、オブジェクトの統計情報がロックされている場合はエラーになります。

  • 複数のオブジェクト上で動作するプロシージャ(GATHER_SCHEMA_STATSなど)は、オブジェクトの統計情報がロックされている場合、統計情報の変更をスキップします。多くのプロシージャには、ロックを無視するforce引数があります。

  • UNLOCK_SCHEMA_STATSプロシージャUNLOCK_TABLE_STATSプロシージャも対応するパーティションの統計情報をロック解除するようには設定されていません。LOCK_TABLE_STATSプロシージャを起動すると、統計情報のロック・ビットが表レベルで設定されます。この場合、パーティションや索引などの依存オブジェクトの統計情報を収集できません。同様に、表の統計情報がロックされると、依存がロックされるため、LOCK_PARTITION_STATSプロシージャを明示的に起動する必要がなくなります。

159.7.128 UPGRADE_STAT_TABLEプロシージャ

このプロシージャは、古いバージョンのユーザー統計表をアップグレードします。

構文

DBMS_STATS.UPGRADE_STAT_TABLE (
   ownname    VARCHAR2,
   stattab    VARCHAR2);

パラメータ

表159-139 UPGRADE_STAT_TABLEプロシージャのパラメータ

パラメータ 説明

ownname

スキーマの名前を指定します。

stattab

表の名前

例外

ORA-20000: 表をアップグレードできません。

使用上のノート

このプロシージャを起動するには、表を削除および作成する権限が必要です。