精华内容
下载资源
问答
  • 用oracle 的ADDM生产了报告,其中建议修改open_cursors和session_cached_cursors的参数值。如:FINDING 3: 15% impact (1673 seconds)------------------------------------Soft parsing of SQL statements was ...

    用oracle 的ADDM生产了报告,其中建议修改open_cursors和session_cached_cursors的参数值。

    如:

    FINDING 3: 15% impact (1673 seconds)

    ------------------------------------

    Soft parsing of SQL statements was consuming significant database time.

    RECOMMENDATION 1: Application Analysis, 15% benefit (1673 seconds)

    ACTION: Investigate application logic to keep open the frequently used

    cursors. Note that cursors are closed by both cursor close calls and

    session disconnects.

    RECOMMENDATION 2: DB Configuration, 15% benefit (1673 seconds)

    ACTION: Consider increasing the maximum number of open cursors a session

    can have by increasing the value of parameter "open_cursors".

    ACTION: Consider increasing the session cursor cache size by increasing

    the value of parameter "session_cached_cursors".

    RATIONALE: The value of parameter "open_cursors" was "300" during the

    analysis period.

    RATIONALE: The value of parameter "session_cached_cursors" was "20"

    during the analysis period.

    SYMPTOMS THAT LED TO THE FINDING:

    SYMPTOM: Contention for latches related to the shared pool was consuming

    significant database time. (30% impact [3316 seconds])

    INFO: Waits for "latch: library cache" amounted to 12% of database

    time.

    Waits for "library cache pin" amounted to 4% of database time.

    Waits for "latch: shared pool" amounted to 13% of database

    time.

    SYMPTOM: Wait class "Concurrency" was consuming significant database

    time. (36% impact [3882 seconds])

    SQL> show parameter cursors

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- -----------------------

    open_cursors                         integer     300

    session_cached_cursors               integer     20

    SQL>

    alter system set open_cursors=1500 scope=both;

    alter system set session_cached_cursors=100 scope=spfile;  (初始化文件使用了spfile)

    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 open_cursors

    2021-05-08 17:10:16
    先备份一下 C:\oracle\product\10.2.0\db_2\dbsSPFILEIDMP.ORAalter system set open_cursors=600 scope=spfile;500 ~1000select a.name, b.valuefrom v$statname a, v$mystat bwhere a.statistic# = b.statistic#...

    先备份一下 C:\oracle\product\10.2.0\db_2\dbs

    SPFILEIDMP.ORA

    alter system set open_cursors=600 scope=spfile;

    500 ~1000

    select a.name, b.value

    from v$statname a, v$mystat b

    where a.statistic# = b.statistic#

    and lower(a.name) like '%' || lower('cursor')||'%'

    NAME                                                                  VALUE

    ---------------------------------------------------------------- ----------

    opened cursors cumulative                                               166

    opened cursors current                                                    1

    session cursor cache hits                                               107

    session cursor cache count                                               19

    cursor authentications                                                   18

    参考

    http://hi.baidu.com/xiutuo/blog/item/db64e27e5b72233c0dd7da0a.html

    http://blog.chinaunix.net/u2/68465/showart_683669.html

    http://lovexueer.itpub.net/post/5072/45405

    posted on 2008-06-13 16:25 小高 阅读(904) 评论(1)  编辑  收藏 所属分类: Oracle

    展开全文
  • 今天老魏遇到了一个这样的问题,在google之后,发现讲open_cursors参数调大一些,就可以避免这样的问题(具体操作方法,可以自行百度/google)。老魏在学习的时候,对这个游标的概念有点傻傻分不清,于是花费了一些...

    今天老魏遇到了一个这样的问题,

    在google之后,发现讲open_cursors参数调大一些,就可以避免这样的问题(具体操作方法,可以自行百度/google)。

    老魏在学习的时候,对这个游标的概念有点傻傻分不清,于是花费了一些时间,想把这个问题搞懂。

    对于这个问题的实践,我参考了asktom上面,tom大师的回复。

    我先阐述一下最开始的设想,我认为每执行一条sql语句,都会占用一个opencursor,并且会使v$sesstat的value值成比例增加。

    为了验证我的猜想,我开始了下面的实验。

    session1

    SYS@orcl> select userenv('sid') from dual;

    USERENV('SID')

    --------------

    1

    SYS@orcl> select count(*) from dba_objects;

    COUNT(*)

    ----------

    13748

    session2 查看sid=1的value值

    SYS@orcl> select sid,value,b.class from v$sesstat a,v$statname b where a.statistic#=b.statistic# and name='opened cursors current' and a.sid=1 order by 2

    2  ;

    SID      VALUE      CLASS

    ---------- ---------- ----------

    1          1          1

    这时候,session1 无论执行多少sql语句,都不会使value增加,这引起了我的好奇,于是我在session2执行了下面的语句

    8f8d07cd048042d23e5f8faf4152dbca.png

    我们可以看到,在上面的结果集中,只有一个cursor_type是open的,是否说明value值,与这个是相关的呢?

    参考tom的回答(回答别的网友),我在session1采取了以下的操作

    SYS@orcl> variable x refcursor;

    SYS@orcl>       variable z refcursor;

    SYS@orcl>        variable b refcursor;

    SYS@orcl>         variable a refcursor;

    SYS@orcl> exec open :x for select * from dual;

    PL/SQL procedure successfully completed.

    SYS@orcl> exec open :z for select * from dual;

    PL/SQL procedure successfully completed.

    SYS@orcl> exec open :b for select * from dual;

    PL/SQL procedure successfully completed.

    SYS@orcl> exec open :a for select * from dual;

    PL/SQL procedure successfully completed.

    在session2在来执行查看语句

    d535f77c5b6e5fb8b4a4fe237072d292.png

    e54827191129b9ed5c242ac520920e83.png

    至此,我猜测,value只统计cursor_type为open的值。不仅仅plsql中的cursor,而且java中的createStatement和prepareStatement 也相当于cursor,都会增长value值,当达到open_cursor参数的最大值,再执行打开游标的动作,将会抛出ora-01000的问题。

    我们可以通过以下语句对cursor剩余数量进行一下监控。

    select value-(select  max(value)from v$mystat a, v$statname b

    where a.statistic# = b.statistic#

    and b.name = 'opened cursors current')

    from v$parameter where name='open_cursors';

    老魏之前看书的时候,看到open_cursor参数过大,会引起PGA内存紧张。但是今天在google上看到了这样一种说法,

    会在library cache 中分配 open_cursor参数个slot,按照这个说法,应该会对share pool会有影响。。。。我当时dump了一下library cache,但是并没有发现有关说法,这个问题就留到待我对oracle有更加深入的了解之后了。今天就简单的分享这么多,老魏文采不好,可能有些地方思维跳跃度比较大,望谅解!

    展开全文
  • 一、open_cursors1. 检查数据库中的 OPEN_CURSORS 参数值:Oracle 使用 init.ora 中的初始化参数 OPEN_CURSORS 指定一个会话一次最多可以拥有的游标数。缺省值为50。要获得数据库中 OPEN_CURSORS 参数的值,可以使用...

    一、open_cursors

    1. 检查数据库中的 OPEN_CURSORS 参数值:

    Oracle 使用 init.ora 中的初始化参数 OPEN_CURSORS 指定一个会话一次最多可以拥有的游标数。缺省值为

    50。要获得数据库中 OPEN_CURSORS 参数的值,可以使用以下查询:

    SQL> show parameter open_cursors;

    NAME TYPE VALUE

    ———————————— ———– —————

    open_cursors integer 300

    重要的是将 OPEN_CURSORS

    的值设置得足够大,以避免应用程序用尽所有打开的游标。应用程序不同,该值也不同。即便会话打开的游标数未达 OPEN_CURSORS

    指定的数量(即设置的值高于实际需要的值), 也不会增加系统开销。

    2.修改 OPEN_CURSORS 的参数值。

    截个图吧,更快一点,整体步骤如下:

    a4c26d1e5885305701be709a3d33442f.png

    3、结果分析:

    按以往经验来说,这种错误主要是由于应用程序端(JAVA)造成的。主要原因是:

    对于jdbc来说,每一个从Connection相当于一个Session。在执行conn.createStatement()和conn.prepareStatement()产生一个Statement的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。

    一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statement或PreparedStatement关闭。

    如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。

    但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库。

    对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。

    而且,绝大部分情况下,open_cursors只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。

    在该问题中,仅根据上面得错误,并不能断定是执行sql导致cursor泄漏,但未做详细测试,只是初步估计是由于频繁的触发级连触发器造成ora-00604.

    就相当于:

    begin

    for i in 1 .. 100

    loop

    for j in 1 .. 5

    loop

    open l_cursor for 'select * from dual xx' || i;

    close l_cursor;

    end loop;

    end loop;

    end;

    二、sessions

    在初始化参数所设定的限制中,最为人所知的估计就是sessions和processes

    Sessions 参数指定了一个

    Instance中能够同时存在的sessions数量,或者说,就是能同时登陆到数据库的并发用户数。通常,我们设定这个数字时需要考虑我们可能会有多少个同时连接到数据库的并发用户,并加上后台进程的进程数,最后乘与1.1.

    sessions=(1.1*process+5)

    比如说,估计系统中可能会同时有100个用户连接到数据库,那么,你的session最少应该为

    (100 + 10 ) * 1.1 = 121

    当数据库连接的并发用户已经达到这个值时,又有新session连进来,就会报错

    00018, 00000, "maximum number of sessions exceeded"

    // *Cause: All session state objects are in use.

    // *Action: Increase the value of the SESSIONS initialization

    parameter.

    三、 Processes

    和Sessions是类似的是processes这个参数。

    Processes参数指定了Instance在OS层面所能同时运行的进程数。基于和sessions设定同样的考虑,我们在设定processes时,也应考虑我们可能会有多少个同时连接到数据库的并发用户,并加上后台进程的进程数。

    当然,在MTS(shared

    server)的配置下,这个值的确定会有所不同。应该是普通后台进程+最大共享服务器的进程数(max_shared_servers) +

    最大Dispatcher进程数(max_dispatchers).

    另外,由于在window平台中,Oracle是以单一一个进程的形式存在,Processes

    参数变成了限制Oracle进程里的线程数了。

    当Oracle需要启动新的process而又已经达到processes参数时,就会报错:

    00020, 00000, "maximum number of processes (%s)

    exceeded"

    // *Cause: All process state objects are in use.

    // *Action: Increase the value of the PROCESSES initialization

    parameter.

    展开全文
  • oracle open_cursors参数配置 查看游标打开最大值设置 SQL> show parameter open_cursors; oracle 默认open_cursors 为300 设置open_cursors值 alter system set open_cursors = 1000; alter system set open_...
  • 原文地址:https://www.cnblogs.com/sumsen/archive/2012/07/19/2599206.html SQL> show parameter open_cursors --每个session(会话)最多能同时打开多少个cursor(游标) NAME TYPE...
  • 在sqlplus中修改open_cursors

    千次阅读 2012-04-26 18:01:21
    \admin\orcl\pfile\init.ora文件(名字类似于这样),在这个文件中找到open_cursors 在sqlplus中查看 open_cursors的数值: 在sqlplus中执行 SELECT v.name, v.value value FROM V$PARAME...
  • SQL> show parameter open_cursors --每个session(会话)最多能同时打开多少个cursor(游标) NAME TYPE VALUE ------------------------------------ ----------- ----...
  • 正确设置open_cursors和session_cached_cursors 可以减少sql解析,提高系统性能,那么,如何正确设置session_cached_cursors这个参数呢?我们可以把握下面的原则: 1、session_cached_cursors 数量要小于open_...
  • 设置open_cursors参数

    2013-06-28 11:36:00
    1、进入终端,输入命令:sqlplus /nolog 2、输入命令:conn /as sysdba ...3、输入命令:alter system set open_cursors=1000 scope=memory 转载于:https://www.cnblogs.com/nizuimeiabc1/p/4254221.html...
  • SQL> alter session set session_cached_cursors=0;会话已更改。SQL> show parameter session_cached_cursorsNAME TYPE------------------------------------ --------------------...
  • oracle数据库查询open_cursors值的sql语句,达梦数据库查询MAX_SESSION_STATEMENT值方法,MAX_SESSION_STATEMENT的最大值、上限是多少。 达梦数据库的 MAX_SESSION_STATEMENT 就相当于oracle 数据库的 open_cursors...
  • 在执行如下代码时,经常会出现ora-01000: maximum open cursors exceeded异常 在for循环中执行sql时,经常会出现ora-01000: maximum open cursors exceeded异常 for(int i=0;i<result.size();i++) { rs= conn....
  • 报错说op alter database open_cursors =3000 scope=both;
  • 1.1 查看参数 SQL> show parameter open_cursors --每个session(会话)最多能同时打开多少个cursor(游标) NAME TYPE VALUE ------------------------------------ -----------...
  • 处理超出打开游标的最大数异常(ORA-01000: maximum ...在执行如下代码时,经常会出现ora-01000: maximum opencursors exceeded异常 for(int i=0;i {  prepstmt =conn.prepareStatement(sql[i]);  prepstmt.se
  • 通常open_cursors参数配置的便是1个session的最大Session cursors。即1个session最多可以拥有多少个PrivateSQL Area,直白一点就是1个session最多能在UGA保存多少个不同的SQL语句的信息(包括绑定变量信息,与Shared ...
  • session_cached_cursorsopen_cursors

    千次阅读 2011-11-29 21:11:17
    open_cursors 参数控制单个session 打开的cursor的数量。 v$open_cursor 是所有session(打开的cursor)的总和。 session_cached_cursors 指一个session可以缓存多少个cursor,让后续相同的SQL语句不再打开游标,...
  • Oracle 11gR2 调整session_cached_cursors参数

    千次阅读 2018-04-05 16:10:21
    原文地址:http://blog.itpub.net/28536251/viewspace-2019984/SQL执行过程中硬解析占比过高,影响SQL执行效率,其原因有可能是游标缓存不足,通过如下语句查询... show parameter session_cached_cursors; NAME ...
  • open_cursors 指一个session最多打开的游标数。 用一下sql来确定这个值的大小 select max(count(*)) max_cacheable_cursors  from (select p.kglobt18 schema# -- parsing schema number  from sys.x$kglcursor p
  • oracle参数-open_cursors

    2010-06-28 10:37:54
    open_cursors 指定一个会话一次可以打开的游标 (环境区域) 的最大数量, 并且限制 PL/SQL 使用的 PL/SQL 游标高速缓存的大小, 以避免用户再次执行语句时重新进行语法分析。请将该值设置得足够高, 这样才能防止应用...
  • oracle参数open_cursors和session_cached_cursor详解 SQL> show parameter open_cursors --每个session(会话)...
  • open_cursors 每个session(会话)最多能同时打开多少个cursor(游标) session_cached_cursor 每个session(会话)最多可以缓存多少个关闭掉的cursor SQL> show parameter open_cursors --每个session(会话...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,183
精华内容 3,673
关键字:

修改open_cursors