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

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

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

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

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

如下图:
ST04-Oracle性能数据获取的感想_第1张图片

最后我们可以看到以下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$SESSION      T1, GV$PROCESS T2, GV$SESS_IO      T4, GV$SQLTEXT      T5, GV$INSTANCE     T6 WHERE T1.INST_ID = T4.INST_ID AND   T1.SID = T4.SID AND   T1.INST_ID = T2.INST_ID AND T1.PADDR = T2.ADDR AND   T1.INST_ID = T6.INST_ID AND   T1.INST_ID = T5.INST_ID(+) AND   T1.SQL_ID = T5.SQL_ID(+) ORDER BY T1.INST_ID, T1.SID, T5.PIECE

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

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

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

脚本格式如下
ST04-Oracle性能数据获取的感想_第2张图片

测试代码如下

*##(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)

命中率不能小于....

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

ST04-Oracle性能数据获取的感想_第3张图片
ST04-Oracle性能数据获取的感想_第4张图片
ST04-Oracle性能数据获取的感想_第5张图片

脚本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)

命中率不能小于....

ST04-Oracle性能数据获取的感想_第6张图片

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

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

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





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/203545/viewspace-1709552/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/203545/viewspace-1709552/

你可能感兴趣的:(数据库)