以前、DBMS_STATSを使用したユーザー定義ルーチンに関する投稿がありました。さらに掘り下げた後、これがどのように機能するかを判断しました。データベースに、ユーザー定義型で保存されているデータがあります。ユーザー定義型を使用している場合は、ユーザー定義の統計収集ルーチンをOracle Data Cartridge Interface(ODCI)に関連付けることができます。 ODCIStatsCollectルーチンは、そのユーザー定義タイプを含むテーブルでDBMS_STATSが呼び出されると、自動的に呼び出されます。
私の場合、CPU使用率が高いことを、サードパーティのアプリケーションベンダーがODCIStatsCollectルーチンに入れた1つのSQLステートメントまで追跡しました。この時点で、それはクエリ調整の問題になります。より少ないCPUを使用するようにクエリを作成するにはどうすればよいですか?問題を調べた後、サブクエリを取り出して結果をグローバル一時テーブルに入れるのが最も簡単な方法だと思いました。次に、サブクエリ自体に参加するのではなく、残りのクエリをGTTに参加させます。そうすることで、CPU使用率が大幅に削減されました。私は修正をアプリケーションベンダーに送りました、そして彼らが何を言うか見るのを待っています。