测试1——v$open_cursor视图和session_cached_cursors参数的关系

简介: session_cached_cursor:这个参数限制了在pga内session cursor cache list的长度,session cursor cache list(会话游标缓存链表)是一条双向的lru链表,当一个session打算关闭一个cu...

session_cached_cursor:这个参数限制了在pgasession cursor cache list的长度,session cursor cache list(会话游标缓存链表)是一条双向的lru链表,当一个session打算关闭一个cursor,如果这个cursorparse count超过3,那么这个cursor将会被加到session cursor cache listMRU.当一个session打算parse一个sql,它会先去pga内搜索session cursor cache list,如果找到那么会把这个cursor脱离list,然后当关闭的时候再把这个cursor加到MRU端.session_cached_cursor提供了快速软分析的功能,提供了比soft parse更高的性能.

下面做个实验来证明以上这些理论

SQL> select distinct(sid) from v$mystat;

      SID

----------

       146

SQL> show parameter session_cached_cursors

NAME                                             TYPE                    VALUE

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

session_cached_cursors         integer                        50


我们来把session_cached_cursors修改成1

SQL> alter session setsession_cached_cursors=1;

Sessionaltered.


这是设置session_cached_cursors0,禁止了cachecursor的功能

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

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



能在v$open_cursor里看到这条sql

执行下一条语句

SQL> create table test as select * from dba_objects;
Table created.


SQL> select owner from test where rownum=1;

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

在来看v$open_cursor有什么变化


可以看到语句变了,来看看current open cursor(当前打开游标)和session cached cursor(会话缓存游标数)的数目


SQL>  selectsid,n.name,s.value  used   from

     sys.v_$statname  n,

     sys.v_$sesstat  s

    where

   n.name in('opened cursors current', 'session cursor cache count') and

  s.statistic# = n.statistic#

     andsid=146;


可以发现,当前打开的游标数量是1个,当前缓存的游标数量是0个。


再执行上面的语句

SQL> select owner from test where rownum=1;

OWNER

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

SYS


看看v$open_cursor

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


此处执行3 select* from v$open_cursor where sid=146,oracle进行了3soft parse

SQL> select owner fromtest where rownum=1;

OWNER

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

SYS

SQL>select owner from test where rownum=1;

OWNER

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

SYS


然后再执行

SQL>select distinct sid from v$mystat;

      SID

----------

       146

再来看看v$open_cursor有什么变化


v$open_cursor有了两条记录,再看一下currentopen cursorsessioncached cursor的数目

SQL>  select sid,n.name,s.value  used

     from

      sys.v_$statname  n,

     sys.v_$sesstat  s

     where

      n.name in ('opened cursors current', 'session cursor cache count') and

      s.statistic# = n.statistic#

      and sid=146;


  果然有一句sql进了session cursor cache,"select ownerfrom 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=146;


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

这时候运行3select distinct sid from v$mystat

SQL>select distinct sid from v$mystat;

      SID

----------

       146

SQL>select distinct sid from v$mystat;

      SID

----------

       146

SQL>select distinct sid from v$mystat;

      SID

----------

       146

       




然后再运行selectowner 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=146;


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

我们再修改session_cached_cursors

alter session set session_cached_cursors=2;

再重复一下上面的过程,



再去看v$open_cursor

SQL>/


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

SQL>  selectsid,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 cachecount') and

  7    s.statistic# = n.statistic#

  8    and sid=146;

  

       

这下有2cachedcursor,一个currentopen cursor.

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

 

相关文章
|
7月前
|
JavaScript 前端开发 测试技术
Postman 加密接口测试 | 使用Rsa、Aes对参数加密
Postman 加密接口测试 | 使用Rsa、Aes对参数加密
1024 0
|
7月前
|
Web App开发 Java Linux
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
488 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
61 2
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
105 1
|
2月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
150 0
|
4月前
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
227 1
|
4月前
|
测试技术 Shell 数据库
Django视图测试:构建可靠Web应用的关键步骤
Django视图测试:构建可靠Web应用的关键步骤
31 0
|
6月前
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
47 3
|
5月前
|
数据采集 存储 测试技术
使用LabVIEW和示波器测试IGBT参数
使用LabVIEW和示波器测试IGBT参数
50 0
|
7月前
|
测试技术 Apache Windows
如何使用apache的ab压力测试小工具传参数
该内容是关于在Windows环境下使用PHPStudy中的Apache集成的ab工具进行性能测试的简要教程。
70 9