More Related Content Similar to [A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き Similar to [A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き (20) More from Insight Technology, Inc. More from Insight Technology, Inc. (20) [A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き3. JPOUG
Japan Oracle User Group (http://www.jpoug.org/)
活動事例:
2011年6月
2012年4月
2012年7月
2012年10月
2013年12月
2013年5月
2013年7月
2013年9月
2013年11月
2013年12月
JPOUG活動開始
Oracle OpenWorld Unconference presented by JPOUG 開催
JPOUG> SET EVENTS 20120721
Unconference at db tech showcase 2012
JPOUG Advent Calendar 2013
db tech showcase 2013 Osaka
Tech Talk Night スタート
JAWS FESTA Kansai 2013
db tech showcase 2013 Tokyo
JPOUG Advent Calendar 2013 (http://www.zusaar.com/event/1687004)
3
4. 今日話すこと
• Oracle Database 12c の Pluggable Database 環境で STATSPACK を動
かす。
• STATSPACKの結果を”素”のまま眺めるのはつらいので”ビジュアル
系”にしてみる。
• “???”を発見。
• “???”をもうちょっと深堀する。
• 無理やりまとめてみる。
4
5. 検証環境
• Oracle Database 12c ( 12.1.0 ) Enterprise Edition on Oracle Linux 6.4
64bit
• Pluggable Database (Oracle Multitenant option)
• STATSPACK
• Oracle Application Express 4.2
5
6. 検証環境
Oracle Database 12c Container Database
CDB
APEX
PDB$SEED
APEX
STATS
PACK
PDB
(PDBORCL)
APEX
STATS
PACK
PDB
(PDBORCL2)
CDB$ROOT
PDB
(PDBORCL3)
STATS
PACK
6
7. 検証環境
Oracle Database 12c Container Database
CON_ID=0
APEX
CON_ID=2
APEX
STATS
PACK
CON_ID=3
(PDBORCL)
APEX
STATS
PACK
CON_ID=4
(PDBORCL2)
CON_ID=1
CON_ID=5
(PDBORCL3)
STATS
PACK
7
8. 検証環境
CDB$ROOT@ORCL SQL> select CON_ID,DBID,NAME,OPEN_MODE,OPEN_TIME from v$containers;
CON_ID
---------1
2
3
4
5
DBID
---------1350188225
4064979437
2269547790
1200336578
1153988180
NAME
---------CDB$ROOT
PDB$SEED
PDBORCL
PDBORCL2
PDBORCL3
OPEN_MODE
---------READ WRITE
READ ONLY
READ WRITE
READ WRITE
READ WRITE
OPEN_TIME
-----------------------------13-11-07 11:59:14.685
13-11-07 11:59:14.691
13-11-10 17:54:27.347
13-11-10 17:54:27.344
13-11-10 17:54:27.344
CDB$ROOT@ORCL SQL>
CDB$ROOT@ORCL SQL> show user
ユーザーは"SYS"です。
CDB$ROOT@ORCL SQL> select count(*) from gv$sessions_count;
COUNT(*)
---------254
8
10. 検証環境
STATSPACK 12.1
----------------------------------------------------------------------Oracle12g Server
Release 12.1
Production
------------------------------------------------------------------------Copyright (c) 1993, 2012, Oracle and/or its affiliates. All rights reserved.
Author: Connie Dialeris Green
Contributors: Cecilia Gervasio, Graham Wood, Russell Green, Patrick Tearle,
Harald Eri, Stefan Pommerenk, Vladimir Barriere, Kathryn Chou
Please refer to the Oracle11g server README file in the rdbms doc directory,
for copyright, disclosure, restrictions, warrant, trademark, disclaimer,
and licensing information. The README file is README_RDBMS.HTM.
Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065.
-------------------------------------------------------------------------
10
11. 検証環境
Oracle Application Express 4.2
「Oracle Application Express(Oracle APEX)は、Oracleデー
タベース用の宣言型高速Webアプリケーション開発ツールです。
完全にサポートされた無償のオプションとして、Oracle
Databaseのすべてのエディションで使用できます。」
http://www.oracle.com/technetwork/jp/developertools/apex/overview/index.html
11
20. “execute count”深堀
• Oracle Database 12c で追加された新しいビューをみる。
http://docs.oracle.com/cd/E49329_01/server.121/b71292/release_cha
nges.htm#CJAJEECB
• 今回は「 V$CON_SYSSTAT 」ビューをチェック
20
21. V$SYSSTATとV$CON_SYSSTAT
CDB$ROOT@ORCL SQL> desc v$sysstat
名前
NULL?
----------------------------- -------STATISTIC#
NAME
CLASS
VALUE
STAT_ID
CON_ID
型
--------------NUMBER
VARCHAR2(64)
NUMBER
NUMBER
NUMBER
NUMBER
CDB$ROOT@ORCL SQL> desc v$con_sysstat
名前
NULL?
----------------------------- -------STATISTIC#
NAME
CLASS
VALUE
STAT_ID
CON_ID
型
--------------NUMBER
VARCHAR2(64)
NUMBER
NUMBER
NUMBER
NUMBER
おなじ
21
22. CON_IDって…
<V$SYSSTAT から抜粋 >
CON_ID NUMBER データが関係するコンテナのID。
可能な値は次のとおり。
0: この値は、CDB全体に関連するデータを含む行に使用される。この値は、非CDB内の行にも使用される
1: この値は、ルートのみに関連するデータを含む行に使用される
n: nは、データを含む行に適用されるコンテナID
Oracle Databaseリファレンス 12c リリース1 (12.1) B71292-01
http://docs.oracle.com/cd/E49329_01/server.121/b71292/refrn30272.htm#i1420473
<V$CON_SYSSTAT から抜粋 >
CON_ID NUMBER CDB以外から問合せが行われた場合は、そのインスタンスの統計情報が返され、
CON_ID値が0に設定されます。
CDBのルートから問合せが行われた場合は、各コンテナの統計情報が返され、CON_ID値はその統計情報
に対応するコンテナを示します。
PDBから問合せが行われた場合は、そのPDBの統計情報が返され、CON_ID値がそのPDBのコンテナIDに
設定されます。
Oracle Databaseリファレンス 12c リリース1 (12.1) B71292-01
http://docs.oracle.com/cd/E49329_01/server.121/b71292/refrn30716.htm#I1030716
22
26. V$CON_SYSSTATって…
CDB$ROOT@ORCL SQL> select * from v$con_sysstat where name = 'execute count'
STATISTIC# NAME
CLASS
VALUE
STAT_ID
CON_ID
---------- -------------------- ---------- ---------- ---------- ---------3890 execute count
64
16268331 2453370665
1
3891 execute count
64
14966176 2453370665
2
3892 execute count
64
14966689 2453370665
3
3893 execute count
64
14966659 2453370665
4
3894 execute count
64
14966176 2453370665
5
26
27. V$CON_SYSSTATって…
CDB$ROOT@ORCL SQL> select * from v$con_sysstat where name = 'execute count'
2 union all
3 select * from v$sysstat where name = 'execute count';
STATISTIC# NAME
CLASS
VALUE
STAT_ID
CON_ID
---------- -------------------- ---------- ---------- ---------- ---------3890 execute count
64
16268331 2453370665
1
3891 execute count
64
14966176 2453370665
2
3892 execute count
64
14966689 2453370665
3
3893 execute count
64
14966659 2453370665
4
3894 execute count
64
14966176 2453370665
5
778 execute count
64
16269327 2453370665
0
27
29. V$CON_SYSSTATって…
CDB$ROOT@ORCL SQL> select * from v$con_sysstat where name = 'execute count'
2 union all
3 select * from v$sysstat where name = 'execute count';
STATISTIC# NAME
CLASS
VALUE
STAT_ID
CON_ID
---------- -------------------- ---------- ---------- ---------- ---------3890 execute count
64
16268331 2453370665
1
3891 execute count
64
14966176 2453370665
2
3892 execute count
64
14966689 2453370665
3
3893 execute count
64
14966659 2453370665
4
3894 execute count
64
14966176 2453370665
5
778 execute count
64
16269327 2453370665
0
29
30. V$CON_SYSSTATって…
execute count
※イメージです
CDB$ROOT@ORCL SQL> select * from v$con_sysstat where name = 'execute count'
CON_ID=1,3,4はアクティ
2 union all
ビティーがあるPDB
3 select * from v$sysstat where name = 'execute count';
STATISTIC# NAME
CLASS
VALUE
CON_ID=2,5はアクティビ
ティーがないPDB
STAT_IDかつ、execute count の値が
CON_ID
同じ!?
---------- -------------------- ---------- ---------- ---------- ---------3890 execute count
64
16268331 2453370665
1
3891 execute count
64
14966176 2453370665
2
3892 execute count
64
14966689 2453370665
3
3893 execute count
64
14966659 2453370665
4
3894 execute count
CON_ID=0
CON_ID=1
778 execute count
CON_ID=2
64 CON_ID=3
14966176 2453370665
CON_ID=4
CON_ID=5
5
64
0
execute count
16269327 2453370665
30
31. V$CON_SYSSTATって…
※イメージです
CDB$ROOT@ORCL SQL> select * from v$con_sysstat where name = 'execute count'
2 union all
3
CON_ID=2(PDB$SEED)の値をベースライ
ンとして、その差分を合計すると、
select * from v$sysstat where name = 'execute count';
V$SYSSTATで検索した execute count
(CON_ID=0)の値と一致する。
STATISTIC# NAME
CLASS
VALUE
STAT_ID
CON_ID
---------- -------------------- ---------- ---------- ---------- ---------3890 execute count
64
16268331 2453370665
1
3891 execute count
64
14966176 2453370665
2
3892 execute count
64
14966689 2453370665
3
3893 execute count
64
14966659 2453370665
4
3894 execute count
CON_ID=0
CON_ID=1
execute count
778 execute count
CON_ID=2
execute count2
64 CON_ID=3
14966176 2453370665
CON_ID=4
CON_ID=5
5
64
0
execute count3
execute count4
execute count5
16269327 2453370665
31
32. V$CON_SYSSTATって…
“execute count” の値で確認
VIEW
CON_ID NAME
VALUE
VALUE –” CON_ID=2”のVALUE
V$CON_SYSSTAT
1 execute count
16527933
1312820
V$CON_SYSSTAT
2 execute count
15215113
0
V$CON_SYSSTAT
3 execute count
15215795
682
V$CON_SYSSTAT
4 execute count
15215581
468
V$CON_SYSSTAT
5 execute count
15215113
0
sum
V$SYSSTAT
0 execute count
16529083 + con_id=2のVALUE
1313970
16529083
32
33. V$CON_SYSSTATって…
“physical reads” の値で確認
VIEW
CON_ID NAME
VALUE
VALUE –” CON_ID=2”のVALUE
V$CON_SYSSTAT
1 physical reads
13045097
446076
V$CON_SYSSTAT
2 physical reads
12599021
0
V$CON_SYSSTAT
3 physical reads
12599273
252
V$CON_SYSSTAT
4 physical reads
12599155
134
V$CON_SYSSTAT
5 physical reads
12599021
0
sum
V$SYSSTAT
0 physical reads
13045483 + con_id=2のVALUE
446462
13045483
33
34. V$CON_SYSSTATって…
“consistent gets” の値で確認
VIEW
CON_ID NAME
VALUE
VALUE –” CON_ID=2”のVALUE
V$CON_SYSSTAT
1 consistent gets
98434084
4972139
V$CON_SYSSTAT
2 consistent gets
93461945
0
V$CON_SYSSTAT
3 consistent gets
93464277
2332
V$CON_SYSSTAT
4 consistent gets
93463505
1560
V$CON_SYSSTAT
5 consistent gets
93461945
0
sum
V$SYSSTAT
0 consistent gets
98437976 + con_id=2のVALUE
4976031
98437976
34
37. 補足
• 「ダミーの負荷(@1000_select.pdborcl.loop.sql)」
負荷をかけた環境でのみ “execute count”がカウントされる
• 「今度の負荷(1000_select.pdborcl.loop.sh)」
負荷をかけた環境以外でも “execute count”がカウントされる
• 上記より、同じ処理でも実行方法の違いにより、”execute count”の値が異なって
表示されることがある事象を確認。
• つまり、PDBのV$SYSSTATから得られる execute count の値は従来と同じような
(期待した通りの)値を示さない場合がある。
※ ここでは “期待した通り”とは、「あるPDBで実行したSQLの実行回数は、そのPDBのみの”execute
count”としてカウントされること」としています。
37
43. 続報 2013/11/18更新
• 各PDBへの接続がない状態では、CDB$ROOTで検索するV$CON_SYSSTATのそれぞれの
CON_ID(2,3,4,5…)は同じ値になることを確認。(※ CON_ID=1でクエリーを実行するため、CON_ID=1の値は異なる)
• 各PDBのセッション別の統計値を合計した値と、V$CON_SYSSTAT の各CON_IDの統計値
からCON_ID=2の統計値を差し引いた値が同じ値になることを確認。
• つまり、V$CON_SYSSTATの値は、V$SESSTATの値から導出(sum(value))されていると考
えられる。
• V$SESSSTATは該当セッションが切断されると、当然検索できなくなるが、このタイミング
で、V$CON_SYSSTATの自身以外のCON_IDに切断されたセッション分の統計値が加算さ
れているように見える。
• 各PDBのV$CON_SYSSTATの値は、自身のPDBで検索できるV$SYSSTATの値と同じである
ため、上記の動作からV$SYSSTATにはほかのPDBの統計値が反映されていると考えら
れる。
• よって、各PDBのSTATSPACKには別のPDBの統計情報が反映されていると考えられるた
め、純粋に対象のPDBのみを分析する目的としては不向きではないだろうか。
43
44. 続報 2013/11/18更新
CDB$ROOT@ORCL SQL> select 'v$sesstat' viewname ,a.name,sum(b.value),c.con_id
2
from v$statname a,v$sesstat b,v$session c
3 where a.statistic# = b.statistic#
4
and a.name ='execute count'
VIEWNAME
NAME
SUM(B.VALUE)
CON_ID
5
and b.sid = c.sid
------------- ------------------ ------------ ---------6
and c.con_id = 3
v$sesstat
execute count
722
3
v$con_sysstat execute count
52860484
1
7 group by a.name,c.con_id
v$con_sysstat execute count
50340943
2
8 union all
v$con_sysstat execute count
50341665
3
9 select 'v$con_sysstat' viewname, name,value,con_id
v$con_sysstat execute count
50340943
4
10
from v$con_sysstat
v$con_sysstat execute count
50340943
5
11 where name = 'execute count'
v$sysstat
execute count
52861206
0
12 union all
7行が選択されました。
13 select 'v$sysstat' viewname, name ,value,con_id
14
from v$sysstat
CDB$ROOT@ORCL SQL> /
15 where name = 'execute count'
16 /
VIEWNAME
NAME
SUM(B.VALUE)
CON_ID
------------v$con_sysstat
v$con_sysstat
v$con_sysstat
v$con_sysstat
v$con_sysstat
v$sysstat
------------------ ------------ ---------execute count
52862201
1
execute count
50341695
2
execute count
50341695
3
execute count
50341695
4
execute count
50341695
5
execute count
52862201
0
6行が選択されました。
50341665(CON_ID:3)
- 50340943(CON_ID:2)
---------------722
この間にCON_ID=3
のセッションを切断
CON_ID2~5まで全部同
じ値。よって、CON_ID=1
の値も、CON_ID=0の値
と同じ。
44