oracle故障处理-Library Cache Lock,Library cache: mutex X
sinye56 2024-10-18 12:46 2 浏览 0 评论
故障现象:
下午业务高峰期收到反馈,客户生产一个SQL无法通过,所有的请求都卡在一个数据语句上。影响客户生产,所有业务人员都在线等待,十万火急紧急联系客户远程。根据业务人员描述,从业务系统界面看,卡住的都是在执行同一个操作,并且数据库迟迟没有返回,问题出在数据库层面。
故障处理:
1、登录数据库系统,三板斧之第一板斧头:查看等待事件。
select inst_id,event#,event, count(*)
from gv$session
where wait_class# != 6
group by 1, 4 desc;
查出来数据库当前有20个library cache lock 等待, 同时还有一个library cache:mutex X等待。心头一惊,一般情况下数据库SQL执行效率差可能是执行计划发生抖动导致,常规的等待事件是db file sequence read/write之类,通过执行计划绑定可以解决。这个library cache lock和library cache:mutex X发生在SGA的shared pool 锁竞争,在数据库配置SGA、sharedpool 配置正确的情况下一般不会产生。开发又折腾除了什么新的幺蛾子。
2、检查数据库配置,三板斧之二:检查数据库配置
客户的生产库版本是11.2.0.4 打了比较新的RU。物理内存256G。
2.1 library cache的锁竞争第一个考虑到的是库的SGA或者shared pool配置过小,检查SGA 配置有70G。同时SGA采用手动管理,db_cache配置40G, shared pool 配置15G,streams pool\large pool\java pool 分别配置5G. PGA 配置 20G. 整体数据库配置没问题。
2.2 library cache的锁竞争 还有一个怀疑是用户大规模的密码错误,可以通过event 设置'28401 trace name context forever,level 1'解决。该event参数也已经配置正常。并且再三咨询过现场人员没有人动过生产环境。
综上,配置问题可以排除,密码错误导致的锁竞争也可以排除。这两个常规的导致
3、检索文档,三板斧之三:查看AWR和alert日志
数据库alert日志没有啥异常的ORA报错。AWR分析如下:
3.1 Instance Efficiency Percentages (Target 100%)的Parse CPU to Parse Elapsd %: 0.41 异常低。
3.2 根据第一个线索,数据库CPU的解析效率如此低下是有问题的。 检查解析的错误比率
错误的解析比率占比94.59%。
至此已经破案,数据库在大量的解析执行错误的SQL语句,导致shared pool 内存锁,从而hang住整个SQL。
根据检索,找到一个相关的文档。
'Library Cache Lock', 'Library cache: mutex X' and High Parse Failures Rates with 'Error=936' (Doc ID 2515981.1)
根据文档的解决方案。设置一个数据库的10035事件,抓取错误的解析语句。
---打开10035抓取错误解析语句
ALTER SYSTEM SET EVENTS '10035 trace name context forever, level 1';
---关闭10035抓取
ALTER SYSTEM SET EVENTS '10035 trace name context off';
故障总结:
数据库打开10035抓取的一瞬间,alert日志大量的解析错误语句爆出来,还是同一个。发给研发。研发人员分析判断。程序的SQL语句中调用了一个函数,该函数会对表里面的一个字段做计算。如果该字段为空,则在函数里面会执行一个错误的SQL。同时该表的记录有二十几万,等于一次请求,没一行都会执行一个错误的SQL,从而导致数据库有大量的解析错误。最终产生library cache lock。
该函数已经存在有十几年了,开发人员写的函数对数据的考虑不全面。
相关推荐
- RHEL8和CentOS8怎么重启网络
-
本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...
- Linux 内、外网双网卡路由配置
-
1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...
- Linux——centos7修改网卡名
-
修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...
- CentOS7下修改网卡名称为ethX的操作方法
-
?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...
- Linux 网卡名称enss33修改为eth0
-
一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...
- CentOS下双网卡绑定,实现带宽飞速
-
方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...
- linux 双网卡双网段设置路由转发
-
背景网络情况linux双网卡:网卡A(ens3)和网卡B(...
- Linux-VMware设置网卡保持激活
-
Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...
- VMware虚拟机三种网络模式
-
01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...
- 2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题
-
问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...
- Linux网卡的Vlan配置,你可能不了解的玩法
-
如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...
- Centos7 网卡绑定
-
1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...
- Linux搭建nginx+keepalived 高可用(主备+双主模式)
-
一:keepalived简介反向代理及负载均衡参考:...
- Linux下Route 路由指令使用详解
-
linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)