oracle top 5 timed events,oracle性能优化下的时间模型

oracle在10g版本明确引入time model,直观的作为一种量度指标反映给用户。时间作为一种性能上的量度和反映,一直贯穿在oracle的各个版本中,可以说时间模型并不是10g特有的东西。只不过,这种模型和概念在10g之前并没有明确和加以细化,而且,在oracle各个版本的升级和演化中,也在不断进行调整。

时间作为我们性能优化的一个重要参考,虽然有时候并不能给诊断带来直接的切入点,比如我们常常提到的cpu time、db time甚至是response time,这些指标孤立起来因为负载和系统环境的不同可能并没有横向比较的意义,却可以作为某个系统的状态数据和优化前后的成果参考,有很高的纵比意义。

结合awr/statspack,看一下数据库层面上对优化有指导意义的几个重要的时间概念。

以下是一个10g版本的awk采样片段:

DB Name

DB Id

Instance

Inst num

Release

RAC

Host

487655850

ODSDB

1

10.2.0.3.0

NO

ODSDB

Snap Id

Snap Time

Sessions

Cursors/Session

Begin Snap:

13248

03-Jul-09 03:00:58

160

3.6

End Snap:

13249

03-Jul-09 04:00:15

182

3.6

Elapsed:

59.28(mins)

DB Time:

513.50 (mins)

Report Summary

Cache Sizes

Begin

End

Buffer Cache:

9,488M

9,488M

Std Block Size:

32K

Shared Pool Size:

368M

368M

Log Buffer:

14,356K

Load Profile

Per Second

Per Transaction

Redo size:

7,145,508.24

3,102,517.40

Logical reads:

23,515.06

10,210.03

Block changes:

11,143.67

4,838.48

Physical reads:

1,385.75

601.68

Physical writes:

761.58

330.67

User calls:

278.86

121.08

Parses:

127.85

55.51

Hard parses:

2.76

1.20

Sorts:

16.79

7.29

Logons:

0.78

0.34

Executes:

258.80

112.37

Transactions:

% Blocks changed per Read:

47.39

Recursive Call %:

86.38

Rollback per transaction %:

5.52

Rows per Sort:

905.77

Instance Efficiency Percentages (Target 100%)

Buffer Nowait %:

99.93

Redo NoWait %:

99.97

Buffer Hit %:

94.79

In-memory Sort %:

100.00

Library Hit %:

97.14

Soft Parse %:

97.84

Execute to Parse %:

50.60

Latch Hit %:

99.77

Parse CPU to Parse Elapsd %:

65.49

% Non-Parse CPU:

98.44

Shared Pool Statistics

Begin

End

Memory Usage %:

62.79

59.10

% SQL with executions>1:

76.21

80.59

% Memory for SQL w/exec>1:

73.92

81.61

Top 5 Timed Events

Event

Waits

Time(s)

Avg Wait(ms)

% Total Call Time

Wait Class

db file sequential read

1,485,021

15,958

11

51.8

User I/O

CPU time

23.2

db file scattered read

175,351

3,423

20

11.1

User I/O

db file parallel read

20,612

1,505

73

4.9

User I/O

Log archive I/O

27,111

1,116

41

3.6

System I/O

1.cpu time

Oracle引入CPU time是在9iR2版本,cpu time是衡量一个数据库负载的重要指标,可以将它看成是“CPU used by this session”的收集汇总。

9iR2之前,top 5部分称之为“Top 5 Wait Events”,其中cpu time并不包含在top 5内,该部分是纯粹的等待事件的汇总。而在9iR2之后,Top 5称之为“top 5 timed events”,从字面上也可以发现二者的区别。oracle将cpu time作为一个事件纳入top 5中,新的top 5包含cpu time和waited time 2部分,也就是db time。

我们可以通过cpu time与waited time的比值,来了解库的负载和运行情况,通常较高的比例代表较好的性能;而通过平均每颗CPU耗费的cpu time和Elapsed time的比例,可以评估整个系统在CPU方面是否存在瓶颈.

2.db time

db time是指oracle花费在cpu上和等待事件上的时间,上面已经说过,db_time=cpu_time+waited time。

db time已经做为10g awr的一个采样指标,在9iR2上,我们同样可以通过top 5部分计算出来。在本例中,

db time=15958【db file sequential read】/51.8【%】/60=513.5min。这与awr db time一栏的采样数值是一致的.

3.response time

基于transaction或者user call的平均响应时间,可以看做是我们做性能优化效果的一个交付和证据.个人觉得没必要太注重这个数值。

response time=service time(cpu time) + waited time。放到我们前面的这个awr中,平均事务响应时间也就可以近似这样计算:

avg trans response time =15958【db file sequential read】/51.8【%】/60/59.28【Elapsed】/2.30【transactions per second】=3.77s

对于9iR2之前,需要通过”CPU used by this session“来计算cpu时间,通过“Top 5 Wait Events”计算等待事件时间,同样可以得出DB time和response time.

4.elapsed time

elapsed time是指物理的流逝时间,这是一个采样的时间跨度基数。

1、功能 A、获取top前10个Oracle的进程,并打印出(根据实际进程情况列出 R/S 状态) B、对这些进行进行PS检查资源占有情况,并确定是那个数据库实例的进程 C、根据当前目录下的connect.json配置数据库连接数据库访问,打印执行SQL 2、作用 A、避免手工操作的多个代码输入检查 传统检查操作如下: X、通过top找出占用资源的Oracle进程 Y、通过ps确定这个Oracle进程所说实例 Z、连接对应的Oracle实例找出执行SQL B、进行了占用内存大小自动转换,快速查看占有大小是G、M、K 3、将来版本 A、提供Socket侦听,使用telnet直接可以查看 B、提供telnet扩展命令,直接查看性能与语句 C、支持远程进行的直接Kill功能 D、支持SQL直接执行相关请求,并返回结果 E、提供REST外部请求服务功能 [root@fj43 tmp]# ./RunApp.sh /var/tmp/connect.json Config loaded... cpu used:98.0% 11362 oracle 20 0 2231m 485m 482m R 98.4 1.6 2737:26 oracle <----top输出 12780 oracle 20 0 2230m 30m 27m S 1.9 0.1 27:33.12 oracle <----top输出 13673 oracle 20 0 2248m 78m 75m S 1.9 0.3 0:01.29 oracle <----top输出 13980 oracle 20 0 2248m 93m 90m S 1.9 0.3 0:01.55 oracle <----top输出 18135 oracle 20 0 2251m 364m 357m S 1.9 1.2 2:20.23 oracle <----top输出 25677 oracle 20 0 2231m 31m 31m S 1.9 0.1 8:27.59 oracle <----top输出 PROC=11362 PerCPU=99.4 PerMEM=1.6 VMEM=2.0G RMEM=485.0M TIME=2737:26 CMD=[ora_j002_MG01] <----ps输出 PROC=12780 PerCPU=0.0 PerMEM=0.1 VMEM=2.0G RMEM=30.0M TIME=27:33 CMD=[ora_dia0_CSHQ] <----ps输出 PROC=13673 PerCPU=0.1 PerMEM=0.2 VMEM=2.0G RMEM=78.0M TIME=0:01 CMD=[ora_j001_CSGFC] <----ps输出 PROC=13980 PerCPU=0.2 PerMEM=0.3 VMEM=2.0G RMEM=93.0M TIME=0:01 CMD=[ora_j000_CSGFC] <----ps输出 PROC=18135 PerCPU=0.0 PerMEM=1.2 VMEM=2.0G RMEM=364.0M TIME=2:20 CMD=[ora_cjq0_FTFIN] <----ps输出 PROC=25677 PerCPU=0.0 PerMEM=0.1 VMEM=2.0G RMEM=31.0M TIME=8:27 CMD=[ora_pmon_CENTER] <----ps输出 jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:CSHQ username=DBUSRBMS password=**** count=1 <----数据库连接 not sql runing <----当前未执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:MG01 username=DBUSROMS1 password=**** count=1 <----数据库连接 DELETE FROM SELLMAIL WHERE SMKEY = :B1 <----当前正执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:CENTER username=DBUSRDAT password=**** count=1 <----数据库连接 not sql runing <----当前未执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:CSGFC username=DBUSRDMS password=**** count=2 <----数据库连接 not sql runing <----当前未执行SQL not sql runing <----当前未执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:FTFIN username=DBUSRFIN password=**** count=1 <----数据库连接 not sql runing <----当前未执行SQL [root@fj43 tmp]# 改进版输出情况: [root@dxs1 tmp]# RunApp.sh /var/tmp/connect.json Config loaded... cpu used:99.1% 12041 oracle 25 0 3467m 157m 152m R 99.0 1.0 2:03.69 oracle 12144 oracle 15 0 3463m 95m 93m S 9.9 0.6 0:00.38 oracle 12167 oracle 15 0 3463m 37m 34m S 4.0 0.2 0:00.04 oracle PROC=12041 PerCPU=87.1 PerMEM=0.9 VMEM=3.0G RMEM=157.0M TIME=2:03 CMD=[oracleMG01 (LOCAL=NO)] PROC=12144 PerCPU=9.5 PerMEM=0.6 VMEM=3.0G RMEM=96.0M TIME=0:00 CMD=[oracleMG01 (LOCAL=NO)] PROC=12167 PerCPU=4.0 PerMEM=0.2 VMEM=3.0G RMEM=37.0M TIME=0:00 CMD=[oracleMG01 (LOCAL=NO)] jdbcUrl=jdbc:oracle:thin:@193.0.0.77:1521:MG01 username=DBUSROMS1 password=**** count=3 SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12167' AND TB.sql_address!='00' not sql runing SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12041' AND TB.sql_address!='00' session id=13 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('000000007C9641F0') AND HASH_VALUE = 2890562617 ORDER BY PIECE /* concatenate */ Update goods a Set (goodsid,obligatestr1,goodsflag,fgoodsid,code number,codegrade)= (Select goodsid,obligatestr1,goodsflag,fgood sid,codenumber,codegrade From goods_20130720 b Where a.goodsid=b .goodsid) SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12144' AND TB.sql_address!='00' session id=475 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('000000007C973940') AND HASH_VALUE = 3246036779 ORDER BY PIECE /* concatenate */ INSERT INTO "DBUSROTHER"."FJ_SALEDETAIL" ("SDMKTNO","SDCOUNTER" ,"SDBILLNO","SDROWNO","SDPOSNO","SDINVNO","SDDATE","SDSWAPDATE", "SDSELLER","SDSELLERNM","SDGDID","SDBARCODE","SDGNM","SDUID","SD UNIT","SDSPEC","SDSALEQNT","SDSALEPRICE","SDSALEAMT","SDSWAPPRIC E","SDSWAPAMT","SDPOPDISAMT","SDPOPDISPARTAKE","SDPOPBILLNO","SD CUSTDISAMT","SDGRANTZK","SDGRANTNO","SDSORT","SDANALCODE","SDOLD DATE","SDOLDPOSNO","SDOLDINVNO","SDRETREASON","SDTAXRATE","SDINP BARCODE","SDDISTOTAL","SDMULTOTAL","SDKJKCBZ","SDSPML","SDBATCHN O","SDPROMPRICE") SELECT "A2"."SDMKTNO","A2"."SDCOUNTER",TO_CHAR ("A2"."SDSWAPDATE",'yymmdd')||SUBSTRB("A2"."SDMKTNO",(-3))||SUBS TRB("A2"."SDPOSNO",(-2))||SUBSTRB(TO_CHAR("A2"."SDINVNO",'000000 00'),(-4)),"A2"."SDROWNO","A2"."SDPOSNO","A2"."SDINVNO","A2"."SD DATE","A2"."SDSWAPDATE","A2"."SDSELLER","A2"."SDSELLERNM","A2"." SDGDID","A2"."SDBARCODE","A2"."SDGNM","A2"."SDUID","A2"."SDUNIT" ,"A2"."SDSPEC","A2"."SDSALEQNT","A2"."SDSALEPRICE","A2"."SDSALEA MT","A2"."SDSWAPPRICE","A2"."SDSWAPAMT","A2"."SDPOPDISAMT","A2". "SDPOPDISPARTAKE","A2"."SDPOPBILLNO","A2"."SDCUSTDISAMT","A2"."S DGRANTZK","A2"."SDGRANTNO","A2"."SDSORT","A2"."SDANALCODE","A2". "SDOLDDATE","A2"."SDOLDPOSNO","A2"."SDOLDINVNO","A2"."SDRETREASO N","A2"."SDTAXRATE","A2"."SDINPBARCODE","A2"."SDDISTOTAL","A2"." SDMULTOTAL","A2"."SDKJKCBZ","A2"."SDSPML",DECODE(TRIM("A2"."SDBA TCHNO"),'N',NULL,"A2"."SDBATCHNO"),"A2"."SDPROMPRICE" FROM "POS" ."SALEDETAIL"@! "A2" WHERE TO_CHAR("A2"."SDSWAPDATE",'yymmdd')|| SUBSTRB("A2"."SDMKTNO",(-3))||SUBSTRB("A2"."SDPOSNO",(-2))||SUBS TRB(TO_CHAR("A2"."SDINVNO",'00000000'),(-4))='130720002043323' [root@dxs1 tmp]# RunApp.sh /var/tmp/connect.json Config loaded... cpu used:196.6% 12041 oracle 25 0 3467m 168m 163m R 98.9 1.1 5:10.29 oracle 12287 oracle 19 0 3465m 102m 97m R 98.9 0.6 0:05.46 oracle PROC=12041 PerCPU=94.3 PerMEM=1.0 VMEM=3.0G RMEM=168.0M TIME=5:10 CMD=[oracleMG01 (LOCAL=NO)] PROC=12287 PerCPU=91.8 PerMEM=0.6 VMEM=3.0G RMEM=102.0M TIME=0:05 CMD=[ora_j001_MG01] jdbcUrl=jdbc:oracle:thin:@193.0.0.77:1521:MG01 username=DBUSROMS1 password=**** count=2 SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12041' AND TB.sql_address!='00' session id=13 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('000000007C9641F0') AND HASH_VALUE = 2890562617 ORDER BY PIECE /* concatenate */ Update goods a Set (goodsid,obligatestr1,goodsflag,fgoodsid,code number,codegrade)= (Select goodsid,obligatestr1,goodsflag,fgood sid,codenumber,codegrade From goods_20130720 b Where a.goodsid=b .goodsid) SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12287' AND TB.sql_address!='00' session id=327 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('0000000081A93490') AND HASH_VALUE = 2457621776 ORDER BY PIECE /* concatenate */ INSERT INTO SELLPAYMENT SELECT TO_NUMBER(SPBILLNO), SPPAYCODE, S UM(SPPAYMENTAMT), SPRATE, SPNO, SPPAYERID FROM SALEPAYMENT WHERE SPBILLNO = :B3 AND SPPOSNO = :B2 AND SPINVNO = :B1 GROUP BY SPB ILLNO, SPPAYCODE, SPRATE, SPNO, SPPAYERID [root@dxs1 tmp]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值