Enqueue 整理总结Word格式.docx

上传人:b****7 文档编号:21834040 上传时间:2023-02-01 格式:DOCX 页数:10 大小:23.07KB
下载 相关 举报
Enqueue 整理总结Word格式.docx_第1页
第1页 / 共10页
Enqueue 整理总结Word格式.docx_第2页
第2页 / 共10页
Enqueue 整理总结Word格式.docx_第3页
第3页 / 共10页
Enqueue 整理总结Word格式.docx_第4页
第4页 / 共10页
Enqueue 整理总结Word格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Enqueue 整理总结Word格式.docx

《Enqueue 整理总结Word格式.docx》由会员分享,可在线阅读,更多相关《Enqueue 整理总结Word格式.docx(10页珍藏版)》请在冰豆网上搜索。

Enqueue 整理总结Word格式.docx

select*fromv$resource;

ADDRTYID1ID2

------------------------------

6D304434XR40

6D304594CF00

6D3046F4RT10

6D30474CRS251

6D304904MR30

6D30495CMR40

6D3049B4MR50

6D304B24MR10

6D304B7CMR20

6D304BD4MR2010

6D305634TA61

6D305B5CPW10

6D3069DCTS31

已选择13行。

根据以上查询输出,我们可以看到enqueueresourcestructure由locktype和两个参数组成.Oracle用两个字符符号例如(TX,TM,TS,MR,RT,etc)表示locktype.ID1,ID2两个参数由于locktype的不同所以具有不同含义.

具体可以参见<

<

Wait.Interface.A.Practical.Guide.to.Performance.Diagnostics.and.Tuning>

>

第六章Enqueue部分Table6-3.

在Oracle10g之前,ID1和ID2对于不同类型lock的含义并未公开.

在Oracle10g中可以通过如下查询轻松得到.

colnamefora20

colparameter2fora20

colparameter3fora20

selectname,parameter2,parameter3fromv$event_name

/

稍后在本文enqueue资源争用部分再对ID1与ID2作详细介绍.

可以被lockmanager并行锁的enqueueresources的最大数量由ENQUEUE_RESOURCES初始化参数控制.该参数默认值通常来讲已经足够,如果在应用程序中使用并行DML操作,可以考虑增加ENQUEUE_RESOURCES的值.

关于ENQUEUE_RESOURCES[10..65535]

Atdatabasestartuptime,OracleallocatesthenumberofenqueuesspecifiedbytheENQUEUE_RESOURCESparameter.ThedefaultvalueofENQUEUE_RESOURCESisderivedfromtheSESSIONSparameterandisusuallyadequate,aslongasitsvalueisgreaterthanDML_LOCKS+20.Forthreeorfewersessions,thedefaultvalueisthenumberofdatabasefiles+20.For4to10sessions,thedefaultvalueisthenumberofdatabasefiles+((SESSIONS-3)*5)+20.Formorethan10sessions,itisthenumberofdatabasefiles+((SESSIONS-10)*2)+55.

IfyouexplicitlysetENQUEUE_RESOURCEStoavaluehigherthanDML_LOCKS+20,thenOracleusesthevalueyouprovide.OraclewillautomaticallyallocateadditionalenqueuesfromthesharedpoolasneededifthenumberspecifiedbyENQUEUE_RESOURCESisexceeded.YoucancheckresourceusagebyqueryingV$RESOURCE_LIMIT.

不能获取anenqueueresource的进程会报ORA-00052:

"

maximumnumberofenqueueresourcesexceeded"

error.

V$RESOURCE_LIMIT视图提供系统资源使用的信息.通过这个视图可以监控很多数据库资源(resources,locks,orprocesses)的消耗情况.

注意一下这个视图的几个字段:

MAX_UTILIZATION表示实例启动后该类资源的最大消耗值

以下监控与enqueue有关的资源消耗情况:

colnamefora18

collimit_usagefora15

selectRESOURCE_NAMEname,

CURRENT_UTILIZATIONcur_usage,

MAX_UTILIZATIONmax_usage,

LIMIT_VALUElimit_usage,

INITIAL_ALLOCATIONinit_allo

fromv$resource_limit

whereresource_namein('

enqueue_resources'

'

enqueue_locks'

'

dml_locks'

processes'

sessions'

NAMECUR_USAGEMAX_USAGELIMIT_USAGEINIT_ALLO

----------------------------------------------------------------

processes19249090

sessions2330104104

enqueue_locks132414801480

enqueue_resources1313UNLIMITED676

dml_locks07UNLIMITED456

WhatIsanEnqueueLock?

Anenqueuelock是lock本身.Oracle用一个单独的数组管理.可以通过X$KSQEQ(kernelserviceenqueueobject)或者V$ENQUEUE_LOCK试图察看.隐含参数_ENQUEUE_LOCKS影响这个数组的大小.

Oracle使用不同的结构管理TXandTM队列.

X$KTCXB(kerneltransactioncontroltransactionobject—thebaseviewforV$TRANSACTION_ENQUEUE)andX$KTADM(kerneltransactionaccessdefinitiondmllock).TRANSACTIONSandDML_LOCKS初始化参数会决定管理TXandTM队列的结构大小.

当然通过查询V$LOCK可以获得所有数据库locks的信息.也是我们诊断enqueue争用的一个重要视图.

EnqueueArchitecture

在数据库内部,enqueuearchitecture和sga中cachebuffersarchitecture十分近似.(读过eygle<

Oracle入门,进阶与诊断案例>

这本书的朋友可以参照学习enqueuearchitecture)

enqueuearchitecture的最主要组件由enqueuehashchainslatches,enqueuehashtable,enqueuehashchains,andenqueueresources组成.

它们之间的数量关系:

enqueuehashchainslatch(1:

m)ahashbucket(1:

1)aenqueuehashchain.

子enqueuehashchainslatches保护enqueuehashtableandhashchains.默认状态下enqueuehashchainslatches的个数等于CPU_COUNT,这个数量可以通过隐含参数_ENQUEUE_HASH_CHAIN_LATCHES调整.

根据resourcetypeandidentifiersv$resource(TY,ID1,ID2)Enqueueresources被hash到enqueuehashtable并且被置于相应enqueuehashchains.要使用某个enqueueresource必须获取相应enqueuehashchain.enqueuehashtable的大小来源于SESSIONS初始化参数,也可以通过设置_ENQUEUE_HASH设置.

IfyoueverneedtoincreasetheENQUEUE_RESOURCESparametersignificantlyfromitsdefaultvalue,youmightwanttokeepaneyeonthesleeprateoftheenqueuehashchainslatches.ThisisbecausetheenqueuehashtablelengthwillremainthesamebecauseitisderivedfromSESSIONS,notfromENQUEUE_RESOURCES.Thecombinationofahighdemandforenqueueresourcesandasmallenqueuehashtablewillresultinahigherhashcollisionrateandpotentiallylengthyhashchains.Thisproblemmanifestsitselfaslatchcontentionsfortheenqueuehashchainslatches.Inthiscase,youneedtoincreasethe_ENQUEUE_HASH.

enqueuehashtablelength=((SESSIONS–10)*2)+55

通过dumpenqueue结构进一步学习:

altersessionsetevents’immediatetracenameenqueueslevel3’;

DecodingEnqueueTypeandMode

Oracle通过对P1列的解码,我们可以得知enqueuetype和mode.

selectsid,event,p1,p1raw,

chr(bitand(P1,-16777216)/16777215)||chr(bitand(P1,16711680)/65535)type,

mod(P1,16)"

MODE"

fromv$session_wait

whereevent='

enqueue'

另一种方法.通过v$session_wait(p1raw)列也可以.

Thevaluesfromtheaboveexamplearefroma64-bitOracleDatabase.Youcanignoretheleadingzerosandfocusonthelast4bytes(thatis,thelasteightnumbers).Thehighorder2bytesgivetheenqueuetype.Using54580006asanexample,the2highorderbytesare0x5458Hex.Now,54Hexisdecimal84and58Hexisdecimal88,sotheenqueuetypecanbediscoveredasfollows:

(AppendixBhasacompletelistofenqueuetypes.)

selectchr(84)||chr(88)fromdual;

CH--TX

Oracle10g后enqueuewaiteventname可以通过v$session_wait(event)直接获得.

Processesrequestenqueuelocksinoneofthesesixmodes:

Null(N),RowShare(RS),RowExclusive(RX),Share(S),ShareRowExclusive(SRX),orExclusive(X)

这部分可参见Oracle相关文档.

CommonCauses,Diagnosis,andActions

由于enqueuetype种类繁多,产生anenqueuewaitevent的原因也不同.我们可以根据多个session正在竞争的enqueue的type和mode找到不同的解决方法.

对于每一种type的enqueue,Oracle内部通过X$KSQST维护一条相应的记录.在Oracle9i中,通过V$ENQUEUE_STAT视图,可以具体获得不同typeenqueue的请求统计信息(实例启动后的统计值).

--Oracle7.1.6to8.1.7

selectinst_id,

ksqsttypinst_lock,

ksqstgetinst_Gets,

ksqstwatinst_Waits

fromx$ksqst

whereksqstwat>

0

orderbyinst_id,ksqstwat

--Oracle9iDatabaseandabove

select*

fromv$enqueue_stat

wherecum_wait_time>

orderbyinst_id,cum_wait_time

下面就最常见的一些enqueue等待事件进行讨论.

WaitforTXEnqueueinMode6

对于TXenqueueinmode6的等待是最常见的enqueuewait

(InOracleDatabase10g,thewaiteventnameisenq:

TX—rowlockcontention.).当一个事物试图update或delete一行或多行已经被另一个事物锁定的记录时这个等待事件发生.通常这是由应用程序引起的.

eg.

在SessionA中:

updateasetobject_id=0whereobject_id=11;

与此同时在SessionB中执行相同的语句,SessionBishung:

SessionB一直会等待sessionA提交或回滚此事物.

没有其他方法可以释放SessionA持有的rowexclusivelock(KillsessionA会引起事物被pmon回滚并释放相应lock资源)

ThefollowinglistingshowsanexampleofTXenqueuewaitinmode6asseenintheV$LOCKview:

ADDRKADDRSIDTYID1ID2LMODEREQUESTCTIMEBLOCK-------------------------------------------------------A3950688A395069C10TM18815403030

A304E2A0A304E2B010TX655851478360630

01AD23D401AD24A420TX6558514783660101A3950A28A3950A3C20TM188154030100

每当你发现TXenqueue等待事件时,首要任务是找出哪个session是锁阻塞者(sessionA),哪些session是锁等待者(sessionB),在一个繁忙的系统中,很科能伴有多个锁等待者.

使用以下sql定位即可:

/*

BLOCKER_SID:

锁持有者sid(阻塞sid)

WAITER_SID:

等待者sid

MODE_HELD:

锁持有模式

REQUEST_MODE:

请求模式

*/

select/*+ordered*/a.sid

blocker_sid,

a.username

blocker_username,

a.serial#,

a.logon_time,

b.type,

b.lmodemode_held,

b.ctimetime_held,

c.sidwaiter_sid,

c.requestrequest_mode,

c.ctimetime_waited

fromv$lockb,

v$enqueue_lockc,

v$sessiona

wherea.sid=b.sid

andb.id1=c.id1(+)

andb.id2=c.id2(+)

andc.type(+)='

TX'

andb.type='

andb.block=1

orderbytime_held,time_waited

你也可通过以下查询定位,哪些数据库资源正在被征用.

selectc.sidwaiter_sid,

a.object_name,

a.object_type

fromdba_objectsa,

v$sessionb,

v$session_waitc

where(a.object_id=b.row_wait_obj#ora.data_object_id=b.row_wait_obj#)

andb.sid=c.sid

andchr(bitand(c.P1,-16777216)/16777215)||chr(bitand(c.P1,16711680)/65535)='

andc.eventlike'

enq%'

当发生TXEnqueueinMode6等待事件时

获取到waitingsession和blockingsession正在执行的sql语句十分重要.我们可以通过这个sql语句定位应用程序可能出现问题(1很有可能应用程序没有commit2没有及时commit或rollbackDML操作这就需要结合应用需求而调整了)的大致范围.

WaitforTXEnqueueinMode4—ITLShortage

TXenqueueinmode4的等待事件我们分成3部分讨论.

1>

ITL(interestedtransactionlist)shortage

2>

Uniquekeyenforcement

3>

Bitmapindexentry

Ok我们先从ITLShortage说起.

selectdbms_rowid.ROWID_RELATIVE_FNO(rowid)file_no,

2dbms_rowid.ROWID_BLOCK_NUMB

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1