故障分析:一则library cache lock问题处理

编辑手记:library cache lock 大家都并不陌生,在MOS上对该阻塞的一般成因描述为:一般可以理解的是alter table或者alter package/procedure会以X模式持有library cache lock,造成阻塞(444560.1)。但针对具体问题仍要具体分析,今天分享一则因SQL绑定变量出现空值,导致大量子游标产生并引发library cache lock 的故障,供大家参考借鉴。

请故障现象及影响

某数据库为Oracle 11.2.0.3.9 RAC Linux 64bit,一天晚上9点左右,业务系统反应缓慢,数据库曾发现有大量library cache lock等待事件,并伴随有library cache:mutex X,导致业务系统短暂无法正常提供业务处理

问题分析

当天起发现数据库有大量librarycache lock,平均等待有1775ms ,并伴随有librarycache: mutex X。

观察ASH报告,等待library cache lock会话在执行SQL如下

对比上周同一天的AWR,这个SQL执行的次数差不多,大概半小时7万次左右,但在23号的AWR中,该SQL在Order by Version Count出现,Version Count为76(实际上在v$sql中发现有2万个 不同CHILD_ADDRESS出现),说明该SQL产生过2万个子游标。这里也看到其他SQL High Version,但由于其他SQL执行没有0pjnn575vchbg频繁,并不引发library cache lock等待。

该SQL已占用了1GB的共享池空间

结合数据库版本和环境情形,初步推断为ACS BUG引发。但在关闭ACS特性后,library cache lock等待事件与子游标依然存在。

这样排除了ACS BUG引起后。观察V$SQL_SHARED_CURSOR中大量BIND_MISMATCH,但BIND_MISMATCH根据Oracle的规则,只有5,6种不同的可能性,不至于产生2万个子游标。进一不查看V$SQL_BIND_CAPTURE发现绑定变量值中,出现异常的varchar2类型,且值为空。结合Bug 8198150 - High Versioncount with bind_mismatch with passing null value to bind (文档 ID 8198150.8),推断该SQL绑定变量时输入了空值,导致产生大量子游标。在V$SQL_BIND_CAPTURE视图中表现为VARCHAR2类型(varchar2为Oracle默认类型,null值无类型则为Oracle默认类型)。

应用做调整限制SQL绑定NULL输入后,SQL正常,无子游标产生。

处理过程总结

  • 通过故障的情况相关信息初步推断为ACS(自适应)bug引起。
  • 在关闭ACS特性后观察,SQL子游标和librarycache lock等待事件依然存在。
  • 进步分析并通过测试确认,原因由于SQL绑定变量输入null值触发BUG,导致会产生大量子游标,引发library cache lock等待。在应用代码中将null限制后SQL正常

后续工作建议

  • 应用端严格限制非合理的绑定变量时null值输入。
  • 建议给数据库打上最新PSU,避免触发各BUG,提高系统健壮性。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4737
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2665
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5576
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2192
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏落花落雨不落叶

canvas画简单电路图

63311
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

32010
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2988

扫码关注云+社区