Oracle的打开游标(OPEN_CURSORS)
一、OPEN_CURSORS 概述
OPEN_CURSORS 指定会话一次可以拥有的打开游标(私有 SQL 区域的句柄)的最大数量。可以使用此参数来防止会话打开过多的游标。
OPEN_CURSORS参数说明
| 特性 | 描述 |
| 参数类型 | Integer |
| 默认值 | 50 |
| 修改方式 | ALTER SYSTEM |
| PDB级别修改 | 是 |
| 参数范围 | 0 到 65535 |
| 初始化参数 | 是 |
将 OPEN_CURSORS 的值设置得足够高非常重要,以防止应用程序耗尽打开的游标。不同的应用程序的数量会有所不同。假设会话未打开由 OPEN_CURSORS 指定的游标数量,则将此值设置为高于实际需要的值不会增加任何开销。
二、什么是OPEN_CURSORS
对oracle来说,什么是打开的游标
查看v$open_cursor定义
select VIEW_DEFINITION from v$fixed_view_definition where view_name='GV$OPEN_CURSOR';
VIEW_DEFINITION
--------------------------------------------------------------------------------
select inst_id,kgllkuse, kgllksnm, user_name, kglhdpar, kglnahsh,kgllksqlid, kglnaobj, kgllkest, decode(kgllkexc, 0, to_number(NULL), kgllkexc), kgllkctp,kgllkhdl, con_id from x$kgllk where kglhdnsp = 0 and kglhdpar != kgllkhdl
可以看到v$open_cursor的基础是x$kgllk,这个一个关于Libraray Cache Lock的视图。也就是说,只要SQL上持有了Libraray Cache Lock,它就是一个打开的游标。
三、打开游标的内存释放规则
当某个SQL被缓存时,会持有Libraray Cache Lock,其相关的内存不会被释放或覆盖。
通过实验证明
3.1 将目标SQL游标缓存
会话1
sqlplus sys/oracle@pdb1 as sysdbaselect p.spid,s.sid,s.serial# from v$process p,v$session s where p.addr=s.paddr and sid=(select distinct sid from v$mystat);SPID SID SERIAL#
------------------------ ---------- ----------
35997 22 3850--执行3次
select object_name from test1 where object_id=9;
select object_name from test1 where object_id=9;
select object_name from test1 where object_id=9;
select object_name from test1 where object_id=9;
3.2 查看SQL对应的游标状态
会话2
select sid,CURSOR_TYPE from v$open_cursor where SQL_TEXT='select object_name from test1 where object_id=9';SID CURSOR_TYPE
---------- ----------------------------------------------------------------22 SESSION CURSOR CACHED
3.3 查看SQL对应的libraray cache lock
会话2
conn / as sysdbaselect kglhdadr,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6 from x$kglob where kglnaobj like 'select object_name from test1 where object_id=9';KGLHDADR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6
---------------- ---------- ---------- ---------- ----------
00000000693483A8 1 0 4072 12144
000000006936D740 1 0 4072 0SQL>
可以看到,父游标句柄和子游标句柄上持有NULL模式的libraray cache lock
3.4 刷新共享池
刷新之后查看该sql内存占用情况
conn / as sysdbaalter system flush shared_pool;select kglhdadr,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6 from x$kglob where kglnaobj like 'select object_name from test1 where object_id=9';KGLHDADR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6
---------------- ---------- ---------- ---------- ----------
00000000693483A8 1 0 0 0
000000006936D740 1 0 4072 0
可以看到,当某个游标会缓存的情况下,父游标句柄和子游标的空间未被释放,但子游标的heap 0和heap 6空间被释放。
四、如何释放未被关闭的游标内存
从上面实验可以看出,刷新共享池,并不能有效释放游标所占用的空间。方法只有一个,那就是将游标关闭。我们无法直接关闭应用程序中已经打开的游标,那只能选择kill掉某个游标所对应的进程或会话。
kill进程
kill -9 35997
以下操作均在cdb下
查看游标缓存情况
select sid,CURSOR_TYPE from v$open_cursor where SQL_TEXT='select object_name from test1 where object_id=9';
no rows selected
查看游标内存使用情况
select kglhdadr,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6 from x$kglob where kglnaobj like 'select object_name from test1 where object_id=9';KGLHDADR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6
---------------- ---------- ---------- ---------- ----------
0000000077E2C910 0 0 0 0
0000000077EFE3F8 0 0 4072 0
再次刷新共享池,游标对应的所有内存被释放。
alter system flush shared_pool;select kglhdadr,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6 from x$kglob where kglnaobj like 'select object_name from test1 where object_id=9';no rows selected
五、总结
由此可见,被缓存的游标并不是越多越好,过多缓存游标会占用大量的共享池空间,严重时会导致ORA-4031问题,关于ORA-4031报错,我们会在下一章节剖析。
相关文章:
Oracle的打开游标(OPEN_CURSORS)
一、OPEN_CURSORS 概述 OPEN_CURSORS 指定会话一次可以拥有的打开游标(私有 SQL 区域的句柄)的最大数量。可以使用此参数来防止会话打开过多的游标。 OPEN_CURSORS参数说明 特性 描述 参数类型 Integer 默认值 50 修改方式 ALTER SYSTEM PDB级别…...
数值分析—数值积分
研究背景 积分的数学解法为牛顿莱布尼兹公式,数学表示为 ∫ a b f ( x ) d x F ( b ) − F ( a ) \int_{a}^{b} f(x)dxF(b)-F(a) ∫abf(x)dxF(b)−F(a),但应用该方法有如下困难: 1, f ( x ) f(x) f(x)的原函数有时不能用初等函…...
克服大规模语言模型限制,构建新的应用方法——LangChain
大模型 大模型的出现和落地开启了人工智能(AI)新一轮的信息技术革命,改变了人们的生 活方式、工作方式和思维方式。大模型的落地需要数据、算力和算法三大要素。经过几 年发展,大模型的数据集(包括多模态数据集)制作已经形成了规约,Meta、Go…...
计算机网络 —— HTTPS 协议
前一篇文章:计算机网络 —— HTTP 协议(详解)-CSDN博客 目录 前言 一、HTTPS 协议简介 二、HTTPS 工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.引入证书 三、HTTPS 常见问题 1.中间人能否篡改证书? 2.中间人能否调…...
React第十七章(useRef)
useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时,便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value,其次就是vu…...
React第十五节useReducer使用详解差异
useReducer() 的用法注意事项 1、 概述: useReducer() 常用于管理复杂的状态更新逻辑,特别是在状态更新依赖于多个条件或动作时,useReducer 提供了一种更加结构化和可维护的方式来处理状态。可以将更新函数写在组件外面 它与 useState() 相…...
NanoLog起步笔记-5-客户端简要描述
nonolog起步笔记-5-客户端简要描述 客户端的简要的设计图路notify模式服务端最好分两个核 NanoLog::setLogLevel(NOTICE);从 NANO_LOG 开始NANO_LOGcompiling time的语句getNumNibblesNeeded:得到prompt中,number的数量countFmtParams:得到所…...
Flink:入门介绍
目录 一、Flink简介 2.1 Flink 架构 2.2 Flink 应用程序 运行模式 二、Flink 集群 部署 2.1 本地集群模式 2.1.1 安装JDK编辑 2.1.2 下载、解压 Flink 2.1.3 启动集群 2.1.4 停止集群 2.2 Standalone 模式 2.2.0 集群规划 2.2.1 安装JDK 2.2.2 设置免密登录 2…...
目标跟踪领域经典论文解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
网络编程 | TCP套接字通信及编程实现经验教程
1、TCP基础铺垫 TCP/IP协议簇中包含了如TCP、UDP、IP、ICMP、ARP、HTTP等通信协议。TCP协议是TCP/IP协议簇中最为常见且重要的通信方式之一,它为互联网上的数据传输提供了可靠性和连接管理。 TCP(Transmission Control Protocol,传输控制协议…...
SAP导出表结构并保存到Excel 源码程序
SAP导出表结构并保存到Excel,方便写代码时复制粘贴 经常做接口,需要copy表结构,找到了这样一个程程,特别有用。 01. 先看结果...
Linux下redis环境的搭建
1.redis的下载 redis官网下载redis的linux压缩包,官网地址:Redis下载 网盘链接: 通过网盘分享的文件:redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…...
REDMI瞄准游戏赛道,推出小屏平板
近日,REDMI推出了一款8.8英寸的小屏平板,引发市场关注。该平板采用LCD屏幕,搭载天玑9400处理器,定位游戏市场,意在开拓小屏平板的新领域。 小屏平板新尝试 这款REDMI平板未追随大屏潮流,而是选择了8…...
springai结合ollama
目录 ollama 介绍 使用 下载: 安装: 点击这个玩意next就行了。 运行 spring ai使用ollama调用本地部署的大模型 加依赖 配置yml 写代码 ollama 介绍 官网:Ollama Ollama是一个用于部署和运行各种开源大模型的工具; …...
React第十三节开发中常见问题之(视图更新、事件处理)
一、视图更新有哪些方案? useState用法介绍 1、对于数据变量 正常的增删改查,只会让数据更新,但是不会触发 React 视图的更新; 如: <script lang"jsx">const baseTable [{name:Andy, age: 18, id…...
【Appium报错】安装uiautomator2失败
目录 1、通过nmp安装uiautomator2:失败 2、通过 Appium 的平台直接安装驱动程序 3、通过pip 来安装 uiautomator2 1、通过nmp安装uiautomator2:失败 我先是通过npm安装的uiautomator2,也显示已经安装成功了: npm install -g …...
DataSophon集成CMAK KafkaManager
本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件:DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…...
Ubuntu22.04深度学习环境安装【显卡驱动安装】
前言 使用Windows配置环境失败,其中有一个包只有Linux版本,Windows版本的只有python3.10的,所以直接选用Linux来配置环境,显卡安装比较麻烦,单独出一期。 显卡驱动安装 方法一:在线安装(操作…...
21届秋/校招面经
开篇先说一下我自身情况,东南大学本科计算机科学与技术专业毕业,gpa3.2/4.8。零零散散搞过一年多ACM,去年(2019)在icpc上海站拿了铜之后增加了信心(因为当时训练总时间半年不到),于是…...
相机动态/在线标定
图1 图2 基本原理 【原理1】平行线在射影变换后会交于一点。如图所示,A为相机光心,蓝色矩形框为归一化平面,O为平面中心。地面四条黄色直线为平行且等距的车道线。HI交其中两条车道线于H、I, 过G作HI的平行线GM交车道线于M。HI、GM在归一化平面上的投影分别为JK、PN,二者会…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
