有台
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...