open_cursor session_cached_cursors 優化

studywell發表於2015-02-13
open_cursor   session_cached_cursors 優化

--當前資料庫連線的會話數和程式數
select count(*) from v$session
union
select count(*) from v$process;

-- 檢視當前session_cached_cursors 的使用情況:  
select e.*   from v$sesstat e, v$statname s
 where s.NAME = 'session cursor cache count'    and e.STATISTIC# = s.STATISTIC#  order by e.VALUE desc;

-----session cursor cache hits就是系統在快取記憶體區中找到相應cursors的次數,parse count(total)就是總的解析次數,二者比值越高,效能越好。如果比例比較低,並且有較多剩餘記憶體的話,可以考慮加大該引數。
SELECT NAME, VALUE   FROM V$SYSSTAT  WHERE NAME LIKE '%cursor%'
union
SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME LIKE '%parse%';
select  (select  v.VALUE from   V$SYSSTAT v where v.NAME='session cursor cache hits')/(select  a.VALUE from   V$SYSSTAT a where a.NAME='parse count (total)') from dual;

/*解釋一下v$sesstat中相關取值的重要概念
1 > opened cursors current (當前單個session開啟的cursors數量)
2 > parse count (hard) (當前session硬解析次數)
3 > parse count (total) (當前session解析總次數)
4 > session cursor cache count (設定session_cached_cursors引數後,"相同"sql被解析3次後被cache在session cursor cache中的數量
5 > session cursor cache hits (軟軟解析的次數 a "softer" soft parse )
6 > 手工計算一下軟解析次數parse count (total) - session cursor cache hits - parse count (hard) = parse count(soft)*/

---每個會話開啟的遊標數
select sid, count(*)  from v$open_cursor  group by sid  order by count(*) desc;

-----使用下面的sql判斷'session_cached_cursors' 的使用情況。如果使用率為100%則增大這個引數值
SELECT 'session_cached_cursors' PARAMETER,
       LPAD(VALUE, 5) VALUE,
       DECODE(VALUE, 0, ' n/a', TO_CHAR(100 * USED / VALUE, '990') || '%') USAGE
  FROM (SELECT MAX(S.VALUE) USED
          FROM V$STATNAME N, V$SESSTAT S
         WHERE N.NAME = 'session cursor cache count'
           AND S.STATISTIC# = N.STATISTIC#),
       (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'session_cached_cursors')
UNION ALL
SELECT 'open_cursors',
       LPAD(VALUE, 5),
       TO_CHAR(100 * USED / VALUE, '990') || '%'
  FROM (SELECT MAX(SUM(S.VALUE)) USED
          FROM V$STATNAME N, V$SESSTAT S
         WHERE N.NAME IN
               ('opened cursors current', 'session cursor cache count')
           AND S.STATISTIC# = N.STATISTIC#
         GROUP BY S.SID),
       (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'open_cursors');
      

--pga實際的總使用量
select sum(m.ALLOCATED)/1024/1024 from v$process_memory m;

--先備份spfile
-- alter system set session_cached_cursors=500 scope=spfile sid='*';

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-1435387/,如需轉載,請註明出處,否則將追究法律責任。

相關文章