« 階層問合せか、再帰問合せか、それが問題だ | トップページ | 階層問合せか、再帰問合せか、それが問題だ #3 おまけ »

2011年1月27日 (木)

階層問合せか、再帰問合せか、それが問題だ #2

階層問合せか、再帰問合せか、それが問題だ」の続きです。
前回、Oracleにかな〜り昔からある階層問合せと11g R2 で登場したSQL99対応の再帰問合せの実行計画の違いを見てみたので、今回はPGAをどのように利用するか確認してみた。


セッションID=66で階層問合せ、セッションID=170で再帰問合せを実行する。
以下、SQL*Plusで接続直後の2セッションのPGA/UGAサイズ。(当然どちらも同じ値ね)

SYS> r
1 select
2 ses.sid,
3 sname.name,
4 sstat.value
5 from
6 v$sesstat sstat
7 join v$statname sname
8 on sstat.statistic# = sname.statistic#
9 join v$session ses
10 on sstat.sid = ses.sid
11 where
12 ses.username = 'SCOTT' and
13 (sname.name like '%uga%' or sname.name like '%pga%')
14 order by
15* ses.sid, sname.name

SID NAME VALUE
---------- ---------------------------------------- ----------
66 session pga memory 672296
66 session pga memory max 672296
66 session uga memory 246552
66 session uga memory max 246552
170 session pga memory 672296
170 session pga memory max 672296
170 session uga memory 246552
170 session uga memory max 246552

8行が選択されました。

 
最初に、セッションID=66のセッションで階層問合せを実行してみた。

SYS> /

SID NAME VALUE
---------- ---------------------------------------- ----------
66 session pga memory 1131048
66 session pga memory max 1262120
66 session uga memory 414280
66 session uga memory max 763016
170 session pga memory 672296
170 session pga memory max 672296
170 session uga memory 246552
170 session uga memory max 246552

8行が選択されました。

2011/01/29:訂正:wmo6hashさん、ありがとう。

次に、セッションID=170のセッションで階層再帰問合せを実行してみた。
結果は一目瞭然。PGAの利用サイズも階層問合せが有利みたい。

SYS> /

SID NAME VALUE
---------- ---------------------------------------- ----------
66 session pga memory 1131048
66 session pga memory max 1262120
66 session uga memory 414280
66 session uga memory max 763016
170 session pga memory 999976
170 session pga memory max 1983016
170 session uga memory 312040
170 session uga memory max 1257064

8行が選択されました。

SYS>


なんか、再帰問合せを使う理由を探してみたいが…いまのところみつかんない。Oracle以外のRDBでも使える構文だから覚えとくか!。ぐらいの感覚しか持ててない。再帰問合せのほうが有利だと思えることをしばらく探しまわりそーな悪寒…


階層問合せか、再帰問合せか、それが問題だ

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/106341/50704942

この記事へのトラックバック一覧です: 階層問合せか、再帰問合せか、それが問題だ #2:

コメント

『次に、セッションID=170のセッションで階層問合せを実行してみた。』は再帰問合せではないでしょうか ?
sid=66は階層問合せ実行後のセッションでsid=170は再帰問合せ実行後のセッションだとすると、sid=66のほうがsession pga memory maxとsession uga memory maxの両方が少ないので有利ということではないかなと思いました。

投稿: wmo6hash | 2011年1月29日 (土) 18時33分

wmo6hashさん、

>『次に、セッションID=170のセッションで階層問合せを実行してみた。』は再帰問合せではないでしょうか ?

ご指摘ありがとうございます。セッションID=170は再帰問合せでした。>< やっちまいました〜。

投稿: discus | 2011年1月29日 (土) 18時48分

コメントを書く