您当前的位置:首页 > 电脑百科 > 数据库 > Oracle

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

时间:2023-03-02 14:53:21  来源:微信公众号  作者:白鳝的洞穴
监控与诊断实际上也是一种运维知识,开发监控与诊断工具,产品经理中应该有资深的运维专家,仅仅依靠高水平的研发人员是开发不出一套真正高水平的运维监控与诊断工具的。而对于一些比较脆弱的数据库模块的监控采集,也需要十分谨慎的做设计,否则监控软件会成为伪装成天使的恶魔。

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

今早的这篇文章的主体结构是昨天下班前写出来的,今早做了一些补充就发出来了。因为昨天上午我一直在做D-SMART这个部分的优化设计,这篇文章实际上是我这一天工作的一些总结。

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死的问题。我甚至养成了采集共享池数据的时候一定另外开好另外一个窗口,一旦有问题立马杀掉采集的会话。

可能很多朋友开发的Oracle监控工具里都有共享池监控的功能,他们也觉得监控共享池的手段是很丰富的,为什么我们会把这件事搞得这么复杂呢?

图片

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

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



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
新增融券再启动暂停键,有头部券商融券池全部收回!融券余额已较年初下降近四成
4月11日,A股市场触底反弹。其中,有一则消息是触发市场反弹的重要原因:据称,多家券商暂停新增融券通券源,拟阶段性临停融券通券源每日新增投放。《每日经济新闻》向某华东头部券商...【详细内容】
2024-04-11  Search: Oracle  点击:(3)  评论:(0)  加入收藏
16个Redis常见使用场景总结
来源:blog.csdn.net/qq_39938758/article/details/105577370目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息...【详细内容】
2024-04-11  Search: Oracle  点击:(2)  评论:(0)  加入收藏
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Search: Oracle  点击:(3)  评论:(0)  加入收藏
聊聊Rust里面的数据类型
嘿,朋友们!今天我们来聊聊Rust里面的数据类型。你知道吗?Rust的数据类型可是很重要的哦,它们帮助我们定义变量和函数可以处理什么样的数据。基本数据类型首先,让我们来看看Rust提...【详细内容】
2024-04-11  Search: Oracle  点击:(2)  评论:(0)  加入收藏
C++中的外部模板及其在当前编译文件中的实例化
在C++中,模板是一种泛型编程的工具,它允许程序员以一种类型无关的方式编写代码。然而,模板的一个常见问题是它们会导致编译时间增加,特别是在大型项目中,当多个源文件包含相同的...【详细内容】
2024-04-11  Search: Oracle  点击:(2)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Search: Oracle  点击:(2)  评论:(0)  加入收藏
网络安全行业的春天何时来?
2023年下半年开始,网络安全从业人员都感受到了网安行业的寒冬,但是其实前奏并不是此刻,只是涉及到大量裁员关乎自身而人人感同身受。从近五年各个网络安全上市公司财报可以发现...【详细内容】
2024-04-11  Search: Oracle  点击:(2)  评论:(0)  加入收藏
Linux获取Redis 性能指标方法
一、监控指标Ø 性能指标:PerformanceØ 内存指标: MemoryØ 基本活动指标:Basic activityØ 持久性指标: PersistenceØ 错误指标:Error二、监...【详细内容】
2024-04-11  Search: Oracle  点击:(3)  评论:(0)  加入收藏
Redis与缓存一致性问题
缓存一致性问题是在使用缓存系统,如Redis时经常遇到的问题。当数据在原始数据源(如数据库)中发生变化时,如何确保缓存中的数据与数据源保持一致,是开发者需要关注的关键问题。一...【详细内容】
2024-04-11  Search: Oracle  点击:(2)  评论:(0)  加入收藏
10余所高校公布强基计划,今年有哪些变化?
今天,中国人民大学、中国农业大学、复旦大学、武汉大学、山东大学、吉林大学、重庆大学、大连理工大学发布了2024年强基计划招生简章。目前,已有10余所高校发布了招生简章。它...【详细内容】
2024-04-11  Search: Oracle  点击:(2)  评论:(0)  加入收藏
▌简易百科推荐
Oracle正式发布Java 22
Oracle 正式发布 Java 22,这是备受欢迎的编程语言和开发平台推出的全新版本。Java 22 (Oracle JDK 22) 在性能、稳定性和安全性方面进行了数千种改进,包括对Java 语言、其API...【详细内容】
2024-03-21  OSC开源社区    Tags:Oracle   点击:(10)  评论:(0)  加入收藏
oracle数据库基础学习
在当今数字化时代,数据库已成为企业运营的关键要素。而Oracle数据库,作为全球领先的企业级数据库管理系统,更是备受推崇。本文将带您深入了解Oracle数据库的基础知识,帮助您从零...【详细内容】
2024-01-20  EmSpace    Tags:oracle   点击:(90)  评论:(0)  加入收藏
一文聊聊如何快速监控 Oracle 数据库
Cprobe 是一个探针采集器,支持常见数据库、中间件的采集,比如 MySQL、Redis、MongoDB、Oracle、Kafka、ElasticSearch 等。安装配置 Oracle简单起见,我使用 Docker 启动 Oracl...【详细内容】
2023-12-26      Tags:Oracle   点击:(126)  评论:(0)  加入收藏
Oracle这个公开漏洞正在被8220挖矿组利用
有的网络攻击组织喜欢极具攻击力的0-Day漏洞,但也有的组织更愿意在那些已经公开的漏洞上下功夫,针对那些未能打好补丁的目标,不断优化策略和技术来逃避安全检测,从而最终实现入...【详细内容】
2023-12-22    FreeBuf.COM  Tags:Oracle   点击:(107)  评论:(0)  加入收藏
Oracle数据库性能监控:洞察系统瓶颈的利器!
在当今信息时代,企业对于数据的存储和管理变得越来越重要。Oracle数据库作为全球广泛应用的关系型数据库管理系统,承载着大量的业务数据和应用。为了确保数据库的高效稳定运行...【详细内容】
2023-12-18  编程技术汇  今日头条  Tags:Oracle   点击:(91)  评论:(0)  加入收藏
Oracle软件在主机平台的应用
// 下 栽 の 地 止 :http://quangneng.com/2573/主机平台通常指的是大型服务器,包括UNIX、Linux、IBM Mainframe等。Oracle数据库在这些主机平台上的应用非常普遍,原因有以下几...【详细内容】
2023-11-30  阿小白    Tags:Oracle   点击:(145)  评论:(0)  加入收藏
Oracle数据库存在不可用索引性能问题
在实践中ORACLE数据库存在不可用索引会引发性能问题。所谓的不可用索引,是指索引自身出了问题,不能被所有SQL使用到。这与因SQL写法不当而无法使用索引的索引失效情况不同。当...【详细内容】
2023-11-23  测试小号等闲之辈  微信公众号  Tags:Oracle   点击:(239)  评论:(0)  加入收藏
Oracle数据库容灾方案:持续运营的保障之道!
Oracle数据库的容灾方案是为了保障数据库持续运营和数据的高可用性而设计的。在企业级应用中,数据库的持续运行对于业务的正常操作至关重要。一旦发生数据库故障或灾难,将会对...【详细内容】
2023-11-23  编程技术汇  今日头条  Tags:Oracle   点击:(142)  评论:(0)  加入收藏
Oracle数据库事务管理:确保数据一致性的关键步骤!
事务管理是数据库管理中至关重要的一环,它确保了数据的一致性、完整性和可靠性。Oracle数据库提供了强大的事务管理功能,能够保证多个操作在数据库中作为一个逻辑单元执行,以确...【详细内容】
2023-11-20  编程技术汇  微信公众号  Tags:Oracle   点击:(194)  评论:(0)  加入收藏
从来不是侥幸!Oracle为何独得印度政府青睐?
作者 | Mohit编译 | 小欧出品 | 51CTO技术栈(微信号:blog51cto)今年 8 月,印度教育部宣布选择 Oracle 云基础设施 (OCI) 来改造免费教育技术平台 DIKSHA。小微企业信用保证基金信...【详细内容】
2023-11-17    51CTO  Tags:Oracle   点击:(183)  评论:(0)  加入收藏
站内最新
站内热门
站内头条