CDBとPDBの間で迷子になりそう PART3 - containers clause Tweet
Previously on Mac De Oracle.
CDBとPDBの間で迷子になりそう PART3 - SQL*PlusのAutotrace編 - その2
auto traceでcontainers句の実行計画をながめたら、原型を留めないほど、変わり果てた実行計画をみて、ここから原型の実行計画をどうやったら見つけられるんだろうかと、途方にくれたところまででしたw
パラレル実行され、各pdbのemp表からempno=7369のデータがindex range scanで取得されているはず。
そして、再帰SQL文として、原文が各PDBで実行されているんだろうなぁ。
といところまではマニュアルの記述と、変わり果てた実行計画をみて、なんとなくイメージはできるんですが。。。
では、どうやったら各PDBで実行されているはずのSQL文や実行計画が見えるんだろう??
auto traceでは見ることはできなかったので、次!、SQL監視で試してみます。(ダメだと思いますが、念のため)
C##HOGE@orcl12c> select /*+ monitor */ * from containers(emp) where empno=7369;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO CON_ID
---------- ---------- --------- ---------- -------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20 4
7369 SMITH CLERK 7902 80-12-17 800 20 3
SQL監視をテキストモードで取得する自作スクリプトを実行して、実行計画を見ると....
んーっ。パラレルであるところは気づきやすいですが、やはり、原型を留めぬ変わり果てた実行計画しかみえませんねぇ。
C##HOGE@orcl12c> @show_realplan
1に値を入力してください:
旧 1: select dbms_sqltune.report_sql_monitor('&1') from dual
新 1: select dbms_sqltune.report_sql_monitor('') from dual
DBMS_SQLTUNE.REPORT_SQL_MONITOR('')
--------------------------------------
SQL Monitoring Report
SQL Text
------------------------------
select /*+ monitor */ * from containers(emp) where empno=7369
・・・中略・・・
Global Stats
=================================================
| Elapsed | Cpu | Other | Fetch | Buffer |
| Time(s) | Time(s) | Waits(s) | Calls | Gets |
=================================================
| 0.01 | 0.01 | 0.00 | 2 | 6 |
=================================================
Parallel Execution Details (DOP=4 , Servers Allocated=4)
==========================================================================================
| Name | Type | Server# | Elapsed | Cpu | Other | Buffer | Wait Events |
| | | | Time(s) | Time(s) | Waits(s) | Gets | (sample #) |
==========================================================================================
| PX Coordinator | QC | | 0.00 | 0.00 | 0.00 | | |
| p000 | Set 1 | 1 | 0.00 | 0.00 | | | |
| p001 | Set 1 | 2 | 0.00 | | 0.00 | | |
| p002 | Set 1 | 3 | 0.00 | | 0.00 | 3 | |
| p003 | Set 1 | 4 | 0.00 | 0.00 | | 3 | |
==========================================================================================
SQL Plan Monitoring Details (Plan Hash Value=1439328272)
===================================================================================================================================
| Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Activity | Activity Detail |
| | | | (Estim) | | Active(s) | Active | | (Actual) | (%) | (# samples) |
===================================================================================================================================
| 0 | SELECT STATEMENT | | | | 1 | +0 | 5 | 2 | | |
| 1 | PX COORDINATOR | | | | 1 | +0 | 5 | 2 | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | 1 | +0 | 4 | 2 | | |
| 3 | PX PARTITION LIST ALL | | 1 | | 1 | +0 | 4 | 2 | | |
| 4 | FIXED TABLE FULL | X$CDBVW$ | 1 | | 1 | +0 | 4 | 2 | | |
===================================================================================================================================
次は、AWRレポートでチャレンジ!
SYS@orcl12c> exec dbms_workload_repository.create_snapshot;
・・・中略・・・
C##HOGE@orcl12c> show con_name
CON_NAME
------------------------------
CDB$ROOT
C##HOGE@orcl12c> select * from containers(emp) where empno=7369;
・・・中略・・・
SYS@orcl12c> exec dbms_workload_repository.create_snapshot;
・・・中略・・・
SYS@orcl12c> @?/rdbms/admin/awrrpt
・・・中略・・・
....おかしいなぁ。捕まえられない!
AWRレポートで捕まえることができなかったのは環境上の影響(Shared Pool Sizeが小さ過ぎでエージアウトしちゃった、とか)もあったのかもしれません。しかもいろいろ動いていたので辛かったはず。
Shared Pool Sizeの下限値を大きめにして、
再チャレンジ。。。ん?
こんどは取れたっぽい。原型とは多少違いますが、かなり近いSQL文が見つかりました! そいつに違いない!!
というところで、今日は時間切れ、To be continued....
CDBとPDBの間で迷子になりそう PART3 - SQL*PlusのAutotrace編
CDBとPDBの間で迷子になりそう PART3 - SQL*PlusのAutotrace編 - その2
| 固定リンク | 0


コメント