我在用java调用一个存储过程时,oracle已经记录了一些数据。在v$sqlarea中,有sql_text,CPU_TIME ,ELAPSED_TIME 几个字段记录了值,有一些不明白的地方,看下面的列表:
sql_text CPU_TIME ELAPSED_TIME
select …… 15675 70142
BEGIN SP_SELECT(:1,:2,:3,:4,:5,:6); END; 78827 337570
注:此存储过程主要的select语句是第一行以省略形式写的这个。-----第一行和第二行的数据怎么差别这么大?
1.oracle到底是怎么记录存储过程的执行情况的呢,
2.我的这个存储过程执行情况是应该把两者都考虑呢,还是只看第一行,或者是第二行数据呢?
3.另外,我如果再执行一次这个存储过程,两行中的cpu执行时间和响应时间都会不同程度的增加,但是增量不大,也就是说数据已经发生了变化,到底该这样计算这个存储过程的cpu利用率呢?
4.还有内存方面的,比如存储过程消耗的共享区是两者的和,还是只是第二行就可以。 不知道我说明白了没有?大家能明白我的意思吗?请各位朋友帮忙!谢谢!
sql_text CPU_TIME ELAPSED_TIME
select …… 15675 70142
BEGIN SP_SELECT(:1,:2,:3,:4,:5,:6); END; 78827 337570
注:此存储过程主要的select语句是第一行以省略形式写的这个。-----第一行和第二行的数据怎么差别这么大?
1.oracle到底是怎么记录存储过程的执行情况的呢,
2.我的这个存储过程执行情况是应该把两者都考虑呢,还是只看第一行,或者是第二行数据呢?
3.另外,我如果再执行一次这个存储过程,两行中的cpu执行时间和响应时间都会不同程度的增加,但是增量不大,也就是说数据已经发生了变化,到底该这样计算这个存储过程的cpu利用率呢?
4.还有内存方面的,比如存储过程消耗的共享区是两者的和,还是只是第二行就可以。 不知道我说明白了没有?大家能明白我的意思吗?请各位朋友帮忙!谢谢!
1. 还没怎么用过trace呢,我用用看。
2.那你说该怎么衡量这个存储过程的cpu利用率呢?------------我是想根据cpu利用率调节负载。
3. 还有,就是我后面的问题, 另外,我如果再执行一次这个存储过程,两行中的cpu执行时间和响应时间都会不同程度的增加,但是增量不大,也就是说数据已经发生了变化,到底该这样计算这个存储过程的cpu利用率呢?
还有内存方面的,比如存储过程消耗的共享区是两者的和,还是只是第二行就可以。 我再贴一下实验结果:
SQL_TEXT SHARABLE_MEM PERSISTENT_MEM RUNTIME_MEM CPU_TIME ELAPSED_TIMEselect …… 26587 2088 9520 15672 58392
SP_SELECT 16937 748 300 78830 342706
???为何第一部分比第二部分的所需要的共享内存还大,并且大26587-16937这么多? 这是第一次执行的情况。当我再执行一次时:
SQL_TEXT SHARABLE_MEM PERSISTENT_MEM RUNTIME_MEM CPU_TIME ELAPSED_TIMEselect …… 26587 2088 9520 19962 62682
SP_SELECT 16937 748 300 88481 367976 从数据显示,第二次执行此存储过程,两行的CPU_TIME和ELAPSED_TIME都发生了变化。第二次两者的
CPU_TIME/ELAPSED_TIME(第二次) > CPU_TIME/ELAPSED_TIME (第一次),难道说第一次的cpu利用率比第二次低。
还是因为程序已经在内存里面,第二次执行时主要用cpu就行。那么当我再执行多次时,该如何衡量cpu利用率呢?????
3. 两个内存是分开的,应当计算其和。内存纪录cursor的方式按照其内容有所不同,所以一个程序内含sql语句也不能肯定程序本身所占的空间就比sql语句大。
我是想根据cpu利用率调节负载。当前cpu利用率低时,放入高cpu利用率的,当前cpu利用率高时,放入低cpu利用率的。你说这样可以调节负载吗?我调节固定的存储过程请求。
1.CPU_TIME 和ELAPSED_TIME 的单位是毫秒吗? 15672毫秒是不是15.672秒啊?如果这样数值也太大了吧,执行时间没有这么长啊 !
2.我用sql_trace工具和 sql_area两种方法得到了不同的结果如下:-----------------------------------------sql_trace工具里面:BEGIN SP_SELECT(:1,:2,:3,:4,:5,:6); END;call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.03 0.08 0 0 0 1
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.03 0.08 0 0 0 1Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 64 -----------------------------------------sql_area里面:
BEGIN SP_SELECT(:1,:2,:3,:4,:5,:6); END; 203793 2753491 这两种方法得到结果怎么差别这么大呢?