• ベストアンサー

オラクルのPGAメモリに関して

PGAメモリに関してですが 1.あるSQLがあるとして、そのSQLでどの程度PGAメモリを消費するかを   確認する事は出来るのでしょうか? 2.PGAメモリを消費しやすいSQLとはどのようなSQLなのでしょうか?   簡単なSQLより複雑なSQLの方が消費しやすいと思ってます。   その中で特に何か消費しやすいSQLの特徴はあるのでしょうか?   (例)大量データへのアクセス     INDEXを利用しないFULL ACCESS     副問い合わせ     多数のテーブル結合     関数などの利用     order by、group by     (etc)

  • Oracle
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.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 に直接読込みます。

evaag777
質問者

お礼

お返事が遅くなりました。 大変、親切に回等して頂いて、どうもありがとうございました。

関連するQ&A

  • 並び替えた後の表の結合

    並び替えた後の表を結合したいと思っています。 UNIONを使うと、結合後でソートしてしまうので、これを回避したいです。 1つ目のSQL  SELECT ID, NAME FROM A_TABLE WHERE F1 = '10' ORDER BY F2,F3 2つ目のSQL  SELECT ID, NAME FROM A_TABLE WHERE F1 = '5' ORDER BY F3,F4 上記の2つの結果を1つにまとめて取得したいのです。 取得順は、1つめのSQLでF2,F3で並び替えられたデータの後、 2つめのSQLでF3,F4で並び替えられたデータにしたいです。 どうか良い方法を教えてください。

  • Acess2003で複雑なSQL?

    Access2003で以下のSQLを実行させることはできるのでしょうか? 直接SQLで実行する方法と、Access独特の両方で実行する方法が知りたいです。 select name, count(*) from テーブル group by name order by 2 desc;

  • Oracle 実行計画の読み方

    コメントあれば、よろしくお願い致します。 0 recursive calls 0 db block gets 7,800,000 consistent gets --select文でアクセスしたバッファキャッシュのブロック数。ディスクとメモリへの総アクセス数 A 3,500,000 physical reads --ディスク上のデータファイルにアクセスしたデータ要求の総ブロック数 B 0 redo size 219,000,000 bytes sent via SQL*Net to client 7,100,000 bytes received via SQL*Net from client 500,000 SQL*Net roundtrips to/from client 100 sorts (memory) --メモリ内でソートした回数 C 0 sorts (disk) 9,200,000 rows processed --処理対象となった行数 D 一番、重視しなければいけないのは、A だと思っています。 780万回もアクセスされていますが、 ブロック数が 8K に設定されている環境であったとして、 1024*8*780万 = 63,897,600,000約 63GB の i/o が一つのSQLで発生 B に関しても一応計算してみると、 1024*8*350万 = 28,672,000,000約 28GB の i/o が一つのSQLで発生 D に関しては、920万行という結果は分かるが、1行辺りの幅が分からないので、 幅を別途SQLから計算し、どういった負荷を与えている文なのかを分析する必要がある。 select statement optimizer=choose からの数十行には、 (FULL)が、(UNIQUE INDEX)に比較して、10倍ぐらい表示されていると仮定します。 それぞれの検索テーブルの件数ははっきりしていたとして(1件~2000万件ぐらい(400万件以上が5テーブル))、 何をどうするのがSQLチューニングでしょうか。

  • SQL作成時のポイント

    SQLは簡単なものなら組めますが、副問い合わせなど複雑なものになるとまだまだ苦手なレベルで、3つ以上のテーブル結合などもかなり時間がかかったり、作っているうちに自分でどこまでの条件をつなげたらいいのかが分からなくなってしまいます。 「条件をつける時はここに気をつけて!」など、SQLをつくる時に意識しておいた方がいいこと、作成の考え方などがありましたら、ぜひ教えて下さい。

  • Access SQLでnull値のOrderby

    お世話になります、 AccessのSQLについて教えてください。 例えば打率をSQLの中で計算させたとします。その値で Order by して表示させたいのですが、計算結果がnull (打席が0の人)は分母が0になってしまい値が存在しない (null)ですよね、その場合にOrder byを行うとSQLでエラーになってしまいます。 このような場合皆様ならどのように回避されるでしょうか? select B.daritu From (select hit/dasu As daritu From A ) As B Order by B.daritu

  • SQLの外部結合について教えて下さい

    いつもお世話になっています。 SQL構文の外部結合が分らなくて困っています。 どうか教えて下さい。 JSPからString Nam = (request.getParameter("param"));で値を受け取ってその値でT_Tableと一致するデータのSQLを実行します。 SELECT * FROM T_Table where ID='"+ Nam +"' order by 日付 desc この結果とT_TableAの「番号」というフィールドと一致する問い合わせのSQLが分りません。自分なりに考えて作りましたがHTMLの部分の表示だけでレコードが表示されないので間違っているのだと思います。 色々調べてみましたが該当のサンプルがなかったので困っています。 教えて下さい!宜しくお願い致します。 【自分で作成してみたSQLです】 テーブルはSQL Serverです。 "SELECT * FROM T_Table where ID='"+ Nam +"' INNER JOIN where ID='"+ Nam +"' ON [T_Table].[番号] = [T_TableA].[番号] order by 日付 desc"

    • ベストアンサー
    • Java
  • 「SELECT ~  FROM テーブル名」の後に続く句は「WHERE句」と「ORDER BY句」以外にありますか?

    最近アクセスのSQL文を学びました。 選択クエリのSQL文で 「SELECT ~  FROM テーブル名」 の後に続く句は 「WHERE句」と 「ORDER BY句」以外にありますか? よろしくお願いします。

  • 会社の諸事情により全システムをOracleからAccessに移行しまし

    会社の諸事情により全システムをOracleからAccessに移行しました。 300万件ほどのデータに数百万の更新、一通り流すのに6時間くらいかかります。 これが取引先ごと、パソコン十数台ありますので、大変骨の折れる作業です。 根本的にAccessにしたのが最大の過ちですが、どうしてもという事情がありますので、 Accessを変えずに、Accessを早くする方法はありませんか。 インデックスは全検索項目に張っております。SQLは数千本あるので、Oracleのものを 動く程度直しただけですが。 初心者の意見として例えば ・CPUが8コアなのに、1コアしか使っていません。 ・メモリが3Gなのに0.8Gしか使っていません。 ・ハードディスクをSSDにするとか。 ・WindowsXPを64bitにするとか 多少の投資は覚悟しています。なんとかなりませんか。お願いします。

  • 何がメモリに負担を掛けてるか調べる方法

    仮想専用サーバを利用しています。 メモリは最大512MBなのですが 先ほど2万人にメールマガジンを配信しました。 前半はよかったのですが、後半にメモリ使用量が限界に達してしまいました。 配信が終われば負荷が無くなると思っていたのですが、2時間経っても今だにメモリを480MB消費しています。 いつもは配信が終われば230MBくらいに戻るのですが、一向におさまる気配がありません。 アクセス数はいつもとかわりません。 メールマガジンなどでメモリに負荷を掛けた後は、余韻みたいなのが残り、当分メモリを消費してしまうのでしょうか? また、何が負荷を掛けているのか調べる方法はありますでしょうか? どなたかご教授いただけると幸いです。 よろしくお願い致します。

  • ORDER BY の項目を SELECT する効果

    ORDER BY の項目を SELECT する項目に含めるか否かで、速度や メモリ消費の点で何らかの差がでるでしょうか?どちらが望ましい という点も含めてプロフェッショナルの方の回答をお待ちしています。