質問

Explainプランではコストが低く、autotraceでは一貫したgetカウントが高いクエリを表示することは何を示していますか?この場合、コストは100年代で、CRは数百万でした。

役に立ちましたか?

解決

コストは、バージョンとCPUベースのコスト計算モードで実行しているかどうかに応じて、2つの異なるものを表すことができます。

簡単に言えば、コストは、オプティマイザーがクエリの実行を期待する時間を表しますが、単一ブロックの読み取りにかかる時間の単位で表されます。たとえば、Oracleが単一ブロックの読み取りに1ミリ秒かかり、クエリに20ミリ秒かかると予想する場合、コストは20になります。

一貫性のある取得は、いくつかの理由でこれと完全には一致しません:コストには、一貫性のない(現在の)取得(たとえば、一時データの読み取りと書き込み)が含まれ、コストにはCPU時間が含まれ、一貫性のある取得はマルチブロックになります単一のブロック読み取りの代わりに読み取りを行うため、期間が異なります。オラクルは、コストの推定値を完全に間違って取得することもあり、推定値よりも多かれ少なかれ一貫した取得が必要になる可能性があります。

予測された実行計画と実際のパフォーマンスの間の切断を説明できる便利な方法は、「カーディナリティフィードバック」です。このプレゼンテーションを参照してください: http://www.centrexcc.com/Tuning% 20by%20Cardinality%20Feedback.ppt.pdf

他のヒント

せいぜい、コストは、クエリが実行するI / Oの数のオプティマイザーの推定値です。そのため、最適な場合でも、最適化プログラムが非常に優れた計画を見つけた場合にのみ、コストが正確になる可能性があります。最適化プログラムのコストの見積もりが正しく、計画が理想的である場合、それは一般的にあなたが気にしないことを意味しますそのクエリは適切に実行されるため、計画を確認します。

ただし、一貫性のある取得は、クエリが実際に実行した取得の数の実際の測定値です。したがって、これは使用するはるかに正確なベンチマークです。

コストに影響を与える可能性のあるものは多数ありますが、一貫性のある取得の数に影響を与える可能性のあるものはいくつかありますが、コストが非常に低く、一貫性の数が非常に多い場合、オプティマイザーがおそらくさまざまなステップのカーディナリティーの不十分な推定値で動作していることを取得します(PLAN_TABLEのROWS列は、各ステップで返される予想行数を示します)。これは、統計が欠落しているか古いこと、ヒストグラムが欠落していること、初期化パラメーターまたはシステム統計が何らかの形で間違っていること、または結果のカーディナリティーを推定する他の理由でCBOに問題があることを示している場合があります。

使用しているOracleのバージョンは何ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top