awr報告中的Excute to Parse

2021-07-22 14:29:50 字數 2335 閱讀 8065

有台

oracle

資料庫伺服器

,發現記憶體占用得比較厲害,生成awr報告,發現有個指標有點異常

instance efficiency percentages (target 100%)

buffer nowait %:

100.00

redo nowait %:

100.00

buffer hit %:

100.04

in-memory sort %:

100.00

library hit %:

98.33

softparse

%:98.96

execute to parse %:

-13.40

latch hit %:

99.95

parse cpu to parse elapsd %:

98.77

% non-parse cpu:

72.78

裡面的execute to parse 居然出現負數。找到某大師給出的該引數計算公式如下:

execute to parse  =  round(100*(1-:prse/:exe),2)                    

prse = select value from v$sysstat where name = 'parse count (total)';

exe = select value from v$sysstat where name = 'execute count';

也就是說,這個引數的值,主要是體現sql的 解析次數與執行次數的比率。而且這裡的解析包括硬解析和軟解析、軟軟解析。

sql的執行包括幾個步驟:開啟、解析、繫結、執行、抓取、關閉。

解析的時候確定執行計畫,硬解析就是重新生成執行,軟解析是在共享池中找到了執行計畫,軟軟解析是讓查詢執行計畫的過程更短、更快。但無論軟解析、還是軟軟解析,都有解析這個操作。

要改善解析與執行的比率關係,就需要增加無解析的次數,無解析就是不再解析,為sql繫結不同的變數,然後執行。這樣做的前提就是:1、session不能斷開;2、session執行過解析過的sql不要關閉;滿足這兩點就可以實現無解析。

下面,就介紹乙個和這個有密切關係的引數:session_cached_cursors

session_cached_cursors,就是說的是乙個session可以快取多少個cursor,讓後續相同的sql語句不再開啟游標,從而避免軟解析的過程來提高效能。(繫結變數是解決硬解析的問題),軟解析同硬解析一樣,比較消耗資源.所以這個引數非常重要。

oracle有乙個概念,那就是session cursorcache,中文描述就是有一塊記憶體區域,用來儲存關閉了的cursor。當乙個cursor關閉之後,oracle會檢查這個cursor的request次數是否超過3次,如果超過了三次,就會放入session cursor cache,這樣在下次parse的時候,就可以從session cursor cache中找到這個statement, session cursor cache的管理也是使用lru。

session_cached_cursors這個引數是控制session cursor cache的大小的。session_cached_cursors定義了session cursor cache中儲存的cursor的個數。這個值越大,則會消耗的記憶體越多。

另外檢查這個引數是否設定的合理,可以從兩個statistic來檢查。

select name,value from v$sysstat where name like '%cursor%';

select name,value from v$sysstat where name like '%parse%';

session cursor cache hits 和parse count(total) 就是總的parse次數中,在session cursor cache中找到的次數,所佔比例越高,效能越好。如果比例比較低,並且有剩餘記憶體的話,可以考慮加大該引數。

到這裡,我們就明白了,基於上面的情況,我們應該調整哪個引數,才能真正解決問題。

alter system set session_cached_cursors=100 scope=spfile;

修改後要重啟資料庫方能生效。

select * from v$parameter where name = 'session_cached_cursors'

生成awr報告

oracle內部以一定的頻率把系統關鍵的統計資訊和負載情況儲存起來,生成snapshot 快照 全部的snapshot儲存在awr中。即automatic workload repository。當發現資料庫出現效能問題時。就能夠抽取儲存在awr中的snapshot資訊,生成在指定時間段內 即你指定...

AWR報告解讀

1 cpu不足 詳見os效能分析cpu部分 2 存在執行時間較長的sql語句 存在sql語句執行時間較長,占用了較多的cpu 其中exection 為0 說明在本報告結束快照執行時,尚未執行完畢.elapsed time 為sql語句執行總時間,如果乙個sql語句被多個會話同時執行,則此時間可能高於...

awr使用 生成awr報告步驟

生成awr報告步驟 首先需要sqlplus登入,然後步驟如下 第一步 測試開始 結束分別生成乙個快照 begin dbms workload repository.create shapshot end 有時候第一步會出現未定義的錯誤,此時需要用exec dbms workload reposito...