analyzeコマンドを使用して統計がANALYZE - データベースに関する統計データ収集を

①収集し、インデックス、テーブルおよび統計をドロップクラスタ
②検証テーブル、インデックス、クラスタ構造
③鑑定形態とクラスタと行の移行と行リンク
解析関数の観点から統計を収集および除去するための
オラクルではなくパッケージを使用することをお勧めしますDBMS_STATS最適化するために、収集した情報を分析し
、グローバル情報、パーティションテーブル集め、平行収集情報をDBMS_STATS
さらに情報を、CBOはhttps://blog.csdn.net/iteye_14608/article/details/82447870うち、統計パッケージDBMS_STATSを使用します

図1に示すように、計算するモデルコレクション形態すべてについて、表の列とテーブルのすべてのインデックス統計情報を

テーブルtable_nameのコンピュート統計を分析。

2、表統計の収集、およびパターンを計算します

テーブルのテーブルtable_nameのコンピュート統計を分析。

インデックスモードを計算するための3、収集統計

インデックスINDEX_NAMEの計算統計を分析。

図4に示すように、テーブルの計算モード列の統計情報を収集するために

列COL1、COL2のためのテーブルのテーブルtable_nameのコンピュート統計を分析。

4、テーブルのすべてのインデックスの削除統計、すべてのカラムとテーブルテーブル

テーブルtable_name削除統計を分析。

 

最適化使用していないの計算を行い、収集統計を分析推定、コマンドは通常、収集最適化統計をDBMS_STATSで、古くなっ分析し、DBMS_STATSは、他の方法で分割されたオブジェクトのためのグローバルな統計情報を収集するために使用されるパラレル、微調整統計情報の収集できるコマンド。ベースコストは、オプティマイザ統計に依存します

より良いDBMS_STATSを分析する使用よりも、統計情報と、次のような場合、とは無関係のに必要なコストベース・オプティマイザの統計を収集するためのコマンドを分析します。

2、どのような下の状況では、コマンドを分析します

  (1)は、収集またはインデックス、インデックス・パーティション、テーブル、パーティションテーブルを削除し、統計クラスタ

 コレクションテーブルが配置されている統計情報を分析しALL_TABLES USER_TABLES DBA_TABLESテーブルの内側には、統計情報テーブルはNUM_ROWS、BLOCKS、EMPTY_BLOCKS、AVG_SPACE、CHAIN_COUNT、AVG_ROW_LENを指し、

         分析表には、次の制限があります。あなたは、統計データディクショナリを収集することはできません

                                 あなたは、外部表の統計を収集することはできません、それはDBMS_STATSで収集することができます

                                 デフォルトでは、収集統計は、一時テーブルを分析することはできません

                           あなたは、REF列の型、VARRAYの、ネストした表、LOB列タイプの統計情報の種類を計算するか推定することはできません

     USER_INDEXES、DBA_INDEXES、ALL_INDEXESテーブルの統計情報の収集に索引を分析、統計情報の表はBLEVEL、LEAF_BLOCKS、DISTINCT_KEYS、AVG_LEAF_BLOCKS_PER_KEY、AVG_DATA_BLOCKS_PER_KEY、CLUSTERING_FACTORを指し

      クラスタ統計はALL_CLUSTERS、USER_CLUSTERS、andDBA_CLUSTERSを配置しています

(2)オブジェクトのインデックス、インデックス・パーティションテーブル、パーティションテーブルインデックステーブル組織構造を確認します

(3)決意テーブルの行とクラスタ接続または遊走

どのような状況下では、DBMS_STATSコマンド3

 一般的に収集最適化統計に使用DBMS_STATS、DBMS_STATSは、コマンドは他の方法で、使用済みの並列することができ、パーティションオブジェクトのグローバル統計情報を収集するために、微調整統計情報の収集。コストベースオプティマイザは統計に依存します

GATHER_INDEX_STATS

GATHER_TABLE_STATS

GATHER_SCHEMA_STATS

GATHER_DATABASE_STATS

 

4文法を解析

ANALYZE
{{TABLE [スキーマ。]テーブル
| INDEX [スキーマ。]インデックス
} [partition_extension_clause]
| CLUSTER [スキーマ。]クラスタ
}
{validation_clauses
| LIST CHAINED ROWS [into_clause]
| DELETE [SYSTEM] STATISTICS
}。

大量のデータが削除され、または計算estimageを収集する場合、あなたは多くの時間を使用するので、全表スキャンを行うことができるがある場合、我々は、索引または表の統計を収集する場合

  構造的な問題は、エラーが返された場合には、有効なエラーが返されていないされたかどうかを検証テーブルに、インデックスは、クラスタの景色構造的完全性をマテリアライズ、および検証するための文を加えた検証構造オプションを分析することができます

  VALIDATE REF UPDATEがROWID ROWIDのそれぞれを検出REF、テーブルに指定された値を検証するためにrefを指定し、それが行われ、必要に応じて変更し、それはこの文を修正する場合にのみ分析表で使用することができます

  ユーザがテーブルに依存するオブジェクトに対する権限を選択していない場合、Oracleは、彼らが正当なものではなく、nullに設定されていると思われます、その後、クエリrefの値は、このオブジェクトが適切な権限を持っている場合でも、使用できません。 

ANALYZE VALIDATE構造EMPテーブルと、
 VALIDATE構造解析は、オブジェクト構造の正当性を検証するために使用される、収集オプティマイザこの統計情報を使用しません

    表の場合、データベースは、インデックステーブル組織のデータ・ブロックの整合性と行を検証するために、データベースは、プライマリキーの統計を生成します。

   クラスタの場合は、自動的にクラスタテーブルのデータベース構造の合理性を検証

   パーティションテーブルは、各行を検証するデータベースは、行が正しいパーティションに割り当てられていない場合、彼女はINVALID_ROWSテーブルに挿入される行ID正しいパーティションに属しています。

   一時テーブルの合法性については、データベースのテーブルとインデックスは、現在のセッションで検出され、

    索引の場合、データベースが損傷のための各インデックスブロックとブロックの整合性を検証します。このコマンドは、実際に行インデックスマッチングするかどうかを各表の行ありません。あなたは確認するために、カスケードを使用することができます

         Oracleの各圧縮統計の計算通常インデックス、統計情報とINDEX_STATS andINDEX_HISTOGRAMへのインデックスを格納します

VALIDATE構造CASCADE EMP表ANALYZE、
 表またはクラスタの合法性に関連するCASCADEインデックス情報とテーブルまたはクラスタを検証し、通常のカスケードは、完全な検証正当性を行います、より多くのリソースを消費する必要があります

表empのVALIDATE構造CASCADE FASTをANALYZE;
 FASTテーブルの上にダメージ存在を検出するために使用し、代わりに特定の被害の詳細を報告するの速いなしカスケードとfastオプションとダメージは、被害の詳細を決定する場合は、これを使用している場合、あなたは、決定することができます法バリデーション機能指数は、有効エラーを返すことが、あなたは、インデックスを再構築する必要がありますされています

 

; ONLINE ANALYZE VALIDATE構造CASCADE EMP表
 ONLINEオプションは、オブジェクトがDML操作されているとき、並行性を確保するために、オブジェクトの正当性を検証するために、使用され、あなたがオンライン検証を使用するときに、認証対象の正当性のパフォーマンスが低下していますオブジェクトの正当性は、オブジェクトがない収集、統計を行うときに、オフラインで使用する場合、バックの統計情報を収集します。あなたは、オンラインクラスター分析を使用することはできません

OFFLINE:デフォルトです。オフライン使用すると、オブジェクトへの同時アクセスをオブジェクトの合法性の性能検証を増加しますが、INSERTの妨げになる、UPDATE、およびDELETEステートメントは、select文には影響しません、

 INTOステートメントは、パーティション表についてのみ有効で、ユーザーモードを無視する場合は、ユーザーモードとテーブルを無視した場合に行くために、テーブルの正当なラインにないパーティションテーブル、、、現在のユーザに指定されたテーブルを検討しますROWIDデータベース、それはこのテーブルのSQLスクリプトで$ ORACLE_HOME / RDBMS /管理/ utlvalid.sql、INVALID_ROWSという名前のテーブルと見なされます


表INVALID_ROWSを作成する(
  OWNER_NAME VARCHAR2(30)、
  TABLE_NAMEのVARCHAR2(30)、
  PARTITION_NAMEのVARCHAR2(30)、
  SUBPARTITION_NAMEのVARCHAR2(30)、
  head_rowid ROWID、
  analyze_timestamp日
)。

 

CHAINED_ROWS INTO CLUSTERのEMP_DEPTのLIST CHAINED ROWSをANALYZE。
 

 LIST CHAINED ROWSあなたがテーブルやクラスタを分析することによって、行の移行と行接続を決定することができます、あなたはこの文を取ることができない分析指標で使用されています

 あなたはユーザーモードとテーブルを無視した場合INTOステートメントは、ユーザーモードを無視した場合、現在のユーザーに指定されたテーブルを検討し、テーブルに行と行移行行を接続し、それは、CHAINED_ROWSという名前のテーブルと見なされますこのテーブルがあるため、この表には、スクリプトを作成し、ローカル・データベースでなければなりません

 

表注文DELETE STATISTICSは、ANALYZE、
DELETE STATISTICS:辞書情報に格納されたデータを分析することによって削除することができます

あなたは、自動的にこの文の統計をテーブルの上にインデックスの定義を削除することができた場合

ユーザー定義の統計情報を削除せずに、統計情報システムを削除したい場合は、あなたがシステムを無視した場合、その列またはインデックス内のユーザー定義の統計情報が削除され、削除するシステムユーザを指定することができます

図5に示すように、例えば

SQL>はEMP SELECT * FROMとしてテーブルt1を作成します。

表が作成されました

SQL>選択OWNER、TABLE_NAME、STATUS、NUM_ROWS、BLOCKS、EMPTY_BLOCKS、AVG_SPACE、CHAIN_CNT、AVG_ROW_LEN DBA_TABLESからここTABLE_NAME = 'T1'。

OWNER表STATUS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ----- -------- ---------- -------- - ------------ ---------- ---------- -----------
SCOTT T1 VALID

 

SQL> TABLE T1 COMPUTE統計を分析。

表が分析されています。

SQL>選択OWNER、TABLE_NAME、STATUS、NUM_ROWS、BLOCKS、EMPTY_BLOCKS、AVG_SPACE、CHAIN_CNT、AVG_ROW_LEN DBA_TABLESからここTABLE_NAME = 'T1'。

OWNER表STATUS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ----- -------- ---------- -------- - ------------ ---------- ---------- ----------
SCOTT T1 VALID 12 4 4 7533 0 41

SQL> TABLE T1 DELETE統計を分析。

表が分析されています。

SQL>選択OWNER、TABLE_NAME、STATUS、NUM_ROWS、BLOCKS、EMPTY_BLOCKS、AVG_SPACE、CHAIN_CNT、AVG_ROW_LEN DBA_TABLESからここTABLE_NAME = 'T1'。

OWNER表STATUS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ----- -------- ---------- -------- - ------------ ---------- ---------- -----------
SCOTT T1 VALID

 

SQL> execのDBMS_STATS.GATHER_TABLE_STATS( 'SCOTT'、 'T1');

PL / SQLプロシージャが正常に完了しました。

SQL>選択OWNER、TABLE_NAME、STATUS、NUM_ROWS、BLOCKS、EMPTY_BLOCKS、AVG_SPACE、CHAIN_CNT、AVG_ROW_LEN DBA_TABLESからここTABLE_NAME = 'T1'。

OWNER表STATUS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ----- -------- ---------- -------- - ------------ ---------- ---------- ----------
SCOTT T1 VALID 12 4 0 0 0 39

結論:あなたが分析し、統計情報がDBA_TABLESテーブルを収集することができ、かつDBMS_STATS.GATHER_TABLE_STATSだけAVG_ROW_LENを集め見つけることができます

 

SQLは> T1(EMPNO)に一意のインデックスIIを作成します。

インデックスが作成されています。

 

SQL>を選択しOWNER、INDEX_NAME、INDEX_TYPE、圧縮、BLEVEL、STATUS、NUM_ROWS、DISTINCT_KEYS、LEAF_BLOCKS、DBA_INDEXESからDEGREEどこTABLE_NAME = 'T1'

OWNER INDEX_NAME INDEX_TYPE COMPRESS BLEVELのSTATUS NUM_ROWS DISTINCT_KEYS LEAF_BLOCKS DEGREE
---------- ------------------------------ --------------------------- -------- ---------- ----- --- ---------- ------------- ----------- ----------
SCOTT II NORMAL DISABLED 0 VALID 12 12 1 1

SQL> TABLE T1 DELETE統計を分析。

表が分析されています。

SQL>選択OWNER、TABLE_NAME、STATUS、NUM_ROWS、BLOCKS、EMPTY_BLOCKS、AVG_SPACE、CHAIN_CNT、AVG_ROW_LEN DBA_TABLESからここTABLE_NAME = 'T1'。

OWNER表STATUS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ----- -------- ---------- -------- - ------------ ---------- ---------- -----------
SCOTT T1 VALID

 

結論:テーブルの上に削除統計、そしてこのテーブルはインデックスの統計で定義されても一緒に削除されます

SQL>テーブルT1の検証構造カスケードを分析します。

表が分析されています。

SQL>選択OWNER、TABLE_NAME、STATUS、NUM_ROWS、BLOCKS、EMPTY_BLOCKS、AVG_SPACE、CHAIN_CNT、AVG_ROW_LEN DBA_TABLESからここTABLE_NAME = 'T1'。

OWNER表STATUS NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ----- -------- ---------- -------- - ------------ ---------- ---------- -----------
SCOTT T1 VALID

 

結論:テーブル構造を分析する場合、統計情報を収集しません

 

SQL>一覧表T1が行チェーン分析し、
表T1一覧行をチェーン分析
*
1行目のエラー:
ORA-01495:指定されたリンク列テーブルが見つかりません


SQL> @?/ RDBMS /管理/ UTLCHAIN.SQL

表が作成されました。

SQL>はテーブルt1リスト連鎖行を分析します。

表が分析されています。

SQL> CHAINED_ROWS SELECT * FROM。

非選択行

 

結論:あなたは、テーブル名を指定しない場合は、手動でデフォルトのテーブルを作成する必要がありますCHAINED_ROWS

 

SQL>ドロップテーブルt1パージ。

表は削除されました。

SQL>はEMP SELECT * FROMとしてテーブルt1を作成します。

表が作成されました。

SQLは> T1(EMPNO)にインデックスIIを作成します。

インデックスが作成されています。

SQL> V $ OBJECT_USAGE SELECT * FROM
  2。

非選択行

SQL> ALTER INDEX II使用状況をモニターします。

インデックスが変更されました。

SQL>テーブルt1の計算統計を分析。

表が分析されています。

SQL> ALTER INDEX II使用状況をモニターします。

インデックスが変更されました。

SQL> V $ OBJECT_USAGE SELECT * FROM
  2。

INDEX_NAME TABLE月使用START_MONITORING END_MONITORING
------------------------------ ----- --- --- --- ---------------- -------------------
II T1 YES NO 2013年3月15日夜03時31分13秒


SQL> execのDBMS_STATS.GATHER_TABLE_STATS( 'SCOTT'、 'T1');

PL / SQLプロシージャが正常に完了しました。

SQL> V $ OBJECT_USAGE SELECT * FROM。

INDEX_NAME TABLE月使用START_MONITORING END_MONITORING
------------------------------ ----- --- --- --- ---------------- -------------------
II T1 YES NO 2013年3月15日夜03時31分13秒

結論:DBMS_STATS.GATHER_TABLE_STATS収集統計統計は、索引統計を収集しますが、収集統計は、統計情報の収集時にインデックスを解析しませんが、我々はDBMS_STATSコレクションを使用するために覚えておく必要がありますが基づいていますコストの最適化が使用されるが、構造的な検証テーブルを確認するには、コマンドを解析し、はいdba_tableに収集された統計情報を分析している、あなたは、接続の行の移行行を確認することができます

 

ANALYZE - データベースに関する統計データ収集を

 

SYNOPSIS

 

ANALYZE [VERBOSE] [  [( [、...])]]

説明説明

ANALYZE  システムテーブルもしpg_statistic年でPostgreSQLのテーブルの内容、格納結果を統計情報を収集します。その後、クエリプランナは、クエリを決定するのを助けるためにこれらの統計情報の最も効率的な計画を使用することができます。


 パラメータがない場合は、現在のデータベース内のすべてのテーブルをチェックANALYZE。引数がある場合は、が調べにのみ、そのテーブルを分析します。また、名前フィールド、それらのフィールドのための統計情報を収集するだけで、この時間を与えることができます。

パラメータパラメータ

VERBOSE

 表示プロセス情報を開きます。

 分析する特定のテーブル(スキーマ名)名前。デフォルトでは、すべてのテーブルの現在のデータベースです。
カラム

 解析対象とする特定のフィールドの名前。デフォルトでは、すべてのフィールドです。

出力する出力


 あなたがVERBOSEを宣言すると、ANALYZE  発し、現在行が処理されているかを示すために、メッセージを進行します。また、テーブルについての他の多くの情報を印刷します。

注意事項注意


 定期的にANALYZEを実行、またはほとんどの変更のための目次はすぐにそれが良い習慣で実行作られた後、正確な統計は、最も適切なクエリプランを選択するためのプランナーを助けるため、クエリ処理の速度が向上します。一般的な戦略は、低負荷運転VACUUM [において日常的に使用される真空(7)]および分析します。


 VACUUM FULLとの違いは、それが並列にテーブルやその他の活動を実行できるようにANALYZEは、ターゲット表上の唯一の読み取りロックを必要とする、です。


 フィールドごとに収集された統計は、一般に、最も一般的な値のリストと、各データフィールドの近似分布を示す被覆線を備えます。彼らは何の用途を持っていないと思いANALYZE、(例えば、ユニーク・キーフィールドには共通の値)または列のデータ型が、関連するオペレータによってサポートされていないされていない場合、それらは無視することができます。第21章 ``定常的なデータベースのメンテナンス「で」統計に関する詳細な情報を持っています。


 大きなテーブルの場合、むしろすべての行を調べるよりも、コンテンツの統計表のために収集ランダムサンプルを取るANALYZE。でも、大きなテーブルの上に、私たちは分析を完了するためにいくつかの少しの時間が必要であることをこれが保証されます。ただし、統計情報のみおおよそですが、あなたが実行するたびに分析することを期待コストプランナーになりますショーをEXPLAINいくつかの小さな変更が実際のテーブルの内容は、これを変更しなかった場合でも、そこにあります。非常に小さな確率の場合には、この非決定論は、ANALYZEの実行間の異なるクエリプランを選択するクエリオプティマイザの原因となります。後述のようにこの問題を回避するために、あなたは、ANALYZEによって収集された統計の数を増やすことができます。


 分析の範囲はdefault_statistics_targetのパラメータを調整することによって達成することができ、又はによる...のALTER COLUMNフィールドごとに... ALTER TABLEとSET STATISTICS(表ALTER [参照ALTER_TABLE統計の各フィールドの目標を設定する(7)へ])をコントロール。最大数と、最も一般的に記録に用いるの値リストに設定された図エンベロープ目標値のブロックの最大数。デフォルトの目標値は10ですが、私たちは宇宙プランナー精度の数と分析し、pg_statisticの占有に必要な時間との間のバランスを得るために、この値を調整することができます。特に、統計は、フィールド上の統計のゼロ無効コレクションにターゲットにしています。プランナーは、フィールドに、このような統計のための使用を持っていませんので、フィールドでGROUP BY、またはORDER BY句は、非常に便利であるクエリに関与したことがないん人のために。


 最大の分野であること、分析、統計的な目的は、行の統計的サンプリングテーブルの数を決定します。ターゲットを増加させると、時間と空間の需要に比例して増加をANALYZEする時間が発生します。 


----------------
https://blog.csdn.net/wll_1017/article/details/8672227

SYNOPSIS

 

ANALYZE [VERBOSE] [  [( [、...])]]

説明説明

ANALYZE  システムテーブルもしpg_statistic年でPostgreSQLのテーブルの内容、格納結果を統計情報を収集します。その後、クエリプランナは、クエリを決定するのを助けるためにこれらの統計情報の最も効率的な計画を使用することができます。


 パラメータがない場合は、現在のデータベース内のすべてのテーブルをチェックANALYZE。引数がある場合は、が調べにのみ、そのテーブルを分析します。また、名前フィールド、それらのフィールドのための統計情報を収集するだけで、この時間を与えることができます。

パラメータパラメータ

VERBOSE

 表示プロセス情報を開きます。

 分析する特定のテーブル(スキーマ名)名前。デフォルトでは、すべてのテーブルの現在のデータベースです。
カラム

 解析対象とする特定のフィールドの名前。デフォルトでは、すべてのフィールドです。

出力する出力


 あなたがVERBOSEを宣言すると、ANALYZE  発し、現在行が処理されているかを示すために、メッセージを進行します。また、テーブルについての他の多くの情報を印刷します。

注意事項注意


 定期的にANALYZEを実行、またはほとんどの変更のための目次はすぐにそれが良い習慣で実行作られた後、正確な統計は、最も適切なクエリプランを選択するためのプランナーを助けるため、クエリ処理の速度が向上します。一般的な戦略は、低負荷運転VACUUM [において日常的に使用される真空(7)]および分析します。


 VACUUM FULLとの違いは、それが並列にテーブルやその他の活動を実行できるようにANALYZEは、ターゲット表上の唯一の読み取りロックを必要とする、です。


 フィールドごとに収集された統計は、一般に、最も一般的な値のリストと、各データフィールドの近似分布を示す被覆線を備えます。彼らは何の用途を持っていないと思いANALYZE、(例えば、ユニーク・キーフィールドには共通の値)または列のデータ型が、関連するオペレータによってサポートされていないされていない場合、それらは無視することができます。第21章 ``定常的なデータベースのメンテナンス「で」統計に関する詳細な情報を持っています。


 大きなテーブルの場合、むしろすべての行を調べるよりも、コンテンツの統計表のために収集ランダムサンプルを取るANALYZE。でも、大きなテーブルの上に、私たちは分析を完了するためにいくつかの少しの時間が必要であることをこれが保証されます。ただし、統計情報のみおおよそですが、あなたが実行するたびに分析することを期待コストプランナーになりますショーをEXPLAINいくつかの小さな変更が実際のテーブルの内容は、これを変更しなかった場合でも、そこにあります。非常に小さな確率の場合には、この非決定論は、ANALYZEの実行間の異なるクエリプランを選択するクエリオプティマイザの原因となります。後述のようにこの問題を回避するために、あなたは、ANALYZEによって収集された統計の数を増やすことができます。


 分析の範囲はdefault_statistics_targetのパラメータを調整することによって達成することができ、又はによる...のALTER COLUMNフィールドごとに... ALTER TABLEとSET STATISTICS(表ALTER [参照ALTER_TABLE統計の各フィールドの目標を設定する(7)へ])をコントロール。最大数と、最も一般的に記録に用いるの値リストに設定された図エンベロープ目標値のブロックの最大数。デフォルトの目標値は10ですが、私たちは宇宙プランナー精度の数と分析し、pg_statisticの占有に必要な時間との間のバランスを得るために、この値を調整することができます。特に、統計は、フィールド上の統計のゼロ無効コレクションにターゲットにしています。プランナーは、フィールドに、このような統計のための使用を持っていませんので、フィールドでGROUP BY、またはORDER BY句は、非常に便利であるクエリに関与したことがないん人のために。


 最大の分野であること、分析、統計的な目的は、行の統計的サンプリングテーブルの数を決定します。ターゲットを増加させると、時間と空間の需要に比例して増加をANALYZEする時間が発生します。 

おすすめ

転載: www.cnblogs.com/klb561/p/12064409.html