2012-05-08 10 views
2

私はいくつかのより複雑なクエリを実行し、コレクションを自由に使用するsprocsをいくつか持っています。クエリはTEMP表領域に関してどれくらいの費用がかかりますか?

私のDBAは、時折S#$%トンのメモリ内TEMP表領域を消費すると不平を言っています。

私はクエリに対して最適化を実行できますが、私はできるだけ非侵襲的であることを望みます。これを行うには、私の変更がTEMPテーブルスペースに及ぼす影響を確認する必要があります。

QUESTION:

どのように私は私のクエリはTEMP表領域にあり、コストものを見ることができますか?

DBAアクセス権がありません。

ありがとうございます。

+2

一般に、パフォーマンスチューニングでは、DBAロールは必要ありません。 SELECT_CATALOG_ROLEで十分です。 –

答えて

2

DBAにアクセスすることなく、AUTOTRACEを試してみます。 TEMP表スペースの消費はありませんが、クエリのチューニング(論理読取り、ディスクへのソート数、再帰SQL、REDO消費、ネットワーク・ラウンドトリップ)に役立つ情報がたくさんあります。 AUTOTRACEを使用する権限が必要ですが、完全なDBA権限は必要ないことに注意してください。

4

クエリが一時的にどのようなコストを要しているかによって異なります。

v $ tempseg_usageから選択できる場合は、一時的に消費している領域の量がわかります.DBAデータベースでは、DBAがそのビューにアクセスできない理由はありません。

gpeche - autotraceは、あなたがtempからやっているIOの数を知っていますので、スペース使用法と組み合わせることで何が起こっているのかを知ることができます。

大規模なコレクションは一般的には悪い考えで、他のすべてのセッションで共有されるPGA(TEMPとは非常に異なる)で多くのメモリを消費します。これがDBAの心配です。大きさはどれくらい大きいかはあなたのシステムによって決まります - 何千もの小規模なレコードはおそらくそれほど悪くはありませんが、数千または数百万のレコードがコレクションに入っていて、私は心配しています。

4

興味深い質問やトリックを行う前に、フィルタリング後にソートする必要があるデータ量を見積もってください。これがソート領域に収まるサイズより大きい場合、ソートはブロックをメモリからtempに移動し、後でそれらを読み戻します。生データサイズにわずかなオーバーヘッドを追加します。 30%のオーバーヘッドを使用します。これにより、必要な合計ソートサイズの合理的な見積もりが得られるはずです。

同じ戦略をコレクションに使用します。データのどこかに余裕がなければならず、データボリュームを小さくする魔法/圧縮はありません。最大1000行のメモリがあり、それを1000.000行で使用しようとすると、適合しません。その場合はdbaに連絡し、解決策を見つけようとします。作業負荷を分割することになる可能性があります。

2

クエリが実行されている間にv $ sql_workarea_activeをクエリできます。実行した後は、v$sql_workareaをクエリできます。

これらは、使用されるメモリ、使用ディスク容量、最も重要なのはパスの数(スペースの使用量は問題の一部にすぎません - マルチパスのソートは非常に高価です) Explainプラン内のステップにその使用法を関連付けます。

その後、メモリ管理を変更すると、あなたが使用する絶対空間的におよびパスカウントの両方で一時表領域の使用量を減らすのに役立つかどうかを検討することができます。

関連する問題