Awr和statspack中的execute to parse和session_cached_cursors

dotaddjj發表於2012-02-20

Awrstatspack中的execute to parse

自己對於awrstatspack並不是很瞭解,在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的遊標區域內sqlsession執行三次及其以上sql語句)讓其不解析直接執行,提高效能。

下面分別在預設的session_cached_cursors 20sessin級別重置session_cached_cursors0sql語句執行時間。

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部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1057412/,如需轉載,請註明出處,否則將追究法律責任。

相關文章