Oracleは遅すぎるALL_SEQUENCESから選択します*

ISAH:

私のプロジェクトは、Hibernateを使用して、私は起動時に何が起こっているか点検ので、私は、起動時間(現在は1.5分)を大きくしたかったです。中にSessionFactory初期化、発行されたクエリの一つは次のとおりです。

select * from all_sequences;

これは、分近くかかります!OracleのSQL Developerから同じクエリは、同様の時間を要します。返された合計レコードは102です。

正常に実行される他のクエリがあります(一桁ミリ秒の応答時間)

なぜそれがとても遅いのですか?

ジョン・ヘラー:

データ・ディクショナリと固定オブジェクトのオプティマイザ統計を収集します。

begin
    dbms_stats.gather_dictionary_stats;
    dbms_stats.gather_fixed_objects_stats;
end;
/

Oracleは、優れた実行計画を構築するために、オブジェクトのための良好な統計情報を必要とします。そこ私たちのカスタムオブジェクトの統計情報を収集するための多くのメカニズムがありますが、時折、我々はまた、システム・オブジェクトの統計を収集する必要があります。(私は驚いているが、これは箱の必要な右アウトである。通常、これらの問題は、唯一万人の新しいシーケンスを作成するように、極端な変化の後に起こります。)

オプティマイザ統計を収集すると、ヘルプがない場合は、以下の手順で実行計画を生成してみてください、との質問に、結果を掲示します。

--Run the query:
select /*+ gather_plan_statistics */ * from all_sequences;

--Find the SQL_ID:
select * from gv$sql where sql_text like '%gather_plan_statistics%';

--Generate the execution plan, with estimated and actual results.
select *
from table(dbms_xplan.display_cursor(sql_id => '9wgbmhhrf0bwr', format=>'ALLSTATS LAST'));

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=407573&siteId=1