株式会社インサイトテクノロジー 発行
http://www.insight-tec.com
┏┏┏┏┏━━━━━━━━━━━━━━━━━━━━━━━━…・・ ┏━
┏┏┏┏┛ 2004.03.31 ┏┛┛
┏┏┏┛ ☆おら!オラ!Oracle -どっぷり検証生活-★ ┏┛┛┛
┏┏┛ ┏┛┛┛┛
┏┛・・…━━━━━━━━━━━━━━━━Vol.194━…・・┏┛┛┛┛┛
◇目次◇
■Oracle検証生活・・・新・ソートに関する検証 その9
■お知らせ・・・○QAについて
■編集者より
◎バックナンバーココから!!
http://www.insight-tec.com/?http://www.insight-tec.com/html/mailmagazine/mail_back/mail_back_index.html
┏─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━┓
●【 Oracle 検証生活 】 ●
┗─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━┛
<新・ソートに関する検証 その9>
ペンネーム グリーンペペ
さて、先週に引き続き”共有サーバー接続時のORA-4031エラーを回避せよ”
の回答です。
■解決策その3
〜sort_area_retained_sizeを設定する〜
共有サーバー接続時のメモリソート領域は、以下の公式により所定の領域に
割り当てられます。
sort_area_size - sort_area_retained_size = PGA
sort_area_retained_size = SGA
では早速、検証してみましょう。
▽環境
OS:Red Hat Linux release 7.1
Oracle:9.2.0.1
▽設定値の確認
SQL> select name,value,isdefault from v$parameter
where name in ('workarea_size_policy','pga_aggregate_target')
or name like 'sort%';
NAME VALUE ISDEFAULT
------------------------------ ------------------------- ---------
sort_area_size 104857600 FALSE
sort_area_retained_size 0 TRUE
pga_aggregate_target 4294967296000 FALSE
workarea_size_policy AUTO TRUE
sort_area_size = 100MB,sort_area_retained_size = 0
となっています。公式に当てはめると、
sort_area_size - sort_area_retained_size = PGAに割当てられるメモリソート領域
100MB - 0 = 100MB
となり、SGAに割り当てられる領域はないはずです。
では、実際に集計処理を実行してみましょう。
▽セッション情報の確認
SQL> select sid,serial#,server from v$session
where username = 'XPRT';
SID SERIAL# SERVER
---------- ---------- ------------------
10 2105 SHARED
共有サーバー接続になっています。
▽集計処理の実行
SQL> select id,sum(cost) from code group by id;
ORA-04031: 共有メモリーの8192バイトを割当てできません("shared pool",
"unknown object","sort subheap","sort key")
おかしいです。
先ほどの公式によって得られた情報だと全てのメモリソート領域はPGAに割
り当てられるはずなのに、エラーメッセージに出力されているshared poolは
SGAなので矛盾してます。と悩んでたら、マニュアルに以下の記述がありま
した。
以下、Oracle9iデータベース・リファレンス,リリース9.2より転載↓
注意: V$PARAMETER 動的パフォーマンス・ビューに反映されるデフォルト値
は0です。ただし、明示的にこのパラメータを設定していない場合、実際には
SORT_AREA_SIZE パラメータ値が使用されます。
ということはメモリソート領域は、sort_area_sizeに設定したサイズ全てが
SGAに割り当てられようとしたようです。では、sort_area_retained_size
を明示的に設定したらどうなるのか、検証してみましょう。
とその前に空きメモリがない状況なので、これ以上PGAが割り当てられると
ページングが起きてしまいます。
事前に大きくしすぎたshared_pool_sizeを小さくしておきましょう。
▽sort_area_sizeを小さくする
SQL> alter system set shared_pool_size=200M;
システムが変更されました。
▽sort_area_retained_size = 0 の設定
SQL> alter session set sort_area_retained_size=0;
セッションが変更されました。
SQL> select id,sum(cost) from code group by id;
ORA-04031: 共有メモリーの8192バイトを割当てできません("shared pool",
"unknown object","sort subheap","sort key")
”0”に設定してもだめなようです。
▽sort_area_retained_size = 1 の設定
SQL> alter session set sort_area_retained_size=1;
セッションが変更されました。
SQL> select id,sum(cost) from code group by id;
1000000行が選択されました。
集計処理は問題なく、完了しました。
■解決策その4
〜sort_area__sizeを設定する〜
最後の解決策です。
空きメモリがないようなので、ディスクソートで集計処理するように
sort_area_size を小さく設定してみましょう。
▽sort_area_sizeの設定
SQL> alter session set sort_area_size=1;
セッションが変更されました。
SQL> select id,sum(cost) from code group by id;
1000000行が選択されました。
集計処理は問題なく、完了しました。
さて、読者の皆様。今回の問題の手ごたえは如何でしたか?
難しかったですか?簡単でしたか?
感想・質問など寄せてくれると、大変励みになります。
今号で、新・ソートに関する検証シリーズはおしまいです。
また、皆様に有益なメルマガを提供できるよう、グリーンペペは旅に出てきます。
それでは!
お花見スポットはどこですか?茅ヶ崎にて。
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
一緒に検証してみませんか?
http://www.insight-tec.com/?http://www.insight-tec.com/html/company/com_career.html
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
┏─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━┓
●【 QAについて 】 ●
┗─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━┛
<皆様からのQAを受付けております>
皆様のQAにはできるだけ、お答えしたいと思っています。
すべてのQAにお答えすることはできないかもしれませんが、
適宜メルマガ内でとりあげていく予定ですので、是非QAを下記アドレスま
でお寄せください。
┏─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━┓
●【 編集者より 】 ●
┗─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━─━┛
週末に友達に会ったときに婚約したと報告をされたんですぅ。また去年、結
婚して7月にパパになる友達も・・。ん〜、春が近づいてきているのは嬉し
いことなのですが、私の春はいつくるのかと考えるとまだまだ先は長そうで
すぅ。 by TI
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
登録・解除は以下のURLで行うことができます。
http://www.insight-tec.com/jp/html/ora3/ora3.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<おら!オラ!Oracle−どっぷり検証生活−>
発行/編集:株式会社インサイトテクノロジー
http://www.insight-tec.com
マガジンID:0000030093
本メールマガジンに掲載された記事を許可なく転載することを禁じます。
Copyright(c) 1995-2004, Insight Technology, Inc., All Rights Reserved.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━