从如何更好的监控Oracle共享池谈起

Python接口逆向实战:翻译接口签名算法还原与客户端封装 接口签名机制是Web安全与爬虫开发中的常见防护手段,其核心原理通常基于参数排序、时间戳拼接与哈希计算。理解签名算法不仅能提升数据采集的稳定性,还能深入掌握Web接口的防护逻辑。在实际应用中,翻译、天气、快递查询等公开接口常采用MD5或SHA哈希进行签名校验,通过浏览器开发者工具抓包定位、JS逆向分析、Python代码复现,可构建可编程的调用客户端。本文以在线词典翻译接口为例,完整还原签名算法并封装翻译类,展示从抓包到客户端落地的通用方法论。 阅读详情

二十年前搞Oracle运维的时候,被折腾的最厉害的是共享池的问题,ORA-4031绝对是DBA必须面对的,也是最束手无措的错误。很多DBA面试官也会问大量的共享池诊断与优化的问题,虽然他自己对很多问题的了解也不过如此。

Oracle 10G以后有了SGA动态分配的能力,而且服务器的内存也从MB级别进入到了VLM的级别,共享池和ORA-4031的问题也就见得少了。在D-SMART里,针对ORA-4031的监控功能做的比较少,只提供了一些用于分析的工具,不过这几年也很少能发挥作用。

最近一个客户的数据库因为遇到BUG导致了一个实例出现ORA-4031,必须重启才能解决问题。用户提出了针对ORA-4031问题能否加强监控与分析。我这几天也一直在考虑这个问题。Oracle数据库中最脆弱和最复杂的组件就是SHARED POOL,对SHARED POOL的监控一定要特别小心。十多年前给用户做Oracle服务的时候也经常遇到采集SHARED POOL的数据的时候把数据库实例HANG死的问题。我甚至养成了采集共享池数据的时候一定另外开好另外一个窗口,一旦有问题立马杀掉采集的会话。

在D-SMART的共享池数据采集方面,我也是十分谨慎的,不希望因为监控工具设计的不慎而导致原本负载过高的数据库实例被监控脚本搞垮。在V2.2版本的D-SMART中,和SHARED POOL相关的指标都是通过比较稳妥的系统视图采集的。如今要加强共享池数据的采集,首先想到的就是v$sgastat,因为Oracle的AWR也会采集这个视图里的数据。

为了确认访问的视图的风险,我们需要找出视图访问的基础数据结构,如果需要大量扫描共享池,那么就应该尽可能避免。通过下面的脚本可以查找相关信息。

SELECT view_definition FROM v$fixed_view_definition

       WHERE view_name='GV$SGASTAT';

可以看出,GV$SGASTAT的基础视图是x$ksmfs ,x$ksmss ,x$ksmls ,x$ksmjs ,x$ksmns, x$ksmstrs,这些基础数据结构都是汇总KGH的数据的,本身不需要遍历KGH,因此风险都不大。

比如ksmss存储了共享对象的一些属性,虽然不会在访问该对象时持有shared pool的闩锁,不过访问过程中也会对共享池内的对象的变更产生影响。因此虽然我们可以比较安全的采集数据,不过也不适合过于频繁。这样的指标的采集,每个小时一次就可以了。

column indx heading "indx|indx num"

column kghlurcr heading "RECURRENT|CHUNKS"

column kghlutrn heading "TRANSIENT|CHUNKS"

column kghlufsh heading "FLUSHED|CHUNKS"

column kghluops heading "PINS AND|RELEASES"

column kghlunfu heading "ORA-4031|ERRORS"

column kghlunfs heading "LAST ERROR|SIZE"

select

  indx,

  kghlurcr,

  kghlutrn,

  kghlufsh,

  kghluops,

  kghlunfu,

  kghlunfs

from

  sys.x$kghlu

where

  inst_id = userenv('Instance')

对于监控共享池的情况来说,kghlu数据结构更为有效,可以十分详细的查看到共享池中的每个子池的统计信息。

特别是kghlunfu/ kghlunfs这两个字段,显示了每个子池出现的ORA-4031错误的次数以及最后一次分配错误所需分配的空间的大小。一般来说如果在某个子池中分配共享池空间失败只是一个miss,此时会从另外一个池中分配,直到所有的子池中都无法分配空间,才会真正的出现FAILURE。因此ERRORS数量真正标识了共享池内存无法分配空间的情况。对该内存结构的监控可以比较准确的反映出共享池碎片产生的后果。不过这个数据结构的访问也需要通过相关闩锁,并且这个结构的访问频率要比前面所提的那些结构要频繁。因此对该数据结构的采集依然不建议过于频繁,一个小时采集一次已经足够了。

为什么这样说呢?kghlu中的kghlusep指针是一个十分重要的指针,它指向了共享池LRU链上的一个关键位置,那个位置分割了共享池LRU链的冷热区。当新的CHUNK要加入LRU链的时候,是添加在该指针左侧的冷区尾部。而冷区中的CHUNK被多次访问时会迁移到LRU链的热端,以便于被重用。因此这个指针是访问十分频繁的,采集该结构的数据要格外谨慎。

x$kghlu经常被某些数据库监控软件用来监控共享池问题,不过频繁的访问这个数据结构还是会对数据库产生影响的,特别是数据库并发比较大,共享池存在性能问题的时候,如果过于频繁的监控这个数据结构,可能会产生一些相当严重的问题。如果知道了这一点,我想大家应该理解为什么我会对共享池的监控数据采集如此谨慎了。

col "avg size" format a30 truncate;

col siz format 999999999999

SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,

To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE"

FROM X$KSMSP GROUP BY KSMCHCLS;

实际上要分析shared pool的风险,上面的语句具有更好的效果,如果发现perm内存不断增长,free的平均大小不断下降,甚至低于4KB,那么说明共享池出现了较大的碎片化风险。而下面的语句可以作更细致的分析。

col sga_heap format a15

col size format a10

select KSMCHIDX "SubPool", 'sga heap('||KSMCHIDX||',0)'sga_heap,ksmchcom ChunkComment,

decode(round(ksmchsiz/1000),0,'0-1K', 1,'1-2K', 2,'2-3K',3,'3-4K',

4,'4-5K',5,'5-6k',6,'6-7k',7,'7-8k',8,

'8-9k', 9,'9-10k','> 10K') "size",

count(*),ksmchcls Status, sum(ksmchsiz) Bytes

from x$ksmsp

where KSMCHCOM = 'free memory'

group by ksmchidx, ksmchcls,

'sga heap('||KSMCHIDX||',0)',ksmchcom, ksmchcls,decode(round(ksmchsiz/1000),0,'0-1K',

1,'1-2K', 2,'2-3K', 3,'3-4K',4,'4-5K',5,'5-6k',6,

'6-7k',7,'7-8k',8,'8-9k', 9,'9-10k','> 10K');

这条SQL可以采集到共享池中free内存的详细情况,如果较大的heap比较少时,共享池的碎片化就很严重了。

似乎我们可以直接对x$ksmsp直接做采集,从而获得对共享池分析的更有效的数据。不过真的如此吗?我们如果看一下x$ksmsp的实际结构,就会明白为什么我们不想把这个采集放到自动化采集的脚本中,更好的采集共享池的信息了。

我们可以看到ksmsp实际上指向了一个kghds的链表,而这个链表实际上是指向真实的SO头而,对x$ksmsp的统计实际上会遍历heap链表,对于共享池很大,并且共享池并发访问很重,特别是共享池存在性能问题的场景,这种访问无疑会加重共享池的负担,甚至成为压垮骆驼的最后一根稻草。如果这种采集放到不受控的自动化采集中去,那可能会带来不可知的影响。因此这种分析我们只是在手工点击的工具中提供,而不会做成自动化采集的一部分。

监控与诊断实际上也是一种运维知识,开发监控与诊断工具,产品经理中应该有资深的运维专家,仅仅依靠高水平的研发人员是开发不出一套真正高水平的运维监控与诊断工具的。而对于一些比较脆弱的数据库模块的监控采集,也需要十分谨慎的做设计,否则监控软件会成为伪装成天使的恶魔。

从外包到转正:一个华为OD亲历者的真实工作体验与避坑指南 本文分享了一位华为OD员工从外包到转正的真实经历与实用建议。通过详细解析华为OD的日常工作、转正核心指标、机试备考技巧及职场突围策略,为读者提供了一份全面的避坑指南。特别针对机试E卷的高频考点和刷题方法,给出了具体的数据分析和实战经验。 阅读详情

相关推荐

ORCA(动态避障)算法

A物体沿着向量v1和v2移动,刚好能和B擦肩而过,不会发生碰撞;若V1和V2的夹角再小一点的话就一定会发生碰撞。A的速度为V1,B的速度为V2,A对于B的相对速度(也就是我们把B看做静止,A的速度)就是V1-V2。,那么怎么判定A的速度向量是不是在碰撞区域内呢?这就需要用A相对于B的速度来判定。红线画出来的锥形区域就是A相对于B的。

u012861978的专栏 4769

Oracle -----SHARED_POOL---- 常用查询

show parameter shared---检查整体命中率(library cache) select sum(pinhits) get , sum(pins)-sum(pinhits) miss, sum(pinhits) / sum(pins) from v$librarycache;-- 查看library cache 命中率(分类) select t.NAMESPACE,t.GETHITRATIO*100 from v$librarycache t;

ludengfu的博客 2751

Claude Code vs Codex实战对比:哪个更适合你的Next.js项目?(含真实案例)

本文通过两个真实的Next.js项目案例,深度对比了Claude Code与Codex在UI实现和业务逻辑构建中的表现。Claude Code在代码质量、设计还原度和架构完整性方面优势明显,适合对可维护性要求高的生产级项目;而Codex则以快速响应和低成本见长,更适合原型开发或内部工具。文章提供了基于项目类型、团队能力和成本效益的详细选择策略。

weixin_29201859的博客 806

Oracle监控项目

1.实例是否online的监控 2.监控shared pool共享池的情况 ■library cache内存大小是否达到阈值 ■library cache命中率 ■data dictionary cache命中率 3.监控database buffer cache ■database buffer cache的内存大小是否达到阈值 ■database buffer cache命中率 ■databa...

weixin_41579911的博客 980

英飞凌TC377的Flash管理、UCB配置与HSM安全机制解析

本文深入解析了英飞凌TC377微控制器的Flash存储结构、UCB配置机制与HSM安全模块。详细阐述了带Cache与不带Cache的PFlash地址访问差异、利用SOTA与AB Swap实现无感OTA更新的原理,以及如何通过UCB安全配置启动流程与写保护。重点剖析了HSM硬件安全模块在密钥管理、安全启动与安全OTA中的核心作用,为开发高可靠性嵌入式系统提供实战指南。

weixin_29170327的博客 523

【算法】图解A* 搜索算法

A* 算法是启发式搜索算法,是根据Dijkstra算法改进而来。 问题引入 如下图所示,S为起始(start)节点,G为目标(goal)节点。 节点之间连线是两点的路径长度,如A到E的路径长度c(A,E) = 9。 节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15, 表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数,启发函数的设计有很多方法,具体可......

zhuhua造轮子的博客 4万+

share pool的组成

(管理员执行,设置的大小必须比sga自动分配的shared_pool大,参照v$sga_dynamic_components查询的值。10g后只需要设置sga_target大小,然后系统根据sga_target自动分配给shared_pool,buffer cache等,但还是可以修改,但修改的值必须比sga分配的大,才能生效;,否则设置不成功(会发现show parameter share pool查出来的和v$sga_dynamic_components(sga自动分配的)查的不相等,))

qq_33674508的博客 542

uni-app - 在纯 JS 文件中调用自定义弹框组件 / 封装全局 API 调用弹框组件(解决小程序、APP 无法使用 document.body.appendChild 插入组件节点)适配全端

uni-app-在纯JS文件中调用自定义弹框组件/封装全局API调用弹框组件(解决小程序、APP无法使用document.body.appendChild插入组件节点)适配全端,uni-appappendChild怎么向小程序中插入节点,如何开发类似uni.showModal全局组件。h5端可以通过document.body.appendChild挂载,请问app跟微信小程序怎么弄,请问uniapp如何封装全局api调用弹窗组件?uniapp怎么设置所有页面共用的组件Uni

🏆 前端领域优质创作者 1万+

Oracle Database Shared pool 内部原理、机制介绍和常用SQL

Oracle Database Shared pool 内部原理、机制介绍和常用SQL

chenoracle的博客 1203

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(一)校园网核心交换机配置

本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。

echo的博客 3795

060、模型蒸馏:把扩散模型压进单步的魔法

《端侧文生图模型蒸馏实战:从32步到1步的优化之道》摘要:针对边缘设备部署难题,本文分享了扩散模型蒸馏的核心经验。通过重构损失函数(感知损失+对抗训练+KL散度)、优化采样轨迹截取策略和改造学生模型架构,成功将Stable Diffusion压缩至单步推理。关键发现包括:小批量训练更有效、标签平滑保障生成多样性、双模型策略平衡质量与速度。在Cortex-A53芯片上实现300ms内生成,内存占用控制在200MB以下。特别强调工业部署需权衡压缩率与稳定性,建议保留迭代模式开关以适配不同场景需求。

2601_95651806的博客 150

Oracle数据库 shared pool

Shared Pool 是 Oracle 数据库中的一块内存区域,用于存储共享的 SQL 语句、PL/SQL 代码和相关的执行计划。它可以被所有的数据库会话共享,因此被称为“共享池”。Shared Pool 中的数据结构包括 Library Cache 和 Dictionary Cache,它们分别用于存储 SQL 和 PL/SQL 代码的执行计划和元数据信息。

专注于数据库技术分享,包含但不限于Oracle,MySQL,PostgreSQL,ElasticSearch及国产数据库等 1938

SAP-RPT-1 深度解读:面向企业表格数据的 rapid one

摘要: SAP在TechEd 2025大会上推出面向企业结构化数据的SAP-RPT-1(Relational Pretrained Transformer),旨在通过in-context learning直接预测表格数据中的缺失值,无需传统机器学习流程。与LLM不同,RPT专为业务表格设计,支持实时预测(如交货延迟、回款风险等)。提供Small(高吞吐)、Large(高精度)和开源版本,用户可通过无代码Playground(上传CSV并用[PREDICT]标记目标列)或Python API快速验证。典型场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 235

oracle性能调优之--Share Pool 调整与优化

--======================================= --共享池的调整与优化(Sharedpool Tuning) --======================================= 共享池(Shared pool)是SGA中最关键的内存片段,共享池主要由库缓存(共享SQL区和PL/SQL区)和数据字典...

tempsitegoogle 1131

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ORACLE常用性能监控SQL【二】

Shared pool执行存放sql的解析结果,sql执行的时候只是去share pool中找hash value,如果有匹配的就是软解析。对应的sql语句必须一模一样,如果alter system flush shared_pool(主站慎用)后再执行一样的语句,发现语句在V$SQL中的SQL_ID和HASH_VALUE与之前的一样,说明SQL_ID和HASH_VALUE应该是oracle自己的一套算法来的,只是根据sql语句内容来进行转换,sql语句不变则SQL_ID和HASH_VALUE也不变。

hzp666的博客 2339

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

oracle查询各个池的使用率,oracle查询连接数、并发数、共享池大小

1、查看当前数据库建立的会话情况:select sid,serial#,username,program,machine,status from v$session;2、查询数据库当前进程的连接数:select count(*) from v$process;3、查看数据库当前会话的连接数:select count(*) from v$session;4、查看数据库的并发连接数:select co...

weixin_30131185的博客 1835

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

oracle10g共享池大小查看及修改

 来看共享池的大小,在命令行sql命令行查看。show parameter shared_pool_size 修改共享池的大小 alter system set shared_pool_size=104857600 scope=spfile

按计划,充实、快乐的走过生命的每一天 2592

Oracle 查看 Shared Pool 信息的相关脚本

 关于Oracle SGA中Shared Pool的详细说明,参考我的blog:            Oracle Shared pool 详解            http://blog.youkuaiyun.com/tianlesoftware/article/details/6560956             在上篇blog里,介绍了shared pool 的组成和一些原理, 也有一些脚本,在这...

weixin_34292402的博客 230

Oracle教程之设置shared pool

对于设置shared pool的大小来说,没有一个通用的、普遍适用的值,不同的系统负载需要不同大小的shared pool来管理。通常我们在设置shared pool时,应该遵循“不要太大、也不要太小”的原则,设置一个初始的值,然后让系统正常运行一段时间,在这段时间里,对shared pool的使用情况进行观察监控,最后根据系统的负载得出一个在当前负载下比较合理的值。注意,这...

weixin_34301132的博客 752

oracle查询各个池的使用率,ORACLE 查询共享池中SQL运行情况 (是否绑定变量)

一、执行多次查询:SQL> beginfor i in 1..100 loopexecute immediate 'select * from emp where empno=' || i;end loop;end;/二、创建测试表SQL> create table test as select sql_text from v$sqlarea;Table created三、添加字段SQ...

weixin_31151281的博客 548

关于shared pool的深入探讨(二)

关于shared pool的深入探讨(二) Sunday, 2004-08-22 21:23 Eygle <!--DWLayoutEmptyCell--> link: http://www.eygle.com/internal/shared_pool-2.htm 我们继续把前面的问题展开一下. 其实我们可以从数据库内部监控shared poo...

javayestome 144

oracle共享池使用率,Oracle shared pool共享池详解

理解shared pool共享池子池分割以及子heap分割共享池可以通过以下两个角度来分割。1.根据CPU以及共享池尺寸来分割子池(自动手动均可)⇒ 因为共享池latch(每个池中各有一个)的竞争分散CPU 数、共享池的共享分割2.根据持续时间来对子heap进行分割(仅限自动)⇒ 通过使得持续时间较长的chunk一直存在,就可以防止碎片化根据内存的持续时间来分割共享池根据持续时间不同导致所储存的信...

weixin_32612263的博客 1602

Shared pool深入分析及性能调整

Shared pool深入分析及性能调整(一)   (2012-04-06 12:14:25) 转载▼ 标签:  杂谈 分类: oracle 1. shared pool的概念      oracle数据库作为一个管理数据的产品,必须能够认出用户所提交的管理命令(通常叫做SQL语句),从而进行响应。认出的过程叫做解析SQL语句的过

haiross的专栏 7367

Oracle-shared pool

共享池shared pool的概念 用户提交的命令:解析、执行 用户命令的解析 解析的过程是一个相当复杂的过程,它要考虑各种可能的异常情况比如SQL语句涉及到的对象不存在、提交的用户没有权限等等而且还需要考虑如何执行SQL语句采用什么方式去获职数据等解析的最终结果是要产生oracle自己内部的执行计划从而指导SQL的执行过程。可以看到,解析的过程是一个非常消耗资源的过程。因此oracle在解析用户提交的SQL语句的过程中如果对每次出现的新的SQL语句,都按照标准过程完整的从头到尾解析一遍的话效率太低尤其随着

weixin_43490914的博客 1212

oracle优化中的Shared pool的优化

<br /><br />oracle优化中的shared pool tunning优化。<br /> <br /> <br />在oracle优化中,Shared pool的优化应该放在优先考虑,因为一个cache miss在shared pool中发生比在data buffer中发生导致的成本更高,由于dictionary数据一般比library cache中的数据在内存中保存的时间长,所以关键是library cache的优化。<br /> <br />Gets:(parse)在namespace中查找

DreamDB的专栏 2086

Oracle静默安装,含仅软件安装和数据库安装及常见报错处理方法DBT-10317 DBT-05509 [FATAL] ORA-03114

本文详解Oracle 19c单机版静默安装与数据库创建全流程,涵盖目录配置、响应文件编写、安装及建库命令,附常见报错(如DBT-10317、ORA-03114)解析与解决方案,包含删库指令与日志分析,适合内网环境自学实战,免费干货,实用性强。

qq_41474349的博客 176
上一篇: 从Oracle TFA偷师学艺
下一篇: 更好的解读Oracle的LOAD PROFILE
DBAIOps社区
博客等级 码龄3年 970粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值