EBSで統計を収集する方法
- Cost Based Optimizerを効果的に使用するには、スキーマ統計が最新である必要があります。幸い、Oracle EBSには、この管理タスクを容易にするためのスクリプトと並行プログラム(スキーマ統計の収集とテーブル統計の収集)が用意されています。 FND_STATSは、アプリケーション用のPL / SQLパッケージであり、この管理タスクを支援する多数の機能を備えています。このパッケージは、シードされた並行プログラムから呼び出すことも、SQL*Plusから直接呼び出すこともできます。
- OracleアプリデータベースでDBMS_STATSを使用することはお勧めしません。
- 「GatherSchemaStatistics」コンカレントプログラムを使用する場合は、スキーマ名パラメータのみを渡し、他のパラメータをデフォルト値にデフォルト設定することをお勧めします。渡されるスキーマ名は、特定のスキーマ名(GLなど)にすることも、AppsモジュールのCBO統計を収集する場合は「ALL」にすることもできます。この選択では、サンプルサイズが10%(デフォルト)の「推定」方法を使用します。
- 「GatherTableStatistics」コンカレントプログラムを使用する場合は、テーブルの所有者(スキーマ名)とテーブル名のみを渡します。テーブルがパーティションテーブルの場合を除いて、他のすべてのパラメータを自動的にデフォルトにします。
SQL * PlusからFND_STATSを手動で実行して、1つまたはすべてのスキーマ、または特定のテーブルのCBO統計を収集するには、次の構文を使用します。
特定のスキーマの統計を収集するには
exec fnd_stats.gather_schema_statistics('AP');
データベース内のすべてのスキーマの統計を収集するには
exec fnd_stats.gather_schema_statistics('ALL');
特定のテーブルの統計を収集するには
exec fnd_stats.gather_table_stats('GL','GL_JE_LINES');
もう少しコマンド
exec apps.fnd_stats.GATHER_TABLE_STATS('GL','GL_POSTING');
10%で統計を収集するには
exec apps.fnd_stats.GATHER_TABLE_STATS('QP','QP_LIST_HEADERS_TL',10);
統計を30%で収集するには
exec apps.fnd_stats.GATHER_TABLE_STATS('CSM','CSM_MTL_SYSTEM_ITEMS_ACC',35);
4人の並列ワーカーで25%の統計を収集するには
exec apps.fnd_stats.GATHER_TABLE_STATS('ONT','OE_TRANSACTION_TYPES_ALL',25,4);
auto_sample_sizeを使用して統計を収集するには
exec apps.fnd_stats.GATHER_TABLE_STATS('HR','PAY_RUN_BALANCES',dbms_stats.auto_sample_size);
同様のコマンド
exec apps.fnd_stats.GATHER_TABLE_STATS('HR','PAY_PAYROLL_ACTIONS',10,4); exec apps.fnd_stats.GATHER_TABLE_STATS('HR',HR_CODES',35); exec apps.fnd_stats.GATHER_TABLE_STATS('CS','CS_INCIDENT_TYPE_TL'); exec apps.fnd_stats.GATHER_SCHEMA_STATS('GL',25);
11gおよび12cデータベースでは、統計の収集にGATHERAUTOおよびAUTOSAMPLESIZEの使用を開始することをお勧めします
これは、同時リクエストまたはSQL
を介して実行できます。APPLSYSスキーマを収集します:
exec apps.fnd_stats.gather_schema_statistics(schemaname=> 'APPLSYS',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE ,options => 'GATHER AUTO');
すべてのスキーマを収集します:(これを実行する場合と実行しない場合があります)
exec apps.fnd_stats.gather_schema_statistics(schemaname=> 'ALL',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE ,options => 'GATHER AUTO');
これは、上記の他のものよりも非常に高速に実行され、非常に正確です。古いオブジェクトのみの統計を生成し、自動サンプルサイズでも統計を生成するため、より高速です
スキーマで取得されたタイミング収集統計を知りたい場合は、以下のクエリを使用できます
select owner, min(last_analyzed) , max(last_analyzed) ,( max(last_analyzed) - min(last_analyzed))*24 hours_took from dba_tables where last_analyzed is not null and trunc (last_analyzed) = '&enter_date_DD-MON-YY' -- Example : '01-APR-19' group by owner order by hours_took ;
11iおよびR12を使用したシステム統計の収集
E-Business Suiteの場合、Exadata以外のデータベースの場合は、次のようにNOWORKLOADオプションを使用してシステム統計を収集することをお勧めします。
execute DBMS_STATS.GATHER_SYSTEM_STATS (gathering_mode => 'NOWORKLOAD');
ただし、Exadataデータベースの場合は、代わりに次のコマンドを使用してください:
execute DBMS_STATS.GATHER_SYSTEM_STATS ('EXADATA');
通常、これは、DBに主要なアーキテクチャの変更が加えられた後に1回だけ実行する必要があります。
11iとR12を使用した辞書統計の収集
- この手順を実行するには、SYSDBA(またはANALYZE ANYDICTIONARYとANALYZEANYの両方)システム権限が必要です。
execute dbms_stats.gather_schema_stats(''SYS'', method_opt=>''for all columns size 1'', degree=>30,estimate_percent=>100,cascade=>true);
- データベースバージョン10g/11gを使用している場合は、代わりに次の構文を使用できます
execute dbms_stats.gather_dictionary_stats ();
- この手順では、SYSやSYSTEMを含むすべてのシステムスキーマ、およびCTXSYSやDRSYSなどの他のオプションのスキーマの統計を収集します。
- 通常、これは、DBに主要なアーキテクチャの変更が加えられた後に1回だけ実行する必要があります。
これで、OracleEBS環境でオプティマイザ統計を収集するための手順は終了です。 EBS11iおよびR12でFND_STATSを使用してスキーマ統計を収集する
に投稿してください。
また読む
Oracleコンカレントマネージャ
オプティマイザのヒント
https://docs.oracle.com/cd/E18727_01/doc.121/e12893/T174296T174306.htm