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_numberand 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执行了编译的操作所导致

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity | 动画模块之循环滚动选项框

一、作者的话 评论区有人问&#xff0c;有没有竖排循环轮播选项框&#xff0c;我就写了一个 二、效果动画 如果不是你们想要的&#xff0c;就省的你们继续往下看了 三、制作思路 把移动分成里面的方块&#xff0c;还有背景&#xff08;父物体&#xff09;&#xff0c;方块自…

网络模拟与网络仿真

目录 一、概念界定 二、模拟&#xff08;simulation&#xff09;与仿真&#xff08;emulation&#xff09; 2.1 模拟&#xff08;simulation&#xff09; 2.2 仿真&#xff08;emulation&#xff09; 2.3 区分 三、网络模拟与网络仿真 3.1 网络模拟 3.2 网络仿真 3.…

【算法】算法题-20231206

这里写目录标题 一、非自身以外数字的乘积二、最大数三、奇数排序 一、非自身以外数字的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀…

VA05销售报表屏幕增强

业务需求&#xff1a;在VA05报表界面增强两个字段&#xff08;BELNR1/BELNR2&#xff09;. 第一步&#xff1a;扩展VA05相关表结构 由于新增的字段是按照销售订单行维度展示的&#xff0c;所以本篇加在VBAP表里&#xff08;不扩展表字段&#xff0c;直接写增强&#xff0c;会…

融云 Global IM UIKit,灵活易用的即时通讯组件设计思路和最佳实践

&#xff08;全网都在找的《社交泛娱乐出海作战地图》&#xff0c;点击获取&#x1f446;&#xff09; 融云近期推出的 Global IM UIKit&#xff0c;支持开发者高效满足海外用户交互体验需求&#xff0c;且保留了相当的产品张力赋予开发者更多自由和灵活性&#xff0c;是实现全…

现货黄金会面临哪些风险?

进行现货黄金投资&#xff0c;我们除了要了解怎么找到交易机会以外&#xff0c;也要知道我们交易会面临哪些风险&#xff0c;了解风险就是做到知己知彼&#xff0c;了解风险才能控制风险。控制住风险&#xff0c;才能为我们稳定盈利打好基础&#xff0c;那么下面我们就来看看在…

ESP32-Web-Server编程-在网页中插入图片

ESP32-Web-Server编程-在网页中插入图片 概述 图胜与言&#xff0c;在网页端显示含义清晰的图片&#xff0c;可以使得内容更容易理解。 需求及功能解析 本节演示在 ESP32 Web 服务器上插入若干图片。在插入图片时还可以对图片设置一个超链接&#xff0c;用户点击该图片时&a…

Oracle merge into语句(merge into Statement)

在Oracle中&#xff0c;常规的DML语句只能完成单一功能&#xff0c;&#xff0c;例如insert/delete/update只能三选一&#xff0c;而merge into语句可以同时对一张表进行更新/插入/删除。 目录 一、基本语法 二、用法示例 2.1 同时更新和插入 2.2 where子句 2.3 delete子句 2.4…

Gitee项目推荐-HasChat

最近由于使用的局域网通信工具总是出问题&#xff0c;就在考虑有没有好的替代品。搜索了一番&#xff0c;发现这个还不错&#xff1a; HasChat: 一款极简聊天应用&#xff0c;比较完整&#xff0c;略好看 页面简洁&#xff0c;功能也比较齐全&#xff0c; 感兴趣的小伙伴可以…

【Redis】redis 高性能--线程模型以及epoll网络框架

目录 一.前言 二.多线程的弊端 2.1 锁的开销问题 2.2 多线程上下文切换带来的额外开销 2.3 多线程占用内存成本增高 三.基本IO模型与epoll 模式 3.1 基本IO模型 3.2 单线程处理机制 四.总结 一.前言 我们经常讨论到&#xff0c;redis 是单线程&#xff0c;那为什么单线…

sizeof()、strlen()、length()、size()的区别(笔记)

​ 上面的笔记有点简陋&#xff0c;可以看一下下面这个博主的&#xff1a; c/c中sizeof()、strlen()、length()、size()详解和区别_csize,sizeof,length_xuechanba的博客-CSDN博客

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

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

xxljob学习笔记02(小滴课堂)

分布式调度参数传递和调度日志配置讲解 可以设置任务参数。 代码层面&#xff1a; 可以这样传递参数。 我们在xxljob页面去设置参数&#xff1a; 我们执行一次任务&#xff1a; 我们这里就拿到了参数。 这样我们就能拿到参数了。 日志打印&#xff1a; 在代码中也可以实现&…

GPT-Crawler一键爬虫构建GPTs知识库

GPT-Crawler一键爬虫构建GPTs知识库 写在最前面安装node.js安装GPT-Crawler启动爬虫结合 OpenAI自定义 assistant自定义 GPTs&#xff08;笔者用的这个&#xff09; 总结 写在最前面 GPT-Crawler一键爬虫构建GPTs知识库 能够爬取网站数据&#xff0c;构建GPTs的知识库&#xf…

npm : 无法加载文件 D:\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。

今天在使用vscode下载项目的依赖时&#xff0c;输入 pnmp install,结果报错: npm : 无法加载文件 D:\nodejs\node_global\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。原因&#xff1a; 因为在此系统上禁止运行脚本&#xff0c;也就是说没有权限&#xff0c;查一下&#…

CoreDNS实战(十一)-分流与重定向

本文主要介绍了目前CoreDNS服务在外部域名递归结果过程中出现的一些问题以及使用dnsredir插件进行分流和alternate插件进行重试优化的操作。 1 自建DNS服务现状 一般来说&#xff0c;无论是bind9、coredns、dnsmasq、pdns哪类dns服务器&#xff0c;我们自建的监听在UDP53端口…

AI 绘画 | Stable Diffusion LCM和FP8 显存不足的福音

前言 在我们使用Stable Diffusion 作画的时候,普通用户因为电脑显存配置过低,经常会出现爆显存和出图慢的困扰。而SD-WebUI在显存优化方便不如ComfyUI和Fooocus,但是也有一些弥补SD-WebUI显存问题的方案,那就是LCM和FP8。 LCM 教程 简介 LCM 是一个用于 Stable Diffusio…

[组合数学]LeetCode:2954:统计感冒序列的数目

作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 题目 给你一个整数 n 和一个下标从 0 开始的整数数组 sick &#xff0c;数组按 升序 排序。 有 n 位小朋友站成一排&#xff0c;按顺序编号为 0 到 n - 1 。数组 sick 包含一开始得了感冒的小朋友的位置。如果位…

Python下TCP编程

​ 在Python中使用socket模块的socket函数可以完成&#xff0c;语法格式如下&#xff1a; ssocket.socket(AddressFamily, Type)函数socket.socket创建一个socket&#xff0c;返回该socket的描述符。该函数带有两个参数。 Address Family&#xff1a;可以选择AF_INET&#xf…

Kafka 消费者 API 指南:深入探讨消费者的实现与最佳实践

Kafka 消费者 API 是连接应用程序与 Kafka 集群之间的关键接口&#xff0c;用于从 Kafka 主题中拉取消息并进行处理。本篇文章将深入探讨 Kafka 消费者 API 的核心概念、用法&#xff0c;以及一些最佳实践&#xff0c;帮助你构建高效、可靠的消息消费系统。 1. Kafka 消费者 A…