百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

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...

Rocky Linux 9/CentOS Stream 9修改网卡配置/自动修改主机名(实操)

推荐...

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系统中,设置路由通常是为了解决以下问题:该...

取消回复欢迎 发表评论: