morn_memory
作者morn_memory·2012-07-02 17:08
BI技术总监·abcdef

转 Oracle九大性能视图1

字数 8204阅读 837评论 0赞 0

SQL> desc v$lock;ITPUB个人空间2OI+K)nw|9]
 名称                                      是否为空? 类型ITPUB个人空间N u |;W.| Y
 ----------------------------------------- -------- ----------------------------
b3wY*T)T5B_$D0 ADDR                                               RAW(8)
:g)tdk]+N3Ey0 KADDR                                              RAW(8)ITPUB个人空间 W#]TEm&L
 SID                                                NUMBER
iOq)GX0 TYPE                                               VARCHAR2(2)
#?.b$Q#YlZ6h'Q*d0 ID1                                                NUMBERITPUB个人空间x3SC3z+%}0O'Y
 ID2                                                NUMBER
&u s7V!{"eXJ`0 LMODE                                              NUMBERITPUB个人空间!w#XO*b,?&p
 REQUEST                                            NUMBER
DD&Lq4T]Y0 CTIME                                              NUMBER
h5^t,A2Rf3SHM0 BLOCK                                              NUMBER

锁的分类:
6H~ @%?n00、无
0j,Q S:r6r3Os01、NULL,可以某些情况下,如分布式数据库的查询会产生此锁。ITPUB个人空间 R P-~{2p0?
2、SS,表结构共享锁ITPUB个人空间*Zg$sl+i.x.Tn;[
3、SX,表结构共享锁+被操作的记录的排它锁ITPUB个人空间-B)jB&a#i+qC.XvX`
4、S, 表结构共享锁+所有记录共享锁ITPUB个人空间3q'uRYy&dqVg Y
5、SRX 表结构共享锁+所有记录排它锁ITPUB个人空间 ?}2m_&ikE R?5H
6、X   表结构排它锁+所有记录排它锁
e{H6E$_e0表上的5种锁的含义:
6DFcY3xYJ3N0RS(SS):是一种纯粹的意向锁,它表征事务要通过SELECT FOR UPDATE访问某些行;
Z)zDvQ8Yn9y0n Q0RX(SX):是一种纯粹的意向锁,它表征事务要通过 UPDATE/ DELETE/INSERT修改某些行;ITPUB个人空间fLd;^w)F
S:全表范围的共享锁,不需要在每行上做出标识;
i,Nq7^b*K WI0X:全表范围的排它锁,不需要在每行上做出标识;ITPUB个人空间[yC9t"S0t
SRX(SSX):是意向锁RX与S锁的组合,它表征事务既对表加S锁,同时要修改个别行,即要在个别行上加X锁;(如果你使用ORACLE8,可以在一个表上建立一个自引用,如EMP表上的MGR引用EMPNO,删除一条记录,可以观察到SRX锁)
*F6S^"`}0在行上,ORALCE只有X锁,ITPUB个人空间en�Q ]$U)@I
但由SELECT FOR UPDATE 获得的X锁在表级表征为RS锁,
/r9VWjs$v6G9U0由INSERT/UPDATE/DELETE 获得的X锁在表级表征为RX锁,ITPUB个人空间'b[ BbG
 ITPUB个人空间 |/R0HAw uY1|
窗口1:
H!Q6V8k%? p,[0SQL> conn myfmis/myfmis
a%e I},`'C0]W4}&K0已连接。ITPUB个人空间1^1i `{9O*p/e#B9f
SQL> update xtdwcs set MC='单位本部ok' where dh='0114';

窗口2:
;ei C2T/wl?0SQL> conn myfmis/myfmisITPUB个人空间 blCFMJls
已连接。ITPUB个人空间?]z2Dg%[!ulf d
SQL> update xtdwcs set MC=单位本部ok' where dh='0114';ITPUB个人空间h3rx S4n0`+dNS ba
处理过程:
%xY(XvAcC/cv/q0查看是否有session阻塞:ITPUB个人空间7x;q`Vj$d
select * from v$lock where BLOCK=1
; MoA.pNYtp0    ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
GXn i1i`tM01 1FE0C654 1FE0C770 151 TX 131115 520 6 0 669 1
x;b(P�~m(o�} us1L0查看TX锁的SID与Serial#:
.V4z!muP/Ae S;B0select * from v$session where event like'%TX%';
+mIBo?"Q X0select sid,serial#,username,state,blocking_session_status,blocking_session from v$session where event like'%TX%';
,a@p&|&O+s@0 ITPUB个人空间V�g%Z WB
    SID SERIAL# USERNAME STATE BLOCKING_SESSION_STATUS BLOCKING_SESSIONITPUB个人空间pzR^4t2Dv}+3I
1 137 6 FMISMAIN WAITING VALID 150ITPUB个人空间mH4Uov
临时KILL这个session:ITPUB个人空间+p-uy n#{Oq
分两类,
!ZY1fXW7r ^V)A.t w0第一:kill掉137,6,则是kill掉之后被等的session。ITPUB个人空间;jN* jh1s C:K
alter system kill session '137,6';
K*{P!HWP*f-]0第二:kill掉150,则是kill掉之前阻塞别人的session。
H"{}a4Cdv0因此通过前面的137,6所查到的SQL语句,则是后面运行被等待的SQL语句,而不是阻塞别人的SQL语句。
ir&N9^�@8~0如果要查找原因,操作如下:
e.O-[eg(T0查找相应的SQL语句:ITPUB个人空间;w;w1V$qBc:B
select a.sql_text from v$sqlarea a,v$session b where a.sql_id=b.sql_idITPUB个人空间'S%UG!o7S)I
select a.sql_text from v$sqlarea a,v$session b where a.sql_id=b.sql_id and b.event like'%TX%'ITPUB个人空间,X+d:Jm [u
 
,`}T_q.YW0    SQL_TEXTITPUB个人空间 G,`s9e [�Db"n^
1 update xtdwcs set MC='单位本部ok'  where dh='0114'
5~[5JgH/Z U&pK&q0select * from v$sqlarea where SQL_ID='gf1472pj5wnzj'
j`$C7P%F C o0找出相应的SQL语句后,即可处理。ITPUB个人空间{4f,hbA@ vk9m7ND
#######################################################################ITPUB个人空间;i1k%t ?X-G d
在巡检期间,检查如果发现有相关的session_wait锁,可按以下步骤查找相应的锁
KRl ~0kS01. 使用V$LOCK找出session持有的锁。
G:b0w{U AV2G02. 使用V$SESSION找出持有锁或等待锁的session执行的sql语句。ITPUB个人空间0U0T O(O!F
3. 使用V$SESSION_WAIT找出什么原因导致session持有锁堵塞。ITPUB个人空间'EA IL]XU"S/Y
4. 使用V$SESSION获取关于持有锁的程序和用户的更多信息。
]�N�|${,d+L/Bu0V$LOCK中的常用列
,H:Rb4{�xC N;Kr0? SID:表示持有锁的会话信息。ITPUB个人空间n.wUu#j![1aJ2Y
? TYPE:表示锁的类型。值包括TM和TX等。
f T4q&|'~rb0? LMODE:表示会话等待的锁模式的信息。用数字0-6表示,和表1相对应。ITPUB个人空间p ~:X9Zb:XP:]
? REQUEST:表示session请求的锁模式的信息。
w'L&l C'U2] V3`0? ID1,ID2:表示锁的对象标识。

1、查看相应的v$session_wait信息ITPUB个人空间%|5?Q6e"hB)e
    select event,count(*) from V$SESSION_WAIT group by event order by count(*) desc;
/zx]!J5zp5ow'_0    select event,count(*) from V$SESSION_WAIT group by event order by count(*) asc;ITPUB个人空间eR)RCl#q Y
如果如下(第3条):
3vb cD#S0~||HP0    EVENT COUNT(*)
U pJv[7i3n01 smon timer 1ITPUB个人空间}aar%_;N _
2 Streams AQ: qmn coordinator idle wait 1ITPUB个人空间wV9X ^d!d6M n�K!_s
3 enq: TX - row lock contention 1ITPUB个人空间#C-@3h} d}
4 jobq slave wait 1
Z:CpV]1a05 Streams AQ: waiting for time management or cleanup tasks 1
7oEeZ'EZm,V06 pmon timer 1ITPUB个人空间i9f.uoJb M ?1eu+M
7 Streams AQ: qmn slave idle wait 1
*N`-p&o[08 SQL*Net message from client 3ITPUB个人空间$W|gFIb/A
9 rdbms ipc message 9
(UW@O"]o0 
9m+p"V3vB%j0查看当前被锁的session正在执行的sql语句
~0^F8E:G)P#z9u K0select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ a.username, a.machine, a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL"ITPUB个人空间B^Y#^9] ~(d7`
from v$session a, v$lock b, v$sqltext cITPUB个人空间s$V0b rujl^ `6i
where a.username is not null and a.lockwait = b.kaddr and c.hash_value =a.sql_hash_value


http://space.itpub.net/?uid-9664900-action-viewspace-itemid-676760

ITPUB个人空间&GITPUB个人空间&G

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广