Library cache lock 故障解决一例
今天收到同事电话,说是数据库中一张名为acct_balance进行操作是奇慢,第一反映是不是扫行计划有问题,结果我错了,现将过程记录下来。
用pl/sql连上数据库情况:1、对acct_balance表的查询很慢,正常少于0.1s完成,现在要60s完成;2、使用explain plan对语句进行分析,过析比正常情况下慢很多。
下面为处理过程:
1、从v$session_wait中查找有问题的wait
Sql>select event,count(*) from
v$session_wait group by event
2、如果有library cache lock时,查看lock的都是些什么语句
SELECT a.username, a.machine, a.program, a.sid,
a.serial#, a.status, c.piece, c.sql_text
FROM v$session a, v$process b,
v$sqltext c
WHERE b.addr=a.paddr AND a.sql_address=c.address(+)
and
a.sid in (select sid from v$session_wait where event = 'db file sequential
read')
and a.sid =2646
ORDER BY a.sid,c.piece
3、发现有Library语句我们需要进一步blocker会话是谁
SELECT s.sid, kglpnmod "Mode", kglpnreq "Req", SPID "OS
Process"
FROM v$session_wait w, x$kglpn p, v$session s ,v$process o
WHERE
p.kglpnuse=s.saddr
AND kglpnhdl=w.p1raw
and w.event like '%library cache
lock%'
and s.paddr=o.addr
结果中发现
SID Mode Req OS
Process
----------
---------- ---------- ------------
396 0 2
6381970
396 0 2
6381970
396 0 2
6381970
396 0 2
6381970
341 3 0
4092132
341 3 0
4092132
从上可以看出341以exclusive模式lock住library cache lock,为时396被迫等待,事情差不多能解决了,我直接kill了341的进程,acct_balance表恢复正常
4、故障原因:
1)主机在3月4日晚6点自动执行对地州查询用户授权时,grant和revoke语句阻塞在library cache中,造成library cache lock,阻塞进程一直停留在GRANT SELECT ON ACCT.ACCT_BALANCE TO UQRY过程中,使其它对acct_balance表访问的语句无法正常命中library cache数据,从而导致对acct_balance访问速度下降。
2)进一步对阻碍的原因进行跟踪,发现系统中存在使用plsql工具的可疑帐号,该帐号客户端名为YNTELCOM,用户名为GH@BYN,登陆时间为2010年3月4日13:00点左右,因无法抓取出该帐号操作记录,阻碍真正原因暂不确定。推断原因为:①、操作人员执行不可预知SQL语句;②、操作人员使用非正常手段退出plsql工具。
注:关连表信息
SQL> desc x$kgllk;
名称 类型
----------
-----------
ADDR RAW(4)
INDX NUMBER
INST_ID NUMBER
KGLLKADR
RAW(4)
KGLLKUSE RAW(4) ---会话地址(对应v$session的saddr)
KGLLKSES
RAW(4) ---owner地址
KGLLKSNM NUMBER
---SID
KGLLKHDL RAW(4) ---library cache object 句柄
KGLLKPNC RAW(4)
---the address of the call pin
KGLLKPNS RAW(4) ---对应跟踪文件中的session
pin值
KGLLKCNT
NUMBER
KGLLKMOD NUMBER ---持有锁的模式(0为no lock/pin
held﹐1为null,2为share﹐3为exclusive)
KGLLKREQ NUMBER ---请求锁的模式(0为no lock/pin
held﹐1为null,2为share﹐3为exclusive)
KGLLKFLG NUMBER ---cursor的状态﹐8(10g前)或2048(10g)表示这个sql正在运行﹐
KGLLKSPN NUMBER
---对应跟踪文件的savepoint的值
KGLLKHTB
RAW(4)
KGLNAHSH NUMBER ---sql的hash值(对应v$session的sql_hash_value)
KGLLKSQLID VARCHAR2(13) ---sql
ID,sql标识符
KGLHDPAR RAW(4)
---sql地址(对应v$session的sql_address)
KGLHDNSP NUMBER
USER_NAME VARCHAR2(30)
---会话的用戶名
KGLNAOBJ
VARCHAR2(60) ---对象名称或者已分析并打开cursor的sql的前60个字符
3)
x$kglpn
X$KGLPN--[K]ernel [G]eneric [L]ibrary Cache Manager object
[P]i[N]s
它是与x$kgllk相对应的表﹐是关于pin的相关信息。它主要用于解决library cache
pin
引用该表的视图有﹕
DBA_KGLLOCK
SQL> desc x$kglpn;
名称 类型
------------
----------------------------
ADDR RAW(4)
INDX NUMBER
INST_ID
NUMBER
KGLPNADR RAW(4)
KGLPNUSE RAW(4) ---会话地址(对应v$session的saddr)
KGLPNSES
RAW(4) ---owner地址
KGLPNHDL RAW(4)
---句柄
KGLPNLCK
RAW(4)
KGLPNCNT NUMBER
KGLPNMOD NUMBER ---持有pin的模式(0为no lock/pin
held﹐1为null,2为share﹐3为exclusive)
KGLPNREQ NUMBER ---请求pin的模式(0为no lock/pin
held﹐1为null,2为share﹐3为exclusive)
KGLPNDMK NUMBER
KGLPNSPN NUMBER
---对应跟踪文件的savepoint的值
----------------------
x$kglpn kglpnuse 会话的saddr KGLLKMOD
持有的锁 KGLPNREQ
请求锁模式
x$kgllk
kgllkuse 会话的saddr
KGLPNMOD持有的锁 KGLLKREQ
请求锁模式
Kglhdlmd是Library cache
lock的模式,为0时表示没有锁,1是NULL锁,2是共享锁,3是独占锁。Kglhdpmd是Library cache
pin的模式,0是没有Pin,2是共享Pin,3是独占Pin
x$kgllk
KGLLKSNM NUMBER
---SID
-----------------------------------------x$kglob
父游标、子游标都有记录
kglhdadr:
本记录游标地址
kglhpadr:
父游标地址
kglhdobj:LIBRARY OBJECT(代表 library object
handle 的物理地址)
kglobhd0:heap0
的地址
......
kglobhd7:heap7的地址
一个sql语句至少有一个子游标,所有在x$kglob里至少有2个library cache
object
一个sql的library cache
至少有2个堆heap 0 heap
6
Library cache lock 故障解决一例的更多相关文章
- 一次library cache pin故障的解决过程
内容如下: 今天接到同事的电话,说他的一个存储过程已经run了一个多小时了,还在继续run,他觉得极不正常,按道理说不应该run这么长时间. 我说那我去看一下吧. 这个库是一个AIX上的10.2.0. ...
- 深入理解shared pool共享池之library cache的library cache lock系列四
本文了解下等待事件library cache lock,进一步理解library cache,之前的文章请见: 深入理解shared pool共享池之library cache的library ca ...
- Library cache lock/pin详解
Library cache lock/pin 一.概述 ---本文是网络资料加metalink 等整理得来一个实例中的library cache包括了不同类型对象的描述,如:游标,索引,表,视图,过程 ...
- 如何使用event 10049分析定位library cache lock and library cache pin
Oracle Library Cache 的 lock 与 pin 说明 一. 相关的基本概念 之前整理了一篇blog,讲了Library Cache 的机制,参考: Oracle Library c ...
- rac数据库默认sql tuning advisor,导致大量library cache lock
rac数据库默认sql tuning advisor,导致大量library cache lock 问题现象:客户反映周六周日固定十点钟,一个程序会特别慢(大概10分钟),平时1到2秒.查看当时的日志 ...
- impdp时卡住,DW等待library cache lock
同事反映impdp时在SCHEMA_REPORT/TYPE/TYPE_SPEC步骤卡住,1个多小时后也没有响应, 查下v$session: select program,sid, event,bloc ...
- Library Cache: Lock, Pin and Load Lock
What is "Library cache lock" ? This event controls the concurrency between clients of the ...
- library cache lock和cursor: pin S wait on X等待
1.现象: 客户10.2.0.4 RAC环境,出现大量的library cache lock和cursor: pin S wait on X等待,经分析是由于统计信息收集僵死导致的.数据库在8点到9点 ...
- Performance tuning library cache lock & single-task message
My colleague suddenly encountered a problem today,a Database becomes very slow , and the a lot of se ...
随机推荐
- Monkey的简单自动化
手机测试都逃避不了Monkey,但每次都是手动跑Monkey,自己导出包来,一条条的手动输入命令. 现在轮到我去执行这些任务,觉得很是繁琐,于是写了这个脚本,自动读取导出的包名,一键回车搞定. 代码如 ...
- GTK+中的构件II(Widgets)
GTK+中的构件II(Widgets) GTK+中的构件II(Widgets) 在本章的GTK+程序设计中,我们仍然要继续向大家介绍和展示各种各样的构件. GtkComboBox GtkComboBo ...
- P.V操作【转】
阐述P,V原语的理论不得不提到的一个人便是赫赫有名的荷兰科学家 E.W.Dijkstra.如果你对这位科学家没有什么印象的话,提起解决图论中最短路径问题的Dijkstra算法应当是我们再熟悉不过的了. ...
- [codevs3295]落单的数
题目描述 Description 有n个数(n是奇数),其中n-1个数两两成对,有1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度 输入描述 Input Description ...
- CodeForces 361B Levko and Permutation
题意:有n个数,这些数的范围是[1,n],并且每个数都是不相同的.你需要构造一个排列,使得这个排列上的数与它所在位置的序号的最大公约数满足 > 1,并且这些数的个数恰好满足k个,输出这样的一个排 ...
- 改进的SMO算法
S. S. Keerthi等人在Improvements to Platt's SMO Algorithm for SVM Classifier Design一文中提出了对SMO算法的改进,纵观SMO ...
- 解决 Provider 'System.Data.SqlServerCe.3.5' not installed. -摘自网络
在64位机器上开发,如果使用到SqlServerCe的话,那么很可能会碰到这个问题,问题有两个方面: 1.如提示所云,没有安装SqlServerCe,只要去微软下载就好了. 2.系统已经安装SqlSe ...
- 一切皆WEB
所有应用都应该成为Web应用吗?当然不是.总有一些重要的例外,有些种类的软件跟网络也毫无关系.但是,这些是少数情况,是一些特殊应用.它们固然是重要的小生态环境,但不管怎么说,就只是“小生态”. 如果你 ...
- javabean以及内省技术详解(转)
一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...
- [Android]Fragment源代码分析(二) 状态
我们上一讲,抛出来一个问题,就是当Activity的onCreateView的时候,是怎样构造Fragment中的View參数.要回答这个问题我们先要了解Fragment的状态,这是Fragment管 ...