1T数据Oracle查询分析性能,ST04-Oracle性能数据获取的感想

ST04-Oracle性能数据获取的感想

最近在整理一些关于SAP性能方面的信息,在涉及到数据库性能的时候,一般我们使用ST04来察看,虽然自己之前也做过ORACLE DBA相关的工作,但是就ST04也能给相关数据,但是就理解而言还是不是友好的,于是就想知道ST04是如何获取这些相关数据,通过程序的分析,ST04其处理数据的逻辑通过CL_DB6_TREE_NAVIGATOR进行管控的,后续会依据不同ACTION的值,找到对应类,而这样会调用相关的函数或直接调用NATIVE SQL语句。那些ALV字段描述都是通过这些ACTION类进行预先的定义。

我们知道SAP对NATIVE SQL语句调用,可以与命令或通过类进行的(因为这边的数据库是ORACLE)所以这些是通过CL_SQL_STATEMENT进行的,我们知道ORACLE的性能的数据基本都存放v$或其他x$等相关表,这些是无法在SAP的DDIC上查看的。

那么ST04每个ACTION到底发送那些SQL语句呢,还好SAP的基本都是通过类来进行的,也就是说只要把断点放在CL_SQL_STATEMENT的EXECUTE_QUERY

如下图:

597f54d9de5edc94229a8501432233ce.png

2d61bea260a3d84f99b652d33da0fa6b.png

最后我们可以看到以下SQL语句

SELECT VERSION FROM V$INSTANCE

SELECT T2.INST_ID, T2.PADDR, T2.NAME FROM

GV$PROCESS T1, GV$BGPROCESS T2 WHERE T1.INST_ID = T2.INST_ID AND T1.ADDR =

T2.PADDR

SELECT T1.INST_ID, T1.SID, T1.PADDR,

T1.USERNAME,T1.SQL_ADDRESS, T1.SQL_HASH_VALUE, T1.SQL_CHILD_NUMBER,

T1.CLIENT_INFO, T1.CLIENT_IDENTIFIER, T2.SPID, T2.PROGRAM, T1.PROCESS,

T1.MACHINE, T1.PROGRAM, T1.COMMAND, T1.STATUS, T1.TYPE,

decode(T1.STATE,'WAITING', T1.EVENT, 'CPU'), T1.WAIT_TIME, T1.SECONDS_IN_WAIT,

T1.P1TEXT, T1.P1, T1.P2TEXT, T1.P2, T1.P3TEXT, T1.P3, T1.MODULE, T1.ACTION,

T4.BLOCK_GETS, T4.CONSISTENT_GETS, (T4.BLOCK_GETS + T4.CONSISTENT_GETS)

LOGICAL_READS, T4.PHYSICAL_READS, T4.BLOCK_CHANGES, T4.CONSISTENT_CHANGES,

T5.SQL_TEXT, T2.PGA_USED_MEM, T2.PGA_ALLOC_MEM, T2.PGA_FREEABLE_MEM,

T2.PGA_MAX_MEM, T1.ROW_WAIT_OBJ#, T1.ROW_WAIT_FILE#, T1.ROW_WAIT_BLOCK#,

T1.ROW_WAIT_ROW#, T6.HOST_NAME FROM GV$SESSIONT1, GV$PROCESS T2, GV$SESS_IOT4, GV$SQLTEXTT5, GV$INSTANCET6 WHERE T1.INST_ID = T4.INST_ID ANDT1.SID = T4.SID ANDT1.INST_ID = T2.INST_ID AND T1.PADDR =

T2.ADDR ANDT1.INST_ID = T6.INST_ID

ANDT1.INST_ID = T5.INST_ID(+) ANDT1.SQL_ID = T5.SQL_ID(+) ORDER BY

T1.INST_ID, T1.SID, T5.PIECE

可以看到就算SAP最后以ALV的方式来显示出来,也未必符合常规DBA看到信息,更不用说我们ABAP人员来看。

既然ST04的数据基于NATIVE SQL的语句来获取,那么我们就可以开发类似ST04的语句,符合我们常用的方法和网路上获取的脚本,这样DBA和ABAP都可以看懂脚本的内容。

于是自己开发一个查看数据库性能的工具(这边是基于ORACLE数据的)

脚本格式如下

f745ac77db1a06746564a5d9e9f3904d.png

测试代码如下

*##(1)

Hit Ratio.sql

*##(2)

物理度命中率

*##(3)

Name

Hit Ratio%

*##(5)

select name, ((consistent_gets +

db_block_gets) - physical_reads) / (consistent_gets + db_block_gets) * 100

HitRatio

from v$buffer_pool_statistics

where physical_reads > 0

*##(6)

命中率不能小于....

d2b26aaf74a5c583c38d0d64dccc7e9c.png

因为简单测试,这边就从PC端来获取脚本,当然后续可以一些常用脚本写入到数据库

1415f2447b3bda589dfb8f0b42da8d5d.png

4cf65d9b1d65342aa3eafb2fb7e2b1e8.png

00b280b61bb31551269c3188c2c32f76.png

脚本2

*##(1)

Hit Ratio2.sql

*##(2)

db block buffer efficiency

*##(3)

Cache Hit Ratio%

*##(5)

SELECT round(1 - (phy.value / (cur.value +

con.value)),4)*100 CACHEHITRATIO

FROM v$sysstat cur, v$sysstat con,

v$sysstat phy

WHERE cur.name = 'db block gets' AND

con.name = 'consistent gets' AND phy.name = 'physical reads'

*##(6)

命中率不能小于....

540e26be4d6872e4ce88ae939e00cb91.png

上面的实现的规则,就是只要符合NATIVE语句,通过字段的匹配来动态生成内表,通过NATIVE SQL类结果匹配的关系,动态把查询匹配给内表。

这样的话,可以动态的扩展ST04的功能,当然还有可以执行一些更新或其他的语句 就不在这边讨论的。

关于NATIVE SQL 的 相关的介绍,可以参考SAP DEMO PACKAGE:SDB_ADBC 中的实例!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值