Awr和statspack中的execute to parse
自己对于awr和statspack并不是很了解,在pub中看到一个网友的awr信息,查看发现其中有execute to parse这个统计信息
Buffer Nowait %: | 100.00 | Redo NoWait %: | 100.00 |
Buffer Hit %: | 99.54 | In-memory Sort %: | 100.00 |
Library Hit %: | 83.33 | Soft Parse %: | 70.75 |
Execute to Parse %: | 25.10 | Latch Hit %: | 99.37 |
Parse CPU to Parse Elapsd %: | 98.63 | % Non-Parse CPU: |
Execute to parse%应该是如下的执行与解析的方面
Execute to Parse = round(100*(1-rse/:exe),2)
prse = select value from v$sysstat where name = 'parse count (total)';
exe = select value from v$sysstat where name = 'execute count';
也就是sql语句的解析占执行的百分比,公式里计算的是总解析次数parse count(total) ,看来与绑定变量关系不大,这里涉及到一个参数session_cached_cursors也就是pga中共享的游标的内存区域,其实也就是所谓的fast soft,通常在内存足够情况下可以调整session_cached_cursors参数用于增加pga的共享游标的内存区域,从而实现类似的评论/sql程序块中的循环插入删除等来提高执行效率。也就是把所谓的soft转化为fast soft来减少解析,让其存在与session_cached_cursors的游标区域内sql(session执行三次及其以上sql语句)让其不解析直接执行,提高性能。
下面分别在默认的session_cached_cursors 20和sessin级别重置session_cached_cursors为0的sql语句执行时间。
SQL> create table test001(id number);
Table created
SQL> set timing on
SQL> show parameter session_cached_cursors;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors integer 20
SQL> declare
2 begin
3 for i in 1..100000 loop
4 insert into test001 values(i);
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed
Executed in 3.245 seconds
SQL> rollback;
Rollback complete
Executed in 1.31 seconds
SQL> alter session set session_cached_cursors=0;
Session altered
Executed in 0.094 seconds
SQL> declare
2 begin
3 for i in 1..100000 loop
4 insert into test001 values(i);
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed
Executed in 7.316 seconds
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1057412/ ,如需转载,请注明出处,否则将追究法律责任。