session_cached_cursors与open_cursors
来源:互联网 发布:淘宝批量下架 编辑:程序博客网 时间:2024/05/20 10:12
open_cursors 参数控制单个session 打开的cursor的数量。
v$open_cursor 是所有session(打开的cursor)的总和。
session_cached_cursors 指一个session可以缓存多少个cursor,让后续相同的SQL语句不再打开游标,从而避免软解析的过程来提高性能,是软软解析的关键所在。
设置pga端的cache list的长度,当session_cached_cursors设置为0时,pga的cache list长度为0,这时候当sga中的cursor关闭的时候它相关的library cache handle的lock位被清0,从v$open_cursor里看不到这个被关闭的cursor,它服从于shared pool的lru机制,当shared pool需要新的buffer空间时,它将会被flush出shared pool。当session_cached_cursors设置为非0值时,pga的cache list长度为session_cached_cursors值的大小,同时pga cache list将会保留一份拷贝,这时候即使sga中的cursor关闭的时候它相关的library cache handle始终被加了null mode lock,当shared pool空间紧张时library cache handle始终将会被保留在shared pool中,而新的应用访问这个cursor的时候会直接去自己的pga cache list里面搜索。
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在sessioncursor cache中的数量
5 > session cursor cache hits (软软解析的次数 a "softer" soft parse)
6 > 手工计算一下软解析次数parse count (total) - session cursor cache hits - parse count (hard)= parse count(soft)
如何正确设置session_cached_cursors参数
正确设置open_cursors和'session_cached_cursors' 可以减少sql解析,提高系统性能,那么,如何正确设置'session_cached_cursors'这个参数呢?我们可以把握下面的原则:
1、'session_cached_cursors'数量要小于open_cursors,设置方法:
SQL> show parameter cursorsNAME TYPE VALUE------------------------------------ ----------- ----------open_cursors integer 300session_cached_cursors integer 20SQL> alter system set open_cursors=1500 scope=both;System altered.SQL> alter system set session_cached_cursors=1000 scope=spfile;System altered.
open_cursors:该参数含义是同一个session同时打开最多在使用的游标数。
在Oracle10.2.0.1.0版本中默认为300;
session_cached_cursors:session_cached_cursors 就是说的是一个session可以缓存多少个cursor,让后续相同的SQL语句不再打开游标,从而避免软解析的过程来提高性能。(绑定变量是解决硬解析的问题),软解析同硬解析一样,比较消耗资源.所以这个参数非常重要。
在Oracle10.2.0.1.0版本中默认为20
在oracle 9.2.0.1.0里修改会报下面的错,这是9i版本的一个bug,可先在init文件里改好,再修改spfile文件。
SQL> alter system set session_cached_cursors=20 scope=spfile;
ORA-02096: 此选项的指定初始化参数不可修改
2、要考虑共享池的大小
3、使用下面的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 ALLSELECT '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')
4、调整参数后进行测试。
使用session cursor caching功能后,与soft parsing基本做相同的工作,但因为减少检索库高速缓冲区的时间,因此有助于减少library cache 锁存器争用。Session cursor caching 功能上一个注意事项是此功能只在会话级上有效。因此每次执行 sql 过程中,如果要进行logon和logoff时,虽然使用此项功能但是并不能从中受益。所以应该尽量利用连接池技术,维持会话连接,这样才有助于提升性能。
整理自网络
- session_cached_cursors与open_cursors
- open_cursors和session_cached_cursors参数设置
- 关于open_cursors和session_cached_cursors的参数值
- 关于open_cursors和session_cached_cursors的参数值
- 关于open_cursors和session_cached_cursors的参数值
- open_cursors 与 ORA-01000
- SCRIPT - to Set the 'SESSION_CACHED_CURSORS' and 'OPEN_CURSORS' Parameters(文档 ID 208857.1)
- 共享池之九:绑定变量与session_cached_cursors
- Oracle open_cursors、sessions、processes的理解与监控
- SESSION_CACHED_CURSORS 参数
- session_cached_cursors要点
- 查看open_cursors
- SESSION_CACHED_CURSORS参数配置
- 通过设置 session_cached_cursors参数
- session_cached_cursors的参数设置
- Processes, sessions and open_cursors
- open_cursors、sessions、processes
- open_cursors 和 session_cached_cursor
- _beginthread、_beginthreadEx、CreateThread之间的注意点
- 使用VS开发WindowsPhone7应用同时运行两个模拟器调试
- TreeView无限极动态添加及实现上下置顶排序11.29
- 浪潮优派培训笔记:JSP的9大内置对象之(一).与Servlet有关的内置对象: page、config
- Oracle服务器系统负载过高的处理
- session_cached_cursors与open_cursors
- bash中时间、日期操作
- gdb笔记
- Windows下进程通信的几种方式
- 使用Intel编译器(1)并行化(3)自动并行化相关的选项和总结
- 11.29
- javaI/O
- Effective C++笔记之二const_and_non-const 修饰的成员函数
- Linux 内核DMA机制