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

问题:

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

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

问题分析:

        首先查询数据库当前节点的历史使用最大连接数以及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,因此,连接数异常上涨期间应用无法正常请求连接数据库的原因应该为数据库出现连接堆积,导致应用连接池连接耗尽无法正常请求连接数据库

        接下来,分析数据库连接出现堆积上涨的原因,查看问题时间段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等待

        查看是否有直接的堵塞会话指向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

       ​查看被堵塞的会话执行的语句,分析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;

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

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

        查看包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';

        查看问题时间段所有会话的操作类型,有一个重大的发现里面出现了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;

        查看这个执行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;

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

问题解决:

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

        所以,切记!生产无小事,三思而后行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/221728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6页手写笔记总结信号与系统常考知识大题知识点

题型一 判断系统特性题型二 求系统卷积题型三 求三大变换正反变换题型四 求全响应题型五 已知微分方程求系统传递函数题型六 已知系统的传递函数求微分方程题型七 画出系统的零极点图&#xff0c;并判断系统的因果性和稳定性 &#xff08;笔记适合快速复习&#xff0c;可能会有…

Spring-AOP

目录 一、引入AOP 二、核心AOP概念和术语 三、切点表达式 四、Spring实现AOP &#xff08;一&#xff09;AspectJ的支持 1 、基于注解开发 1.1 引入依赖 1.2 实现目标类 1.3 定义切面类&#xff08;日志管理&#xff09; 1.4 将目标类和切面类纳入Spring容器 1.5 开…

分布式搜索引擎(Elastic Search)+消息队列(RabbitMQ)部署

一、分布式搜索引擎&#xff1a;Elastic Search Elastic Search的目标就是实现搜索。是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。在数据量少的时候&#xff0c;我们可以通过索引去搜索关系型数据库中的数据&#xff0c;但是如果数…

MySQL-含json字段表和与不含json字段表查询性能对比

含json字段表和与不含json字段表查询性能对比 说明: EP_USER_PICTURE_INFO_2:不含json字段表 20200729json_test:含有json字段表 其中20200729json_test 标准ID、MANAGER_NO、PHONE_NO 为非json字段 data为json字段 2个表中MANAGER_NO、PHONE_NO都创建了各自的索引 测试…

iphone/安卓手机如何使用burp抓包

iphone 1. 电脑 ipconfig /all 获取电脑网卡ip&#xff1a; 192.168.31.10 2. 电脑burp上面打开设置&#xff0c;proxy&#xff0c;增加一条 192.168.31.10:8080 3. 4. 手机进入设置 -> Wi-Fi -> 找到HTTP代理选项&#xff0c;选择手动&#xff0c;192.168.31.10:8080 …

gitlab注册无中国区电话验证问题

众所周知gitlab对中国区不友好&#xff0c;无法直接注册&#xff0c;页面无法选择86的手机号进行验证码发送。 Google上众多的方案是修改dom&#xff0c;而且时间大约是21年以前。 修改dom&#xff0c;对于现在的VUE、React框架来说是没有用的&#xff0c;所以不用尝试。 直接看…

the name of a constructor must match the name of the enclosing class

构造器名匹配封闭类名 命令码的位置关系不对 解决&#xff1a;调整 命令码所在层级

pandas详细笔记

一&#xff1a;什么是Pandas from matplotlib import pyplot import numpy as np import pandas as pdarange np.arange(1, 10, 2) series pd.Series(arange,indexlist("ABCDE")) print(series)二&#xff1a;索引 三&#xff1a;切片 位置索引切片&#xff08;左闭…

排序的概念及其运用

1.排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序…

华清远见嵌入式学习——C++——作业6

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;class Animal { public:virtual void perform() 0;};class Lion:public Animal { private:string foods;string feature; public:Lion(){}Lion(string foods,string feature):foods(foo…

SpringBoot_02

Web后端开发_07 SpringBoot_02 SpringBoot原理 1.配置优先级 1.1配置 SpringBoot中支持三种格式的配置文件&#xff1a; application.propertiesapplication.ymlapplication.yaml properties、yaml、yml三种配置文件&#xff0c;优先级最高的是properties 配置文件优先级…

PET(Point-Query Quadtree for Crowd Counting, Localization, and More)

PET&#xff08;Point-Query Quadtree for Crowd Counting, Localization, and More&#xff09; 介绍实验记录训练阶段推断阶段 介绍 论文&#xff1a;Point-Query Quadtree for Crowd Counting, Localization, and More 实验记录 训练阶段 TODO 推断阶段 下面是以一张输…

图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理

一、场景案例 在一张社区网络里&#xff0c;可能需要查询出各个顶点邻接关联的顶点集合&#xff0c;类似查询某个人关系比较近的都有哪些人的场景。 在用Spark graphx中&#xff0c;通过函数collectNeighbors便可以获取到源顶点邻接顶点的数据。 下面以一个例子来说明&#…

C语言之程序的组成和元素格式

目录 关键字 运算符 标识符 姓名和标识符 分隔符 常量和字符串常量 自由的书写格式 书写限制 连接相邻的字符串常量 缩进 本节我们来学习程序的各组成元素&#xff08;关键字、运算符等&#xff09;和格式相关的内容。 关键字 在C语言中&#xff0c;相if和else这样的标识…

Arduino学习笔记2023年11月30日

目录 1 编程软件下载2 代码结构3 IO引脚控制3.1 引脚初始化3.2 引脚使用数字量输出数字量输入模拟量输出模拟量输入 4 串口串口初始化串口输出串口输入 5 外部中断6 函数6.1 映射区间函数6.2 延时函数 总结 1 编程软件下载 官网链接&#xff1a;https://www.arduino.cc/ 下载链…

python学习:opencv+用鼠标画矩形和圆形

目录 步骤 定义数据 新建一个窗口黑色画布 显示黑色画布 添加鼠标回调函数 循环 一直显示图片 一直判断有没有按下字母 m 关闭所有窗口 鼠标回调函数 步骤 当鼠标按下记录坐标并记录鼠标标记位为true&#xff0c;移动的时候就会不断的画矩形或者圆&#xff0c;松下的时候就再…

Apache Doris 在某工商信息商业查询平台的湖仓一体建设实践

本文导读&#xff1a; 信息服务行业可以提供多样化、便捷、高效、安全的信息化服务&#xff0c;为个人及商业决策提供了重要支撑与参考。本文以某工商信息商业查询平台为例&#xff0c;介绍其从传统 Lambda 架构到基于 Doris Multi-Catalog 的湖仓一体架构演进历程。同时通过一…

CC++内存管理方式

文章目录 1. C/C内存分布总结 C语言中动态内存管理C内存管理方式new/delete操作内置类型new和delete操作自定义类型c推荐是用new和deleteoperator new与operator delete函数 定位new 1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int static…

用Python手把手教你WordCloud可视化

目录 WordCloud是什么&#xff1f; 具体使用 总结 WordCloud是什么&#xff1f; WordCloud是一种数据可视化技术&#xff0c;通过根据文本中单词的频率或权重来生成一个视觉上吸引人的词云图。在词云图中&#xff0c;单词的大小和颜色通常与其在文本中的出现频率相关&#…

STM32F1外部中断EXTI

目录 1. EXTI简介 2. EXTI基本结构 3. AFIO复用IO口 4. EXTI框图 5. EXTI程序配置 5.1 首先先配置要使用的GPIO口的引脚 5.2 配置AFIO数据选择器&#xff0c;选择想要中断的引脚 5.3 EXTI配置 1. EXTI简介 EXTI&#xff08;Extern Interrupt&#xff09;外部中…