`

查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL

 
阅读更多
查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL
数据库阻塞检查处理方法
当应用服务器发生阻塞时(特别是集群1),应先按下面方法检查数据库,以判明应用服务器阻塞是否由数据库阻塞引起。
如果 select * from dba_waiters 有输出,转 阻塞情形A ;
如果 SELECT * FROM v$session_wait WHERE event LIKE 'library%' 有输出,转 阻塞情形B ;
ELSE 马上联系DBA。
阻塞情形A:
1、查看dba_waiters
select * from dba_waiters
发现有大量的等待session。如果无输出,数据库应没有问题。

2、查看等待事件情况
select p.spid pid,
s.sid,
s.SERIAL#,
s.username,
event,
w.p1,
w.P1TEXT,
w.p2,
w.P2TEXT,
w.p3,
w.P3TEXT,
sq.SQL_TEXT,
w.WAIT_TIME,
w.SECONDS_IN_WAIT,
w.STATE
from v$session_wait w, v$session s, v$process p, v$sql sq
where event not like 'SQL%' and w.sid = s.sid and s.paddr = p.addr and
s.SQL_ADDRESS = sq.ADDRESS and s.SQL_HASH_VALUE = sq.HASH_VALUE
发现有大量EVENT列的值是enqueue的记录。

3、查看锁等待情况
SELECT lpad(' ', DECODE(request, 0, 0, 1)) || sid sess,
id1,
id2,
lmode,
request,
type
FROM V$LOCK
WHERE id1 IN (SELECT id1 FROM V$LOCK WHERE lmode = 0)
ORDER BY id1, request
检查是否存在lmode为3的记录,发现session 441把持着一个个DML级的三级锁(存在一条sess=441,lmode=3的记录)

4、查看sid 为441的session情况,记录以下输出并发出到公告版:
select p.SPID, s.*
from v$session s, v$process p
where sid in (441) and p.ADDR = s.PADDR
SPID SID SERIAL#
26358 441 47439

查看该session的用户名、机器名、程序名、执行的sql等信息:
SELECT a.username,
a.machine,
a.program,
a.sid,
a.serial#,
a.status,
c.piece,
c.sql_text
FROM v$session a,
v$sqltext c
WHERE a.sid = <SID>
and a.sql_address=c.address(+)
ORDER BY c.piece
查看该session锁住的对象:
select b.object_name, a.* from v$locked_object a, dba_objects b
where session_id = <SID> and a.object_id = b.object_id
and a.locked_mode = 3
--查看是否有其他进程block这些进程
select * from dba_waiters WHERE waiting_session IN (XXX)
--查看这些session在等待什么事件
SELECT * FROM v$session_wait WHERE sid IN (XXX)
SQL*Net message from client 为 等待和客户端的通讯
5、杀掉sid为441的session

alter system kill session '441,47439';(其中441,47439分别是第四步查出的SID和SERIAL#的值)


6、如果第五步不成功,就需要在操作系统下终止进程。

kill -9 26358 (其中26358 是第四步查出SPID的值)

处理完成后,select * from dba_waiters无记录返回,数据库恢复正常。
阻塞情形B:
[一、分析解决过程]
1。查询发现数据库中有大量的library cache pin等待
SELECT * FROM v$session_wait WHERE event LIKE 'library%'
SID SEQ# EVENT P1TEXT P1
49 10781 library cache pin
75 60508 library cache pin
71 56470 library cache pin
...
2。分析library cache pin在等待的对象,发现是p_zs_bdsp_gb
SELECT kglnaown "Owner", kglnaobj "Object",sw.P1RAW
FROM x$kglob p,v$session_wait sw
WHERE p.kglhdadr=sw.P1RAW and sw.SID=987
db_zgxt p_zs_bdsp_gb 00000008E9AC7710
3。随便选等待中的一个session,查找引起library cache pin等待的session。发现其他session都在等待173
SELECT s.sid, kglpnmod "Mode", kglpnreq "Req"
FROM x$kglpn p, v$session s,V$SESSION_WAIT SW
WHERE p.kglpnuse=s.saddr
AND P.kglpnhdl=sw.P1RAW AND Sw.SID=987 order by mode desc
SID Mode Req
173 3 0
1224 0 2
1322 0 2
692 0 2
...
4。查找173的等待情况,发现它也是在等待library cache pin。
SELECT * FROM v$session_wait WHERE sid= 173
173 5502 library cache pin handle address 38280132368 00000008E9AC7710
5。继续查找是哪个session引起173的等待,发现是121
SELECT s.sid, kglpnmod "Mode", kglpnreq "Req"
FROM x$kglpn p, v$session s,V$SESSION_WAIT SW
WHERE p.kglpnuse=s.saddr
AND P.kglpnhdl=sw.P1RAW AND Sw.SID=173
121 2 0
173 0 3
6。查找121的session等待情况,发现它是在等待SQL*Net message from client,这是客户端和服务器之间
的通讯。因此可判定121是引起一系列等待的原因。
SID SEQ# EVENT P1TEXT P1 P1RAW
121 22946 SQL*Net message from client

7。查看121session的情况
select p.spid,s.* from v$session s ,v$process p where s.paddr=p.addr and S.sid in (121)
25645 00000008D5364860 121 89 3844244 00000008D438D518 40 DB_ZGXT 2 2147483644 00000008E130CDA0 ACTIVE DEDICATED 40 DB_ZGXT weblogic app02
8。在操作系统中发现25645进程(也即是121session)已经运行了6个多小时。
[db2:oracle2]prstat
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
25645 oracle2 24G 13G cpu194 0 0 6:16:02 2.3% oracle/2
9946 oracle2 24G 13G sleep 60 0 0:24:33 2.1% oracle/2
9。杀掉session 121后,应用恢复正常。
SQL> alter system kill session '121,89';
alter system kill session '121,89'
*
ERROR at line 1:
ORA-00031: session marked for kill
[db2:oracle2]kill -9 25645
------------------------
----------------------------------------------------------
-- 查找使用了什么语句,这个不一定有用(对于等待commit/rollback)
-- 的操作失效
select st.SQL_TEXT
from v$sqltext st,
v$session si
where st.ADDRESS = si.SQL_ADDRESS
and st.HASH_VALUE = si.SQL_HASH_VALUE
and si.SID in ()
order by st.PIECE
----------------------------------------------------------
-- 查找锁的类型、锁住的对象
select distinct lk.TYPE,lk.LMODE,do.owner || '.' || do.object_name
from v$lock lk,
v$locked_object lo,
dba_objects do
where do.object_id = lo.OBJECT_ID
and lo.SESSION_ID = lk.SID
and lk.SID in ()
分享到:
评论

相关推荐

    查询当前阻塞死锁.sql

    脚本查询当前数据库阻塞,阻塞会话事物,进程,锁类型等

    Oracle经典SQL语句

    ORACLE经典语句汇总 ...Oracle中恢复某张表丢失数据的方法 -- 把SELECT出来的结果导到一个文本文件中 -- 查询新建用户 -- 查询那些用户,操纵了那些表造成了锁机 --看锁阻塞的方法 --ORACLE获得系统信息

    查找阻塞进程sql

    查找阻塞进程sql的方法,查找阻塞进程sql的方法,减少死锁

    Oracle锁和阻塞原理解析.pdf

    Oracle锁和阻塞原理解析.pdf 了解锁和阻塞是 oracle troubleshooting 必备的技能;在说锁和阻塞之前,我们先了解下 并发(concurrency)和并行(parallel)。并发意思是在数据库中有超过两个以上用户对同样的数 据做修改...

    数据库阻塞监控工具(SQLSERVER和ORACLE)

    数据库阻塞监控工具(SQLSERVER和ORACLE)

    如何定位Oracle数据库被锁阻塞会话的根源?

    首先再次明确下,数据库因为要同时保证数据的并发性和一致性,所以操作有锁等待是正常的。  只有那些长时间没有提交或回滚的事物,阻塞了其他业务正常操作,才是需要去定位处理的。  1. 单实例环境  实验环境...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

    Oracle数据库调优之-SQL执行计划粗解

    但是无论用什么办法调优,都必须要先读懂SQL的执行计划,了解应用程序的SQL的性能瓶颈在哪里,才可以进行有效的调优! 举个实际的应用场景,如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统性能...

    ORACLE重建索引总结

    3、以删除的叶节点数量:指得是数据行的delete操作从逻辑上删除的索引节点 的数量,要记住oracle在删除数据行后,将 “ 死 “ 节点保留在索引中,这样做可以加快sql删除操作的速度,因此oracle删除数据行后可以不必...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    第2章 锁和阻塞 20 2.1 关于锁 20 2.2 锁和阻塞 22 2.3 引起阻塞的其他情况 30 2.3.1 select for update 30 2.3.2 外键和索引 36 第3章 latch和等待 44 3.1 共享池中的latch争用 45 .3.2 数据缓冲池latch争用 54 ...

    常用sql整理

    1、base64解码.txt 2、行转列.txt 3、列转行.txt 4、BULK INSERT.txt 5、双色球.txt 6、删除完全重复数据.txt 7、快速备份.txt ...20、oracle查看锁.txt 21、join_str.txt 22、cpu time.txt 23、IO情况.txt 等等

    oracle 内存分析

    oracle 内存分析 转载 www.hellodba.com

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part1.rar

    第2章 锁和阻塞 20 2.1 关于锁 20 2.2 锁和阻塞 22 2.3 引起阻塞的其他情况 30 2.3.1 select for update 30 2.3.2 外键和索引 36 第3章 latch和等待 44 3.1 共享池中的latch争用 45 .3.2 数据缓冲池latch争用 54 ...

    数据库中堵塞事件处理

    --数据库中堵塞事件排序 --根据hash_value查询具体SQL

    oracle学习经典教程

    1.1.3 在OLAP 系统中,常使用分区技术、并行技术....26 1.1.4 分开设计与优化..........................27 1.2 索引详解..................28 1.2.1 索引介绍.........28 1.2.1.1 索引的创建语法.........

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    目录回到顶部↑第1章 开发成功的Oracle应用 1 1.1 我的方法 2 1.2 黑盒方法 4 1.3 开发数据库应用的正确(和不正确)方法 8 1.3.1 了解Oracle体系结构 8 1.3.2 理解并发控制 14 1.3.3 多版本 19 1.3.4 数据库...

    oracle系统状态trace文件分析器

    oracle系统状态trace文件分析器 当系统hang住时,或者进程间有阻塞时,你可以产生下面两种跟踪文件,一种是进程状态跟踪文件,一种是系统状态跟踪文件:  process state dumps ==&gt; 一个进程的所有对象状态,...

    TianleSoftware Oracle中文学习手册

    在Oracle 几年的学习中,做了很多的实验,也遇到了很多的问题, 在这个过程中,积累了一些学习文档。也更新到了blog上。 因为太多,不便于查阅。 根据自己对 Oracle 的理解,把这些 blog 进行了分类,并进行了一些...

    管理员日常工作中必备的sql

    数据文件的I/O分布 查会话的阻塞 查看内存中存的使用 …………

    Oracle编程艺术

    3.4.2 Oracle数据库中的存储层次体系..............................................181 3.4.3 字典管理和本地管理的表空间..................................................186 3.5 临时文件..........

Global site tag (gtag.js) - Google Analytics