« Home | Oracle SQL Injection Attacks » | How to unwrap Oracle PL/SQL » | Using an Oracle database link to connect to Excel » | ORASentry » | What is your experience with cursor_sharing? » | Building an Ajax Memory Tree » | Approach 4: Using Regular Expressions » | Oracle Database 10g: Top Features for DBAs Release... » | Project Lockdown 2 » | Build Your Own Oracle RAC 10g Release 2 Cluster on... »

Undocumented secrets for super-sizing your PGA

今日はSearchOracle.comをご紹介します。
このサイトはIT総合メディアのTechTargetが運営する
Oracleの情報発信サイトです。
TechTargetは様々なジャーナリズムに関する賞を受賞している
メディアですが、SearchOracle.comもその名に恥じない
コンテンツを発信できていると思います。

ちなみに08/26号でご紹介したPete Finniganさんの
Security問題については、Pete Finniganさんに
直接インタビューしたPodcastが配信されていますので
Pete Finniganさんの生声で解説を聞くことができます。
http://searchoracle.techtarget.com/originalContent/0,289142,sid41_gci1214534,00.html


数あるコンテンツの中から、前々回にご紹介した
Donald Burlesonさんの記事をピックアップします。

<前々回の記事はこちら>
http://blogs.yahoo.co.jp/yakusa_oracle/archive/2006/9/3


PGAやPGA_AGGREGATE_TARGETがわからない方は先に
解説の後半を確認してください。

タイトルからも想像つくと思いますが、PGAに関する記事になります、
簡単に記事の内容を説明すると

皆さんもご存知PGA_AGGREGATE_TARGETが、実はいくら大きなサイズを
指定しても隠されたパラメータによって実際に割り当てられるサイズには
制限が発生してしまうという内容です。

その制限の中でも"_pga_max_size"は比較的有名ですね。
このサイズはデフォルトで200MBで、1つのプロセスが使用できる
最大のPGAサイズはこの値の半分となってしまいます。
ですからどんなに競合セッションがなく、大きなPGA_AGGREGATE_TARGETが
指定されていても100MBを超えるソート処理はDISKソートになってしまうんです。
ちなみにPGA_AGGREGATE_TARGETの5%のサイズがそれより小さい場合は
その小さいサイズの方が制限サイズとして優先されてしまいます。

この記事の確証を取るためになんと230頁にも及ぶ
テストがなされています。

aggregateとは集合とか総数とか言うニュアンスを持つ単語です。
aggregate functionと言えば、countやsum,aveなどの関数のことです。

■ SearchOracle.com
http://searchoracle.techtarget.com/home/
■ 引用ページ
http://searchoracle.techtarget.com/tip/1,289483,sid41_gci1116697,00.html

_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Undocumented secrets for super-sizing your PGA

Introduction

Almost every Oracle professional agrees that the
old-fashioned sort_area_size and hash_area_size
parameters imposed a cumbersome one-size-fits-all
approach to sorting and hash joins. Different
tasks require different RAM areas, and the trick
has been to allow "enough" PGA RAM for sorting
and hash joins without having any high-resource
task "hog" all of the PGA, to the exclusion of
other users.

Oracle9i introduced the pga_aggregate_target
parameters to fix this resource issue, and
by-and-large, pga_aggregate_target works very
well for most systems. You can check your overall
PGA usage with the v$pga_target_advice advisory
utility or a STATSPACK or AWR report. High values
for multi-pass executions, high disk sorts, or
low hash join invocation might indicate a low
resource usage for PGA regions.

Let's take a look at the issues surrounding the
hidden limits of pga_aggregate_target.
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の語順に近い解釈

※自然な語順で解釈する癖をつけるために
敢えて不自然な日本語になっています。
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Undocumented secrets for super-sizing your PGA
PGAを大きくするためのドキュメント化されていない秘密

Introduction
導入

Almost every Oracle professional agrees
ほとんどのOracleプロは同意します。

that the old-fashioned sort_area_size and
hash_area_size parameters imposed
時代遅れのsort_area_sizeやhash_area_sizeが
強制していたことを

a cumbersome one-size-fits-all approach
非効率で扱いづらいサイズ固定のアプローチを

to sorting and hash joins.
sort処理やhash join処理に対する

Different tasks require different RAM areas,
異なる処理は異なるメモリ領域を要求します。

and the trick has been to allow "enough" PGA RAM
そしてそのアプローチは充分すぎるPGAを許してきました。

for sorting and hash joins
ソート処理やhash joinに

without having any high-resource task "hog" all of the PGA,
to the exclusion of other users.
PGAを占有してしまうほど多くのリソースを必要とするタスクに
他のユーザを排除してしまうことをさせることなく


Oracle9i introduced the pga_aggregate_target parameters
9iは紹介しました。pga_aggregate_targetを

to fix this resource issue,
このリソース問題を解決するために

and by-and-large, pga_aggregate_target works very well
そして総じてpga_aggregate_targetはとても良く機能しました。

for most systems.
ほとんどのシステムに。

You can check
あなたはチェックすることができまます。

your overall PGA usage
あなたの全てのPGA使用状況を

with the v$pga_target_advice advisory utility
v$pga_target_adviceによるアドバイスによって

or a STATSPACK or AWR report.
またはSTATSPACKやAWRリポートで

High values for multi-pass executions,
multi-pass実行の高い値や

high disk sorts,
高い割合のディスクソートや

or low hash join invocation
または、hash joinが少ないことなどは

might indicate
兆候を示しているかもしれません。

a low resource usage for PGA regions.
PGA領域の低い使用率を。

Let's take a look at the issues
それではそれらの問題を見ていきましょう。

surrounding the hidden limits of pga_aggregate_target.
pga_aggregate_targetに関連する隠された制限についての。

_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
用語解説
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Undocumented

※ドキュメント化されていないということは
Oracleが正式にサポートしない非公式な手法であることを
意味します。


old-fashioned

※9i以降で、sort_area_sizeやhash_area_size
を(メインで)使用することは時代遅れです。

cumbersome

※大きかったり、重かったり、非効率な為に扱いづらい場合に
使用します。


sorting and hash joins.

※PGAは主にソートやハッシュ結合で使用されます。


"enough" PGA RAM

※小さなPGAサイズで充分な処理にも固定のサイズを
与えてしまうので"enough"が強調されています。


hog

※元々は食用ブタを指していたものが、欲張りなイメージになり
最終的には分け前以上に奪い取ろうとする人を指すようになり、
動詞としても使われるようになりました。
今回は、PGAを占有する高負荷処理を指しています。


by-and-large

※どの点から見ても同じというニュアンスで、
「概して」とか「総じて」と訳されます。


v$pga_target_advice advisory utility

※このビューがpga_aggregate_targetの最適なサイズを
考慮する際に役立ちます。


AWR report.

※10gの新機能でStatsPackのように自分で
統計やイベントを調査することなく
Oracleがネックとなっている処理を提示してくれます。


multi-pass executions,

※多くのディスクソートが発生してしまった処理を
multi-pass executionと呼びます。


_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
解説
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
隠しパラメータである"_pga_max_size"のデフォルト設定値を確認するには
x$表というv$ビューのベースとなるOracleの内部表を参照しなければなりません。

col parameter for a55
col descr for a100
col val for a10
select i.ksppinm parameter
,v.ksppstvl VAL,i.ksppdesc descr
from x$ksppi i,
x$ksppcv v
where i.indx = v.indx
and i.ksppinm like '\_pga%' escape '\'
order by PARAMETER;
※アンダースコアは1文字ワイルドカードなので
エスケープ文字を指定して検索文字として認識させています。

また、変更はalter systemで変更することができます。
alter system set "_pga_max_size"=xxxxxxxx scope=both
※アンダースコアを含むので" " で囲む必要があります。

隠しパラメータでも一度値を設定した後はshow parameterでも確認が可能になります。
show parameter pga


※以下わかっている人は飛ばしてください
--PGAについて--
Program Global Area
専用サーバ接続の際にソート処理や結合処理、SQLLOAD時の書込みバッファなどで
使用されます。
(共有サーバ接続の際はLarge Pool(定義してなければShared pool)に格納されます)

--PGA_AGGREGATE_TARGETについて--
9iより前のバージョンではPGAのサイズを明示的に指定するのではなく、
sort_area_sizeやhash_area_size,bitmap_merge_area_sizeなど
個々の作業領域を間接的に指定していました。
その場合、同時接続が最大でいくつになるかによって、
最大のPGAが雪だるま式に膨れ上がっていくことになっていました。
9iからはこのパラメータが作成され、同時最大接続にかかわらず、
最大のPGAサイズをこの値で指定できるようになりました。
厳密にはここで指定するのはPGAサイズではなく、SQL作業領域に限定されます
SQL作業領域は、ソート領域,ハッシュ領域,ビットマップ領域などで、
SQL作業領域以外ではプライベートSQL領域やカーソル領域、SessionMemoryなどがあります。
ですから、このサイズよりもMAXとして割り当てられる領域は
少しだけ大きくなりますね。
9iでは、専用サーバ接続専用の機能でしたが、
10gからは、共有サーバ接続でもこの機能が共有サーバのSQL作業領域で
有効に働くようになりました。

About me

  • I'm yaksa
  • From Tokyo, Japan
My profile
にほんブログ村 IT技術ブログへ

blogRanking