ITPub博客

首页 > Linux操作系统 > Linux操作系统 > open_cursors与session_cached_cursors

open_cursors与session_cached_cursors

原创 Linux操作系统 作者:abstractcyj 时间:2013-08-20 14:48:27 0 删除 编辑
open_cursors: 该参数的含义是一个session同时打开最多在使用的游标数
session_cached_cursors: 说的是一个session最多可以缓存多少个cursor, 让后续的SQL语句不再打开游标,从而避免软解析的过程来提高性能。
软解析与硬解析都比较耗费资源。

以下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');

当我们执行一个SQL时,我们将会在shared pool产生一个library cache object, cursor就是其中针对SQL的一种library cache object。另外我们在PGA会有一个cursor的拷贝,同时在客户端有一个statement handle,这些都被称为cursor。
在v$open_cursor里我们可以看到当前打开的cursor和PGA内的cached cursor。
sesseion_cached_cursor限制了在PGA内session cursor cache list的长度,session cursor cache list是一条双向的LRU(Least Recently Used) 链表,当一个session打算关闭一个cursor时,如果这个cursor的parse count超过3次,那么这个cursor将会被加到session cursor cache list的MRU端(Most Recently Used)。当一个session打算parse一个SQL时,它会先去PGA内搜索session cursor cache list, 如果找到那么会把这个cursor脱离list, 然后当关闭时再把这个cursor加到MRU端。session_cached_cursor提供了快速软解析的功能,提供了比soft parse更高的性能。

摘自:
http://hi.baidu.com/lichangzai/item/2fe542c2776a5a2d46d5c03d


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-768892/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    559
  • 访问量
    855176