Oracle12c新增max_idle_time参数的学习与感触
Oracle12c新增max_idle_time参数的学习与感触
TLDR
其实任何软件出了新版本.readme 是很重要的.
尤其是数据库, 涉及到底层问题的.
比如这次遇到的Oracle的max_idle_time参数,以及前几天遇到的Mysql的新增的parallel关键字.
自己之前的积累可能是一盏明灯, 也可能是一堵墙.
需要不断的学习不断的更新自我,才能够快速的定位和发现问题.
有时候时间很重要, 比别人快的解决问题才可能不被别人骗.
背景
最近出现了一个非常奇怪的问题现象
一个环境早上上班时容易出现无法建立连接的提示.
同时数据库的v$session等信息又比较正常, 显示仅有几个连接.
所以上线会议之前, 同事告诉我没有连接池的问题, 是连不上数据库导致的.
基于这个判断, 我跟着项目组一起学习和判断问题可能得原因.
排查过程
最开始以为是网络问题, 因为现场的网络的确存在偶发性异常的情况.
这是一个老问题, 结合背景里面手的没有连接池的问题, 所以很浅显就推断是网络问题导致.
但是问题接二连三的出现, 客户又排除了网络变更, 就比较诡异了.
就开始询问问题出现的规律:
发现有规律的在凌晨三点和下午两点多开始出现问题.
当时没办法, 想到最笨的方式为:
排查凌晨三点左右以及之前的nginx日志,排查nginx的日志有没有比较特殊的功能访问
但是考虑到如果是api调用直接的话可能就比较难分析了.
此时同时分析道有一个凌晨两点半和早上一点半的动作进行同步数据.
所以才想是不是此处导致的.
同事晚上使用测试环境进行复现, 发现的确会出现连接异常增多的情况.
感觉问题基本上定位到了一半.
结合下午客户找oracle专家查看数据库时, 发现有 oracle killed的日志.
当时提示的问题原因是 max_idle_time . 询问客户得知,客户因为资源限制,的确修改过数据库的默认值.
然后猜测怀疑是此处修改 导致与其他异常情况不一致的情况出现.
佐证
同事晚上就行进行验证:
1. 数据库开启参数 将 max_idle_time 设置成10分钟.
2. 模拟产生大量数据库连接的操作.
3. 开启应用的actuator 进行判断.
4. 打开数据库监控, 查看该应用服务器针对数据库的连接情况.
结论为:
连接池很快增多,并且保持问题.
十分钟之后, 应用和数据库的连接开始被kill, 这是max_idle_time的核心目标.
通过netstat 可以看到 CLOSEWAIT的连接开始增多.
通过数据库的session信息可以看到, 该客户端的数据库连接迅速减少.
所有动作的同事发现actuator的hikari_connections 的参数没有发生变化. 保持在连接的高位.
所以基本上可以在再现了这个问题.
后续思考
1. 应用层必须减少建立数据库连接的次数和频率, 并且尽量使用连接池实现连接复用.
2. 应用最好实现批量处理,批量提交, 避免单次提交太多导致应用性能下降.
3. 需要进行连接的finally catch的处理. 避免SQL异常时不进行commit后者是rollback.
4. 数据库有任何改动必须告知业务方人员, 数据库是很关键的. 任何修改都可能产生比较大的影响.
5. 数据库的内存, CPU, process,session都是资源,重要项目必须保证有充足的资源储备. 来扛过可能得洪峰.
数据库需要实时进行优化, 不仅仅是CPU和内存等参数,还有句型表的处理. 应该将非核心表移除到其他位置, 避免影响核心业务.
6. 网络层一定要稳定, 最好有完整的监控, 能够自证清白网络没有问题.
7. 监控必须全面, 应用,网络, 数据库,必须都的有监控, 并且最好是一体化, 快速查询分析 ,不能偏听偏信.
8. 对变动要有敏感,对过往的知识储备要有实时更新的思想准备. 遇到问题并不可怕, 能够解决问题才能进步.
关于Oracle的参数
Oracle 12.2 引入了新参数MAX_IDLE_TIME。
它可以指定会话空闲的最大分钟数。如果会话空闲的时间超过了这个阈值的话,这个会话将会被自动终止。
其实在Oracle 10g& 11g时代,我还写过脚本定期清理INACTIVE会话,当时写的文章名为ORACLE定期清理INACTIVE会话”。
从Oracle 12.2开始,就完全没有必要这样做了,设置一个简单的参数即可解决这个问题,见微知著,一叶知秋。以后数据库运维的趋势确实是越来越简单化,自动化。
MAX_IDLE_TIME这个参数的时间单位是分钟,注意不是秒。
可以在PDB级别或CDB级别修改。但是不能在会话级别修改(ALTER SESSION),另外,对于RAC实例,不同节点的值可以设置成不一样。
如果参数MAX_IDLE_TIME的值为0,表示不限制会话的空闲时间。
当会话的空闲时间超过阈值时,会话被终止后,你会在客户端收到ORA-03113错误。注
意,有时候我们也会通过RESOURCE_LIMIT限制会话最大的空闲时间,通过在PROFILE里面设置IDLE_TIME的值来实现,如果是通过这种方式来终止会话的话,
收到的错误为“ORA-02396: exceeded maximum idle time, please connect again”。注意两者的区别。
另外,我们来看另外一个参数MAX_IDLE_BLOCKER_TIME ,
这个参数最开始宣称是ORACLE 21c引入的新特性,但是实际上ORACLE 19c已经有这个参数了。
它定义了阻塞会话的最大会话空闲时间,以分钟为单位。 默认值 0 也表示没有限制。官方文档关于这个参数的介绍如下:
当会话持有其它会话所需的资源时,该会话被视为阻塞会话. 例如
该会话持有另一个会话所需的锁。
该会话是并行操作,并且其使用者组,PDB或数据库已达到其最大并行服务器限制或已排队的并行操作。
会话的PDB或数据库实例即将达到其SESSIONS或PROCESSES限制。
这个参数与MAX_IDLE_TIME参数的不同之处在于,MAX_IDLE_TIME适用于所有会话(阻塞和非阻塞),而MAX_IDLE_BLOCKING_TIME仅适用于阻塞会话。
因此,为了使MAX_IDLE_BLOCKING_TIME有效,其限制必须小于MAX_IDLE_TIME限制。
有了这个参数,你又不用写脚本kill阻塞会话了。你看,新增的一个功能/特性就能节省你很多工作。
但是这个功能也还有一些不足的地方:
DBA不清楚Kill了哪些会话,阻塞会话当时执行过什么SQL也无从得知,
如果是自己写的脚本,往往可以记录这些信息,方便时候我们回溯、分析问题。
如果Oracle在终止会话的同时,将这些信息写入trace文件或数据字典,那就相当完美了。
https://www.cnblogs.com/kerrycode/p/16856171.html
参数的个人理解
之前与方神沟通时一直发现数据库里面有很多 inactive的会话.
长时间不回收, 导致process和session等数据量较高.
现在想oracle应该在面对了大量的类似问题后, 在oracle12c时决心来解决这个问题.
在资源比较差的环境上面, 的确能够大量减少idle的线程, 避免数据库出现宕机的情况.
也的确能够增加数据库的稳定性.
但是直接对连接进行kill不太优雅,尤其是很多应用在启用了连接池,并且设置了min pool
用来解决应用突发请求时,避免大量建立连接时间较长的问题时
会出现相反的作用, 但是产品不停的进行kill和create 反而导致网络和数据库的压力变大.
结合当年IIS调优时 应用程序池 1740分钟的回收时间, 也就是 129个小时的时间的设置
应该是超过一天, 避免太短太频繁的回收影响业务,太长可能也会导致积压过多的无线资料
感觉超过一天的设置是比较合理和有必要的.
工作中还是需要不断的学习和积累的, 多学习才有触类旁通的可能. 才有快速领悟的机会.
希望自己能够一直学习和进步下去. 能够过上理想的生活.
Oracle12c新增max_idle_time参数的学习与感触的更多相关文章
- 机器学习&数据挖掘笔记_23(PGM练习七:CRF中参数的学习)
前言: 本次实验主要任务是学习CRF模型的参数,实验例子和PGM练习3中的一样,用CRF模型来预测多张图片所组成的单词,我们知道在graph model的推理中,使用较多的是factor,而在grap ...
- 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
机器学习算法中如何选取超参数:学习速率.正则项系数.minibatch size 本文是<Neural networks and deep learning>概览 中第三章的一部分,讲机器 ...
- SpringMVC参数绑定学习总结【前后端数据参数传递】
目录 1. 绑定机制 2. 支持的数据类型 3. 参数请求中文乱码解决 4.自定义类型转换器 5.最后参数绑定学习小结 SpringMVC作为Controller层(等价servlet和struts中 ...
- 目标检测,主要问题发展,非极大值抑制中阈值也作为参数去学习更满足end2end,最近发展趋势和主要研究思路方向
目标检测,主要问题发展,非极大值抑制中阈值也作为参数去学习更满足end2end,最近发展趋势和主要研究思路方向 待办 目标检测问题时间线 特征金字塔加滑窗 对象框推荐 回归算法回归对象框 多尺度检测 ...
- MySQL 5.7 学习:新增配置参数
背景: 继上次介绍 初识 MySQL 5.6 新功能.参数完之后,刚好MySQL 5.7又GA了,在官方测试里看到,MySQL5.7在功能.性能.可用性.安全和监控上又提升了很高.现在看看和MySQL ...
- 关于C/C++中main函数参数的学习
因为面对对象作业(2018.5.21)的要求,去学习了C/C++中main函数参数的意义,以及一些简单的使用(从命令行指令的接受),不给予赘述.(仅为个人拙见,还望看官指正) 首先,带有参数的main ...
- 学习vue感触
大学还没毕业,想着先找工作,感觉计算机专业在老家做没有太大的发展,于是就在大学所在城市找了份工作.来到公司的第一天,带我的师傅让我学习vue.之前完全没有接触过框架,而且专业知识比较薄弱,前几天一直处 ...
- C# out参数的学习
out参数一直不是很会用,学习下记录下来 . 先来看一下out参数的使用场景 如果你在一个方法中 ,返回多个相同类型的值的时候,可以考虑返回一个数组.(举例:写一个方法,传入一个数组,返回数组的最大值 ...
- Python argparse参数管理学习笔记1
1.前言 最近尝试学习使用argparse进行参数管理,顺便改善一下我那丝毫都不专业的.简单粗暴的代码习惯. argparse模块可以让人轻松地编写用户友好地命令行接口,并且还能够自动生成帮助与使用手 ...
- epoll函数与参数总结学习 & errno的线程安全
select/poll被监视的文件描述符数目非常大时要O(n)效率很低:epoll与旧的 select 和 poll 系统调用完成操作所需 O(n) 不同, epoll能在O(1)时间内完成操作,所以 ...
随机推荐
- springboot--ActiveMQ--消息队列
ActiveMQ远程消息队列 一.我们创建springboot项目工程 二.创建完毕我们简单介绍 activeMQ 1.概述 消息中间件可以理解成就是一个服务软件,保存信息的容器,比如生活中的快递云柜 ...
- 2023-09-20:用go语言,保证一定是n*n的正方形,实现从里到外转圈打印的功能 如果n是奇数,中心点唯一,比如 a b c d e f g h i e是中心点,依次打印 : e f i h g
2023-09-20:用go语言,保证一定是n*n的正方形,实现从里到外转圈打印的功能 如果n是奇数,中心点唯一,比如 a b c d e f g h i e是中心点,依次打印 : e f i h g ...
- 自定义TBE算子入门,不妨从单算子开发开始
摘要:以单算子开发为例,带你了解算子开发及测试全流程. 为什么要自定义算子 深度学习算法由一个个计算单元组成,我们称这些计算单元为算子(Operator,简称Op).算子是一个函数空间到函数空间上的映 ...
- 自从安上了“AI”,这些商务经理天天按时下班了
摘要:能不能用AI来提升合同管理的效率呢?华为公司用自己的AI实践提交了一份教科书级别的答卷. 对于企业的商务精英而言,什么事情令他们既"煎熬"又"开心",既& ...
- 云小课|MRS基础原理之CarbonData入门
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:CarbonDat ...
- 云图说|应用魔方AppCube:揭秘码农防脱神器
摘要: 应用魔方(AppCube)是华为云为行业客户.合作伙伴.开发者量身打造的一款低代码开发平台.通过AppCube可轻松构建专业级应用,创新随心所欲,敏捷超乎想象. 本文分享自华为云社区<云 ...
- OpenMetric与时序数据库模型之主流TSDB分析
摘要:为大家带来当下时序数据模型的主流TSDB分析及云厂商在时序数据模型方面的最新动态. 本文分享自华为云社区<[万字干货]OpenMetric与时序数据库存储模型分析(下)>,作者:敏捷 ...
- WebKit三件套(1):WebKit之WebCore篇
导语: Chrome浏览器的代码量其实是非常庞大的,要想对其有深入的理解,仅仅编译编译调试调试,是很难深入下去的.让我们还是从其主要部分如多进程管理通信.WebKit.V8.Skia.WinHttp. ...
- Seal梁胜:近水楼台先得月,IT人员应充分利用AI解决问题
2023年9月2日,由平台工程技术社区与数澈软件Seal联合举办的⌈AIGC时代下的平台工程⌋--2023平台工程技术大会在北京圆满收官.吸引了近300名平台工程爱好者现场参会,超过3000名观众在线 ...
- Markdown Emojio 表情图标
:smile: :laughing: :blush: :smiley: ️ :relaxed: :smirk: :heart_eyes: :kissing_heart: :kissin ...