EXPLAIN PLAN ではコストが低いが、オートトレースでは一貫性のある取得回数が多いクエリが表示されることは何を示していますか? この場合、コストは数百で、CR は数百万でした。
2 に答える
コストは、バージョンと、CPUベースの原価計算モードで実行しているかどうかに応じて2つの異なるものを表すことができます。
簡単に言うと、コストは、オプティマイザーがクエリの実行を期待する時間の長さを表しますが、単一のブロックの読み取りにかかる時間の単位で表されます。たとえば、Oracleが単一のブロック読み取りに1ミリ秒かかり、クエリに20ミリ秒かかると予想する場合、コストは20になります。
一貫性のあるgetは、いくつかの理由でこれと正確に一致しません。コストには、一貫性のない(現在の)get(たとえば、一時データの読み取りと書き込み)が含まれ、コストにはCPU時間が含まれ、一貫性のあるgetは、代わりにマルチブロック読み取りになる可能性があります。単一のブロックが読み取られるため、期間が異なります。オラクルはまた、コストの見積もりを完全に間違って取得する可能性があり、提案された見積もりよりも多かれ少なかれ一貫した取得を必要とする可能性があります。
予測された実行計画と実際のパフォーマンスの間の断絶を説明できる便利な方法は、「カーディナリティフィードバック」です。このプレゼンテーションを参照してください:http ://www.centrexcc.com/Tuning%20by%20Cardinality%20Feedback.ppt.pdf
せいぜい、コストはクエリが実行する I/O の数のオプティマイザの見積もりです。したがって、せいぜい、オプティマイザーが非常に優れた計画を見つけた場合にのみ、コストが正確である可能性が高くなります。オプティマイザーのコストの見積もりが正しく、計画が理想的である場合、それは通常、決して気にしないことを意味します。そのクエリはかなりうまく機能するため、計画を調べます。
ただし、一貫性のある取得は、クエリが実際に実行した取得の数の実際の測定値です。したがって、これは使用するより正確なベンチマークです。
コストに影響を与える可能性のあるものは非常に多く、一貫した取得の数に影響を与える可能性のあるものはいくつかありますが、コストが非常に低く、一貫した取得の数が非常に多い場合、オプティマイザーは、おそらく、さまざまなステップのカーディナリティの見積もりが不十分な状態で作業しています (PLAN_TABLE の ROWS 列は、各ステップで返される予想される行数を示しています)。これは、統計が欠落しているか古いものである、いくつかのヒストグラムが欠落している、初期化パラメータまたはシステム統計が何らかの形で間違っている、または CBO が何らかの理由で結果のカーディナリティを推定する際に問題を抱えていることを示している可能性があります。
使用している Oracle のバージョンは何ですか?