- ベストアンサー
オラクルのPGAメモリに関して
PGAメモリに関してですが 1.あるSQLがあるとして、そのSQLでどの程度PGAメモリを消費するかを 確認する事は出来るのでしょうか? 2.PGAメモリを消費しやすいSQLとはどのようなSQLなのでしょうか? 簡単なSQLより複雑なSQLの方が消費しやすいと思ってます。 その中で特に何か消費しやすいSQLの特徴はあるのでしょうか? (例)大量データへのアクセス INDEXを利用しないFULL ACCESS 副問い合わせ 多数のテーブル結合 関数などの利用 order by、group by (etc)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ > そのSQLでどの程度PGAメモリを消費するか・・・ http://docs.oracle.com/cd/E16338_01/server.112/b56301/memory004.htm#BGBICAGE 上記、管理者ガイド (11.2) のメモリ管理に以下のように記載されています。 > PGAメモリーの使用統計を提供する動的なパフォーマンス・ビューが > 用意されています。これらの統計のほとんどは、PGA_AGGREGATE_TARGETが > 設定されると使用可能になります。 > 作業領域メモリーの割当ておよび使用に関する統計は、次の動的 > パフォーマンス・ビューで表示できます。 > V$SYSSTAT > V$SESSTAT > V$PGASTAT > V$SQL_WORKAREA > V$SQL_WORKAREA_ACTIVE > V$PROCESSビューの次の3つの列では、Oracle Databaseプロセスによって > 割り当てられ使用されているPGAメモリーがレポートされます。 > PGA_USED_MEM > PGA_ALLOCATED_MEM > PGA_MAX_MEM SQL と紐付けるなら、V$SQL_WORKAREA かV$SQL_WORKAREA_ACTIVE を使用 する事となります。 ※ V$SQL_WORKAREA_ACTIVE の場合、現在アクティブなものしか出力 されませんが。 現在のPGA の使用量であれば、V$PROCESS かV$SESSTAT を集計するのが 簡単だと思います。 ※ V$SESSTAT で、統計名 "session pga memory" と "session pga memory max" でセッション毎のPGA メモリ量が確認できます。 こちらは、PGA_AGGREGATE_TARGET とは関係なく取得できます。 > PGAメモリを消費しやすいSQLとは・・・ http://docs.oracle.com/cd/E16338_01/server.112/b56312/memory.htm#i49320 上記チューニングガイドには、以下のように記載されています。 > 複雑な問合せ(たとえば、意思決定支援の問合せ)の場合、ランタイム領域の > 大部分が、次のようなメモリー集約型演算子で割り当てられた作業領域に > 使用されます。 > ・ソート・ベース演算子(たとえば、ORDER BY、GROUP BY、ROLLUP > およびウィンドウ・ファンクション) > ・ハッシュ結合 > ・ビットマップ・マージ > ・ビットマップ作成 > ・一括ロード操作で使用される書込みバッファ それと、In-Memory Parallel Query を使っていなければ Parallel Query の場合もPGA に直接読込みます。
お礼
お返事が遅くなりました。 大変、親切に回等して頂いて、どうもありがとうございました。