ITPub博客

首页 > 数字化转型 > ERP > ST04-Oracle性能数据获取的感想

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

原创 ERP 作者:xxb-xue 时间:2015-06-23 20:03:31 0 删除 编辑

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

如下图:


最后我们可以看到以下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的语句,符合我们常用的方法和网路上获取的脚本,这样DBA和ABAP都可以看懂脚本的内容。

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

脚本格式如下

测试代码如下

*##(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端来获取脚本,当然后续可以一些常用脚本写入到数据库




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

命中率不能小于....


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

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

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





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

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-06-23

  • 博文量
    15
  • 访问量
    54634