#每日一记#Oracle 数据库连接数过高处理办法
  

sailyang 2034

{{ttag.title}}
    近期有一套业务系统数据库总是出现如下告警“严重告警:XXX Oracle 服务器:10.10.X.X 数据库的侦听器 LISTENER 状态为 Inactive ”系统已经过保所以边查资料 边尝试处理
一、问题描述
     当登陆到数据库检查数据库状态无异常,查看监听也是正常,那么集群资源状态也是正常。查看数据库后台日志时发现了错误 "ORA-00020:maximum number of processes(2000) exceeded" 连接数达到最大值 2000.查看当前数据库最大连接数设置为 2000,查看数据库除后台进程外两节点数均为 1940 多,外加 50 多个已经超出 2000 了。
排查数据库最大连接数和当前连接数



    从当前连接以及后台日志查看,INACTIVE 非活跃会话 1940 之多,但数据库 CPU 内存等资源均正常,也没有异常等待事件,不过下午已经出现过连接数过高的问题,根据经验猜测应用系统的中间件连接池以及初始连接大小设置有问题,果不其然后面联系应用方确认没有设置连接超时。
    由于此系统不是核心系统,活跃会话也只有三四个更没有大事物,简单查询后便决定先杀掉连接恢复告警,但当时想要通过数据库杀掉非活跃会话连接,可是通过 SID 和 SERIAL# 查杀时很多会话已经不存在了。那么当时采取的办法就是通过操作系统 kill 查杀了,又因为活跃会话很少无事务,便使用如下命令全部查杀了。
注意:生产系统中谨慎操作,尤其是有大事物时不能直接查杀。
ps -ef | grep LOCAL=NO | grep -v grep | awk '{print $2}' | wc -l
ps -ef | grep LOCAL=NO | grep -v grep | awk '{print $2}' | xargs kill -9

查杀后连接数下降数据库告警恢复,算是告一段落了,没有深入问题根源。

二、问题复现
    第二天早上十点多,还在查看另一系统的性能问题时,有人告知此系统又有问题,无疑又是连接数问题,登陆到系统后查看果不其然。两个节点的连接数已达 1800 多,通过操作系统 kill -9 紧急杀掉会话后数据库连接数下降,但是出现问题时还没达到阈值,肯定还有其他没有来得及的问题存在,这个便要后续排查了。

三、问题排查
    发现此数据库内存管理是自动管理的,SGA、PGA 设置的值不合理,当出现大量连接时,PGA  设置不合理,新的会话连接则会出现问题应用方反馈出性能问题;另外大量非活跃会话未释放也没有从数据库端限制,未设置超时连接 SQLNET.EXPIRE_TIME 参数。
Dead Connection Detection(DCD)
    SQLNET.EXPIRE_TIME: 设置 DCD 检测时间为 1 分钟。指定时间间隔(以分钟为单位),以发送探测以验证客户端/服务端连接处于活动状态。设置一个大于 0 的值可确保不会由于客户端异常终止而无限期地断开连接。
Dead Connection Detection (DCD)与Inactive Sessions
.

    于是乎则在两个节点中均设置 SQLNET.EXPIRE_TIME=1,这个参数在 RAC 中则需要设置到 Oracle 用户下 $ORACLE_HOME/network/admin/sqlnet.ora 文件中。还有个问题就是不确定这个参数到底是设置到哪个用户下的话,可以Oracle、grid 两个用户都设置了总有一个会生效。

  设置完后我这边又通过数据库杀掉了一些连接,通过拼接 SQL 杀掉一个小时前的非活跃会话及非后台进程会话。但是发现数据库中出现 KILLED 会话达 594 个。会话没有得到释放,节点二便采用系统层面的 kill -9 杀掉会话。


    后面应用方根据建议设置了中间件 Weblogic 连接池超时为 180s 最小连接数为 1 后,节点一 KILLED 也得到了释放,数据库的连接也下降到 400 左右了,算是一个正常范围值。


内存调整
     前面说过内存管理为自动管理,这里需要将其调整为手动管理,由于是生产环境不能够随时重启则需要停机窗口,这里先将需要调整的内存参数以及合理的值列出来。

    AIX 操作系统内存 64G,数据库内存 38.25G,将其调整为 30G,PGA 调整为 14G,shared_pool 5G,db_cache 15G,large_pool 1G,java_pool128G,streams_pool 256M。这些值都是一个近似的值,一个较为合理的值,并不保证 100% 完美正确,在 AWR 报告中 Advisory Statistics 部分,也会有相关的建议值,如下便是一个较为合理的 shared_pool 的值。设置完这些值后重启数据库系统,将会有一个很大的提升。利用 Profile 超时设置,这个没有使用过,网上有方法便晚上回来测试一番 。首先查询数据库是否开启 resource limit 限制,如果没有开启,则开启这个参数。

然后使用客户端工具 SQLPlus 远程连接,查询业务数据等待 1 分钟后在继续查询则会报错 ORA-02396。

打赏鼓励作者,期待更多好文!

打赏
1人已打赏

guafeng00 发表于 2020-11-29 10:31
  
学习学习
llj 发表于 2020-11-29 15:20
  
感谢分享
gqce 发表于 2020-11-30 09:04
  
感谢分享
暗夜星空 发表于 2020-12-7 10:07
  
美好潼年 发表于 2020-12-10 11:10
  
有助工作,感谢分享
暗夜星空 发表于 2020-12-12 13:07
  
多谢分享
小鱼儿 发表于 2023-8-8 19:42
  

感谢分享,有助工作
唐三平 发表于 2023-8-8 19:43
  

感谢分享,有助工作
鲤鲤 发表于 2023-8-8 20:10
  
感谢分享,有助于工作
发表新帖
热门标签
全部标签>
每日一问
2024年技术争霸赛
安装部署配置
技术盲盒
技术笔记
干货满满
产品连连看
2023技术争霸赛专题
每周精选
信服课堂视频
功能体验
秒懂零信任
新版本体验
GIF动图学习
运维工具
技术晨报
自助服务平台操作指引
功能咨询
通用技术
问题分析处理
标准化排查
纪元平台
技术咨询
排障笔记本
华北区交付直播
畅聊IT
专家问答
技术圆桌
测试报告
每日一记
用户认证
原创分享
解决方案
VPN 对接
项目案例
地址转换
存储
技术争霸赛
深信服技术支持平台
卧龙计划
北京区每日一练
答题自测
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
日志审计
流量管理
云计算知识
sangfor周刊
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
终端接入
授权
设备维护
资源访问
虚拟机
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV

本版达人

新手89785...

本周建议达人

新手78183...

本周分享达人