`
swvip
  • 浏览: 154426 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle参数-open_cursors

阅读更多
open_cursors

指定一个会话一次可以打开的游标 (环境区域) 的最大数量, 并且限制 PL/SQL 使用的 PL/SQL 游标高速缓存的大小, 以避免用户再次执行语句时重新进行语法分析。请将该值设置得足够高, 这样才能防止应用程序耗尽打开的游标。
 
值范围: 1 - 操作系统限制值。
默认值: 64
 
open_cursors & session_cached_cursors 关系
 
SQL> select distinct sid from v$mystat;

       SID
----------
        12


SQL> show parameter session_cached_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors               integer     0

这是设置session_cached_cursors为0,禁止了cache cursor的功能

我们另开一个sqlplus来看v$open_cursor

SQL> select * from v$open_cursor where sid=12;

SADDR           SID USER_NAME                      ADDRESS  HASH_VALUE SQL_TEXT
-------- ---------- ------------------------------ -------- ---------- ------------------------------------------------------------
95D5AFCC         12 TAOBAO                         99DA7F20  745629022 select distinct sid from v$mystat

能在v$open_cursor里看到这条sql

执行下一条语句
SQL> select owner from test where rownum=1;

OWNER
------------------------------
SYS

在来看v$open_cursor有什么变化

SQL> /

SADDR           SID USER_NAME                      ADDRESS  HASH_VALUE SQL_TEXT
-------- ---------- ------------------------------ -------- ---------- ------------------------------------------------------------
95D5AFCC         12 TAOBAO                         99C9AEF8  608211958 select owner from test where rownum=1

可以看到语句变了,来看看current open cursor和session cached cursor的数目
SQL>  select sid,n.name,s.value  used
  2   from
  3     sys.v_$statname  n,
  4     sys.v_$sesstat  s
  5   where
  6     n.name in ('opened cursors current', 'session cursor cache count') and
  7     s.statistic# = n.statistic#
  8     and sid=12;

       SID NAME                                                                   USED
---------- ---------------------------------------------------------------- ----------
        12 opened cursors current                                                    1
        12 session cursor cache count                                                0

我们来把session_cached_cursors修改成1
SQL> alter session set session_cached_cursors=1;

Session altered.

再执行上面的语句

SQL> select owner from test where rownum=1;

OWNER
------------------------------
SYS

看看v$open_cursor

SQL> select * from v$open_cursor where sid=12;

SADDR           SID USER_NAME                      ADDRESS  HASH_VALUE SQL_TEXT
-------- ---------- ------------------------------ -------- ---------- ------------------------------------------------------------
95D5AFCC         12 TAOBAO                         99C9AEF8  608211958 select owner from test where rownum=1



此处执行3次 select * from v$open_cursor where sid=12,oracle进行了3次soft parse
SQL> select owner from test where rownum=1;

OWNER
------------------------------
SYS
SQL> select owner from test where rownum=1;

OWNER
------------------------------
SYS

然后再执行

SQL> select distinct sid from v$mystat;

       SID
----------
        12

再来看看v$open_cursor有什么变化
SQL> /

SADDR           SID USER_NAME                      ADDRESS  HASH_VALUE SQL_TEXT
-------- ---------- ------------------------------ -------- ---------- ------------------------------------------------------------
95D5AFCC         12 TAOBAO                         99C9AEF8  608211958 select owner from test where rownum=1
95D5AFCC         12 TAOBAO                         99DA7F20  745629022 select distinct sid from v$mystat

v$open_cursor有了两条记录,再看一下current open cursor和session cached cursor的数目

SQL>  select sid,n.name,s.value  used
  2   from
  3     sys.v_$statname  n,
  4     sys.v_$sesstat  s
  5   where
  6     n.name in ('opened cursors current', 'session cursor cache count') and
  7     s.statistic# = n.statistic#
  8     and sid=12;

       SID NAME                                                                   USED
---------- ---------------------------------------------------------------- ----------
        12 opened cursors current                                                    1
        12 session cursor cache count                                                1
        
果然有一句sql进了session cursor cache,"select owner from test where rownum=1"这个sql相关的cursor就被cache起来了.

再执行一条新的语句
SQL> select owner from test where rownum<2;

OWNER
------------------------------
SYS

看一下v$open_cursor
SQL> select * from v$open_cursor where sid=12;

SADDR           SID USER_NAME                      ADDRESS  HASH_VALUE SQL_TEXT
-------- ---------- ------------------------------ -------- ---------- ------------------------------------------------------------
95D5AFCC         12 TAOBAO                         99CA4FFC 2584499260 select owner from test where rownum<2
95D5AFCC         12 TAOBAO                         99C9AEF8  608211958 select owner from test where rownum=1

可以看到上一次的"select distinct sid from v$mystat"已经被关闭,在v$open_cursor中不可见,但是cached cursor "select owner from test where rownum=1"还能看到

这时候运行3次select distinct sid from v$mystat
SQL> select distinct sid from v$mystat;

       SID
----------
        12
SQL> select distinct sid from v$mystat;

       SID
----------
        12
SQL> select distinct sid from v$mystat;

       SID
----------
        12
        
然后再运行select owner from test where rownum<2

SQL>  select owner from test where rownum<2;

OWNER
------------------------------
SYS


再去查看v$open_cursor

SQL> select * from v$open_cursor where sid=12;

SADDR           SID USER_NAME                      ADDRESS  HASH_VALUE SQL_TEXT
-------- ---------- ------------------------------ -------- ---------- ------------------------------------------------------------
95D5AFCC         12 TAOBAO                         99C6C628 1755089113 select owner from test where rownum<2
95D5AFCC         12 TAOBAO                         99DA7F20  745629022 select distinct sid from v$mystat

发现原来cached cursor"select owner from test where rownum=1"已经被替换出了session cursor cache,而变成了"select distinct sid from v$mystat"

我们再修改session_cached_cursors

alter session set session_cached_cursors=2;

再重复一下上面的过程,再去看v$open_cursor

SQL> /

SADDR           SID USER_NAME                      ADDRESS  HASH_VALUE SQL_TEXT
-------- ---------- ------------------------------ -------- ---------- ------------------------------------------------------------
95D5AFCC         12 TAOBAO                         99CA4FFC 2584499260 select owner from test where rownum<2
95D5AFCC         12 TAOBAO                         99C9AEF8  608211958 select owner from test where rownum=1
95D5AFCC         12 TAOBAO                         99DA7F20  745629022 select distinct sid from v$mystat

可以看到现在有3个cursor,看一下current open cursor和session cached cursor的数目


SQL>  select sid,n.name,s.value  used
  2   from
  3     sys.v_$statname  n,
  4     sys.v_$sesstat  s
  5   where
  6     n.name in ('opened cursors current', 'session cursor cache count') and
  7     s.statistic# = n.statistic#
  8     and sid=12;

       SID NAME                                                                   USED
---------- ---------------------------------------------------------------- ----------
        12 opened cursors current                                                    1
        12 session cursor cache count                                                2
        
这下有2个cached cursor,一个current open cursor.

从这个实验我们可以清楚得看到v$open_cursor视图和session_cached_cursors参数的作用.
分享到:
评论

相关推荐

    oracle参数open_cursors与session_cached_cursors详解.pdf

    Oracle 参数 open_cursors 与 session_cached_cursors 详解 Oracle 数据库中,open_cursors 和 session_cached_cursors 是两个重要的参数,它们对 Oracle 的运行性能产生了直接的影响。本文将详细解释这两个参数的...

    Oracle数据库游标连接超出解决方案

    oracle数据库忽然连不上了,一查是游标数量超了。 1.查看游标数 show parameter open_cursors 2.修改游标数 alter system set open_cursors = 10000; 3.获取打开的游标数 select o.sid, osuser, machine, count...

    Oracle数据库管理.pptx

    - OPEN_CURSORS设置每个用户可打开的游标最大数,影响并发处理能力。 - PROCESSES定义并发操作系统进程的总数。 在创建数据库时,部分参数需要在创建前确定且不可修改,例如DB_NAME。而其他参数如LOG_ARCHIVE_...

    oracle参数设置查询

    查看processes和sessions参数 第一步,在cmd命令行,输入sqlplus 第二步,根据提示输入用户名与密码

    超出打开游标的最大数的原因和解决方案

    每个会话可以打开多个游标,但存在一个限制,即 OPEN_CURSORS 参数指定的最大游标数。如果应用程序打开的游标数超过这个限制,会引发 ORA-01000: maximum open cursors exceeded 异常。下面将探讨超出打开游标的最大...

    ORACLE初始化参数详解

    - `OPEN_CURSORS`: 设定并发打开游标的最大数量,避免过多的游标占用资源。 7. **实例恢复参数** - `FAST_START_MTTR_TARGET`: 设置目标快速启动实例恢复时间,用于快速恢复数据库。 - `DB_RECOVERY_FILE_DEST`:...

    数据库参数设置技术手册

    - OPEN_CURSORS: 系统允许的最大打开游标数,过高会消耗内存,过低可能导致游标溢出错误。 - ...其他参数(略) 5. 参数设置原则 - SGA系统全局区: 包括数据缓冲区、共享池、日志缓冲区等的设置,应根据系统负载和...

    ora分析脚本

    - sessions: currently open sessions - stack &lt;os_pid&gt; get process stack using oradebug - cursors [all] &lt;match_str&gt;: [all] parsed cursors - sharing &lt;sql_id&gt;: print why cursors are not shared - ...

    oracle9i初始化参数中文说明

    - `OPEN_CURSORS`: 允许打开的游标最大数量,控制并发查询能力。 4. **日志管理参数** - `LOG_FILE_SIZE`: 重做日志文件的大小,影响日志切换频率。 - `LOG_ARCHIVE_FORMAT`: 归档日志的格式和路径,确保数据...

    oracle 常用命令

    执行该命令后,Oracle数据库将进行实例的启动,系统会加载初始化参数,并打开数据库使用户可以进行连接和操作。 接下来,我们讨论如何查看和修改Oracle数据库的最大连接数。连接数决定了可以同时连接到数据库的用户...

    Oracle 9i 初始化参数中文说明.rar

    - `OPEN_CURSORS`:允许同时打开的游标数量,直接影响并发性能。 5. 重做日志管理: - `LOG_FILE_SIZE`:重做日志文件的大小。 - `LOG_BUFFER`:重做日志缓冲区的大小,影响日志写入速度。 6. 安全性与权限: ...

    oracle数据库-综合训练项目答案.docx

    - 使用 `ALTER SYSTEM SET` 语句可以动态修改参数值,例如 `ALTER SYSTEM SET OPEN_CURSORS=300 SCOPE=MEMORY` 设置了 `open_cursors` 参数为 300,但这个设置仅在当前会话中生效,重启数据库后会恢复原值。...

    Oracle+Stream-安装配置[参考].pdf

    - `open_links` 和 `open_cursors`:分别表示同时打开的链接数和游标数,需要根据应用的并发特性进行调整。 2. **数据库归档模式**: - 归档模式是数据库运行的一种状态,允许在主日志文件满时将旧的日志信息移动...

    Oracle初始化参数的配置

    - `open_cursors`: 控制系统同时打开的游标数量,建议值为300或根据实际负载调整。 完成修改后,需通过`shutdown immediate`命令关闭数据库,然后使用`startup pfile='...'`命令以新的PFILE启动数据库,确保新参数...

    创建Oracle数据库(以Oracle10g为例)

    - `OPEN_CURSORS`: 打开游标的最大数量。 - `PROCESSES`: 允许的最大进程数。 8. **故障恢复相关配置** - `DB_RECOVERY_FILE_DEST`: 快闪恢复区域的目录。 - `DB_RECOVERY_FILE_SIZE`: 快闪恢复区域的大小。 ...

    ORACLE数据库有关参数的理解

    - `open_cursors`:设置数据库可同时打开的游标数量,影响并发能力。 - `LOCK_SGA`:锁定SGA(System Global Area)在物理内存中,防止交换到磁盘。 - `db-block-size`和`db-block-buffers`:分别定义数据缓存块...

    Linux 下手动创建oracle数据库

    - `open_cursors=300`: 打开游标最大值。 - `pga_aggregate_target=94371840`: 程序全局区(PGA)的总目标大小。 - `processes=150`: 最大进程数。 - `remote_login_passwordfile=EXCLUSIVE`: 密码文件模式。 - `...

    aix环境下为oracle新建一个数据库

    - `OPEN_CURSORS=300`: 打开游标的最大数量设置为300。 - **诊断与统计**: - `BACKGROUND_DUMP_DEST='/LCdisk/oradata/bill/admin/bdump'`: 背景转储文件的存放路径。 - `CORE_DUMP_DEST=/LCdisk/oradata/bill/...

    oracle中dblink参数配置1

    7. **HS_OPEN_CURSORS**:这个参数定义了一个连接到非Oracle系统实例的最大游标数,它的值不会超过Oracle数据库的OPEN_CURSORS参数。适当的设置有助于平衡并发连接的资源使用和性能。 配置这些初始化参数对于优化...

Global site tag (gtag.js) - Google Analytics