Oracle-数据库连接数异常上涨问题分析

这篇具有很好参考价值的文章主要介绍了Oracle-数据库连接数异常上涨问题分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题:

        用户的数据库在某个时间段出现连接数异常上涨问题,时间持续5分钟左右,并且问题期间应用无法正常连接请求数据库

        从连接数的监控上可以看到数据库平常峰值不到100个连接,在问题时间段突然上涨到400以上

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

问题分析:

        首先查询数据库当前节点的历史使用最大连接数以及process参数的配置,推算问题时间段数据库的连接数是否已经达到上限,从而导致应用无法正常连接请求数据库

---手动创建快照,确保负载数据写入历史ash
exec dbms_workload_repository.create_snapshot();
---查询process参数历史最大值
select b.instance_number,b.begin_interval_time,b.end_interval_time,a.RESOURCE_NAME,a.CURRENT_UTILIZATION,a.MAX_UTILIZATION,a.LIMIT_VALUE 
    from DBA_HIST_RESOURCE_LIMIT a,dba_hist_snapshot b 
    where a.snap_id=b.snap_id and a.dbid=b.dbid and a.resource_name in('processes','sessions') and a.instance_number=b.instance_number
    and b.begin_interval_time>to_date('2023/11/27 12:00:00','yyyy/mm/dd hh24:mi:ss') and b.begin_interval_time<to_date('2023/11/27 15:30:00','yyyy/mm/dd hh24:mi:ss')
  order by b.instance_number,b.begin_interval_time
     ;

        可以看到数据库的历史最大连接数为669,数据库参数process配置为1500,alert日志页没看到ORA-00020:maximum number of processes (xxx) exceeded的报错,也就是说问题时间段数据库的连接数并没有达到上限,询问用户应用的连接池配置,得到回复是连接池最大连接为500,低于数据库的历史最大连接数为669,因此,连接数异常上涨期间应用无法正常请求连接数据库的原因应该为数据库出现连接堆积,导致应用连接池连接耗尽无法正常请求连接数据库

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

        接下来,分析数据库连接出现堆积上涨的原因,查看问题时间段ASH里面的等等事件情况,通过等待事件评估可能的原因以及下一步的分析方向

---查看某个时间段的等待事件数量
select event,count(*)
from v$active_session_history a
where sample_time between timestamp '2023-11-27 14:20:00' and timestamp '2023-11-27 14:25:00'
group by event;
;
---查看某个等待事件的每分钟数量
select to_char(sample_time,'yyyy-mm-dd hh24:mi'),event,count(*)
from v$active_session_history a
where sample_time between timestamp '2023-11-27 14:20:00' and timestamp '2023-11-27 14:25:00' and event='library cache pin'
group by to_char(sample_time,'yyyy-mm-dd hh24:mi'),event
order by 1;
​

        可以看到问题时间段,数据库等待事件library cache pin在5分钟内出现了54885次等待,短时间内出现这么高的等待肯定是有问题的,并且从等待事件的类型以及经验来看,极有可能是由于存储过程,函数这类PL/SQL对象被某个会话独占持有所导致

        注:library cache pin等待一般是指会话在shared pool共享池里面申请对library cache库缓存对象(比如函数,存储过程,包)进行访问调用时(pin),由于该对象正在被独占访问或是有会话正在申请独占访问,这时会话需要等待独占会话的释放,期间出现的等待事件就是library cache pin等待

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

        查看是否有直接的堵塞会话指向sid,可以看到大部份的会话的堵塞会话blocking_session都是空的,没有看到直接的堵塞源,只有出现少量的堵塞会话sid:2133,1516

​select blocking_session,blocking_session_serial#,count(*)
from v$active_session_history a
where sample_time between timestamp '2023-11-27 14:20:00' and timestamp '2023-11-27 14:25:00' and event='library cache pin'
group by blocking_session,blocking_session_serial#
order by 3

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

       ​查看被堵塞的会话执行的语句,分析TOP 3的语句调用情况

select sql_id,count(*)
from v$active_session_history a
where sample_time between timestamp '2023-11-27 14:20:00' and timestamp '2023-11-27 14:25:00' and event='library cache pin'
group by sql_id
order by 2;

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

        可以看到TOP前3个语句都同时调用了包app_interface_pkg,这说明library cache pin的争用发生在包app_interface_pkg

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

        接下来,继续分析包是否发生了修改、编译或者重建这种需要获取独占模式的操作以及执行的会话

        查看包app_interface_pkg最近一次的ddl时间以及创建时间,并没有发现在问题时间段以及近期有发生过修改、编译或者重建的操作,OS:难道分析错方向?先不管,继续往下

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select object_id,object_name,created,last_ddl_time
from dba_objects
where object_name='APP_INTERFACE_PKG';

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

        查看问题时间段所有会话的操作类型,有一个重大的发现里面出现了CREATE PACKAGE创建包的独占模式操作

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col machine for a20
select SQL_OPNAME,count(*)
from v$active_session_history a
where sample_time between timestamp '2023-11-27 13:20:00' and timestamp '2023-11-27 14:22:00'
group by SQL_OPNAME;

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

        查看这个执行CREATE PACKAGE的会话,可以看到这个会话一执行,就开始出现大面积的library cache pin等待,这个会话一消失,library cache pin等待也跟着消失,并且执行的操作应该是没有成功的,因为当时正在业务高峰期,包一直被其他会话所调用,这导致从开始到结束会话一直是在等待library cache pin去获取独占模式,而等待的会话分别是我们之前查到的sid:2133,1516,这也刚好解释了为什么之前看到包最近一次的ddl时间以及创建时间都没有发生过修改

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col machine for a20
select sample_time,a.SESSION_ID, sql_id,blocking_session,blocking_session_serial#,event,SQL_OPNAME
from v$active_session_history a
where sample_time between timestamp '2023-11-27 14:27:04' and timestamp '2023-11-27 14:27:06'
order by sample_time;

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

Oracle-数据库连接数异常上涨问题分析,数据库,oracle,dba,运维,问题分析

        到这里,问题已经变得清晰,在问题时间段有会话执行了对包app_interface_pkg的CREATE PACKAGE操作,对该包的library cache申请了独占模式,导致后续调用该包的会话都出现了library cache pin等待,最终引发了数据库会话连接堆积,应用连接池连接耗尽无法正常请求连接数据库

问题解决:

        虽然通过sql_id没有查到具体的执行语句文本,但从会话的执行程序pl/sql developer可以基本确认是人为执行的语句,将会话查到的机器名交给用户进行进一步的查找,后续得到确认在问题时间段应用运维人员确实是对包app_interface_pkg执行了编译的操作所导致

        所以,切记!生产无小事,三思而后行。文章来源地址https://www.toymoban.com/news/detail-754860.html

到了这里,关于Oracle-数据库连接数异常上涨问题分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openGauss学习笔记-198 openGauss 数据库运维-常见故障定位案例-分析查询效率异常降低的问题

    198.1 分析查询效率异常降低的问题 198.1.1 问题现象 通常在几十毫秒内完成的查询,有时会突然需要几秒的时间完成;而通常需要几秒完成的查询,有时需要半小时才能完成。 198.1.2 处理办法 通过下列的操作步骤,分析查询效率异常降低的原因。 使用analyze命令分析数据库。

    2024年01月16日
    浏览(65)
  • 【数据库连接问题】Java项目启动时无限异常com.alibaba.druid.pool.DruidDataSource : create connection SQLException

    Java项目启动失败, ERROR:com.alibaba.druid.pool.DruidDataSource : create connection SQLException 在此之前这个SpringBoot项目中使用的是单一数据库读写策略。今天尝试使用读写分离策略,在 application.yml 配置文件中加入了以下读写分离相关内容后启动项目失败。 根据网上的解决方法,初步怀

    2024年02月16日
    浏览(44)
  • Navicat连接Oracle数据库

    打开服务里面找到Oracle服务 OracleServerXE或者OracleServerTTL  创建数据库连接 连接名默认自己起 主机选择本地 端口默认 服务名在服务中可以找到输入后缀 用户名默认都是system 密码是创建oracle时候填写的口令 点击测试连接即可

    2024年02月04日
    浏览(57)
  • Java连接Oracle数据库

    目录 第一步:导入jar包  第二步:配置数据库参数 Oracle配置参数:xml中配置 Mysql配置参数:xml方式配置 第三步:写一个工具类JDBCUtils 第四步:连接数据库 commons-dbutils-1.6.jar,jar包大家就到网上搜吧 Oracle配置参数:xml中配置 重点一: Oracle数据库的JDBC连接分为三种,服务名

    2024年02月13日
    浏览(50)
  • 【Oracle】使用 SQL Developer 连接 Oracle 数据库

    SQL Developer 是 Oracle 官方推出的一款免费的数据库开发工具,它提供了丰富的数据库开发功能,其中包括连接 Oracle 数据库的功能。 在本文中,我们将从多个方面详细阐述如何使用 SQL Developer 连接 Oracle 数据库。 在连接 Oracle 数据库前,需要需要做一些准备工作,包括安装 SQ

    2024年02月06日
    浏览(70)
  • C# 连接Oracle数据库方法

    C# 连接oracle数据库常用的三种方法有三种:     一、Oracle.ManagedDataAccess.dll:Oracle官方提供的oracle数据库访问组件,不存在其他依赖dll库,推荐该方法最为重要的是: 它 不需要安装oracle客户端,也不区分x86位和x64位 , 直接就能用,连上其他电脑或者服务端oracle数据库。  

    2023年04月22日
    浏览(36)
  • Oracle 数据库限制IP地址连接

      操作系统:Windows 或 Linux   数据库版本:Oracle Database 11.2.0.1.0 及以上版本   出于数据安全考虑,有时候需要对连接 Oracle 数据库的客户端 IP 做一些限制,只有白名单中的IP才能访问。不在白名单中的IP地址连接的时候提示:ORA-12537 TNS 连接已关闭。   1、从需要允许

    2024年02月05日
    浏览(53)
  • DBeaver连接mysql、oracle数据库

    1) 下载DBeaver https://dbeaver.io/download/,并安装 2) 新建数据库连接    3)选择mysql驱动程序  4)填写连接设置内容 5)点击 “编辑驱动设置”,并填写相关信息  6)选择本地自己下载的驱动库jar包 (也可以点击下载驱动)  7)完成后,点击测试连接,可以查看是否连接成功

    2024年02月05日
    浏览(68)
  • PLSQL连接Oracle 数据库配置详解

    1. 下载instantclient-basic-win32-11.2.0.1.0 Oracle Instant Client - Free tools and libraries for connecting to Oracle Database (oracle官网下载地址:http://www.oracle.com/technetwork/topics/winsoft-085727.html , 下载地址2:http://download.csdn.net/detail/czw2010/5732241)    2. 解压instantclient-basic-win32-11.2.0.1.0并放置在oracle安

    2024年02月07日
    浏览(59)
  • Sql server 连接 Oracle数据库

    前提预警:本机必须装有Oracle客户端 检查是否安装Oracle客户端,并检查TNS信息是否配置完成 1.1、 在cmd中执行 sqlplus ,没有报错并出现Oracle版本号,则表示Oracle已安装 1.2、配置TNS信息(最上面的10.0.0.130可随意定义,eg:test、orcl、qerghasd…) 配置ODBC数据信息 2.1、打开ODBC数据

    2024年02月03日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包