Oracleスキルのバッチ処理における統計情報の収集

背景情報

多くのシステムビジネスプロセス、特にデータウェアハウスのETLアプリケーションおよびバッチ処理ビジネスでは、多数の中間テーブルまたは一時テーブルが設計および使用されます。切り捨て、データの一括挿入、削除などのDML操作は、これらのテーブルで実行されることがよくあります。つまり、これらのテーブルのレコードは、容量が0または大容量の極端な場合に変更されることがよくあります。

これらのテーブルには統計情報がないか、毎日一定の時間枠で収集された統計情報がデータの実際の状況を正確に反映していないため、CBOオプティマイザーは必ずしもSQLステートメントの最適化を保証しません。これらのテーブルからアクセスします。この目的のために、以下の戦略を採用することができます。

解決

(1)ロック統計

上記のロック統計情報技術を採用して、バッチ処理ビジネスにおけるこれらのテーブルの典型的なデータステータスの統計情報を収集およびロックすることができます。このように、これらの表の情報がどのように変化しても、Oracleは常に、一般的なデータ状態の統計情報に基づいてSQL文の実行計画を生成します。

この戦略の利点は、消費するリソースが少なく、基本的にSQLステートメント実行プランの安定性を維持できることですが、欠点は、データの変更に基づいて最適な実行プランを選択できないことです。

(2)リアルタイムで統計を収集する

上記の戦略との違いは、バッチプロセスでは、テーブルデータが大幅に変更された後、その場で統計情報が収集されることです。例えば:

execute immediate 'truncate table  &TNAME'; 
commit; 
 
execute immediate ' exec DBMS_STATS. GATHER_TABLE_STATS 
    (ownname=>'&OWNER', tabname=>'&TNAME',estimate_percent=>10, 
     Degree=>8, Cascade=>TRUE, Granularity=>'ALL'); 

この戦略の長所と短所は、上記の戦略とは正反対です。つまり、毎回変化するデータに応じて最適な実行プランを選択できるという長所と、リソースの消費量が比較的多いという短所があります。 。

(3)HINTテクノロジーを使用します(昔ながらの方法、お勧めしません!)

SQLステートメントでHINTテクノロジを使用することにより、実行プランが安定した最適化された状態にあることを確認します。

この戦略の利点は、Oracleの統計情報収集に依存するのではなく、開発者自身の経験とレベルを最大限に活用することです。欠点は、開発者が間違ったHINTを使用すると面倒になることです。また、この戦略は厳格すぎて、プログラムの実装計画に書き込むのは難しく、データは常に変化しています。

おすすめ

転載: blog.csdn.net/weixin_38623994/article/details/109231187