组织法的英文翻译英语怎么说-坦桑尼亚旅行
2023年4月4日发(作者:糖瓜)
建议大家看看原文文档区可以下到..
《》这本书写的不错.
当处理enqueue等待时,熟记这些要点:
1Enqueues是应用到数据库对象的locks.与latch(应用于SGA内存)不同.
2Enqueues是由应用程序发起,具有事务性.(具体参见下文)
3Oraclesession正在等候获取一个特定的e的名字和mode被记录在P1参数里.
针对不同类型的enqueue竞争应采用不同的方式解决.
4一直到Oracle9i,enqueuewaitevent代表所有enqueuewaits;从Oracle10g开始enqueue
waits被分类定义(下文详细介绍).
WhatIsanEnqueue?
一个enqueue是什么由具体环境决定.如果它被看成是动词,则表示将一个lock请求置于一个队列的动作.
如果被看成是名词,它表示一个特定的lock,比如TX事务enqueue.
Enqueues是一种非常精密的锁定机制,用来管理访问数据库共享资源,比如(objects,backgroundjobs,
andredothreads).Oracle使用enqueues出于两个目的:第一,当enqueue为不兼容模式(mode)
时,enqueues防止并发sessions共享数据库资源.第二,当enqueue为兼容模式时,enqueues容许并发
sessions共享数据库资源.
当sessionA请求一个数据库对象上的锁资源时,
如果被请求的锁模式为不兼容模式,且该数据库对象已经被另一个session以不兼容模式锁持有,则
sessionA将它的锁请求放置于一个队列里并且按顺序等待被唤起.这个事件被称为enqueuewait.
Enqueuewaits除了包括bufferlocks(discussedinthe―BufferBusyWaits‖section),library
cachelocks,rowcachelocks,andPCM(ParallelCacheManagement)locks,也是对各种local
locks的等待.
WhatIsanEnqueueResource?
Anenqueueresource是由于受到一个enqueuelock的数据库资源.
Oracle通过内部数组结构进行管理.
通过X$KSQRS(kernelserviceenqueueresource)orV$RESOURCE视图可以看到具体条目.
SQL>select*fromv$resource;
ADDRTYID1ID2
------------------------------
6D304434XR40
6D304594CF00
6D3046F4RT10
6D30474CRS251
6D304904MR30
6D30495CMR40
6D3049B4MR50
6D304B24MR10
6D304B7CMR20
6D304BD4MR2010
6D305634TA61
ADDRTYID1ID2
------------------------------
6D305B5CPW10
6D3069DCTS31
已选择13行。
SQL>
根据以上查询输出,我们可以看到enqueueresourcestructure由locktype和两个参数组成.Oracle
用两个字符符号例如(TX,TM,TS,MR,RT,etc)表示1,ID2两个参数由于locktype的不
同所以具有不同含义.
具体可以参见<<>>
第六章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,Oracleallocatesthenumberofenqueuesspecifiedbythe
ENQUEUE_aultvalueofENQUEUE_RESOURCESisderived
fromtheSESSIONSparameterandisusuallyadequate,aslongasitsvalueisgreaterthan
DML_LOCKS+eeorfewersessions,thedefaultvalueisthenumberofdatabase
files+4to10sessions,thedefaultvalueisthenumberofdatabasefiles+
((SESSIONS-3)*5)+ethan10sessions,itisthenumberofdatabasefiles+
((SESSIONS-10)*2)+55.
IfyouexplicitlysetENQUEUE_RESOURCEStoavaluehigherthanDML_LOCKS+20,then
willautomaticallyallocateadditionalenqueues
fromthesharedpoolasneededifthenumberspecifiedbyENQUEUE_RESOURCESis
checkresourceusagebyqueryingV$RESOURCE_LIMIT.
不能获取anenqueueresource的进程会报ORA-00052:\"maximumnumberofenqueue
resourcesexceeded\"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_locks0
enqueue_resources1313UNLIMITED676
dml_locks07UNLIMITED456
WhatIsanEnqueueLock?
Anenqueuelock是lock本身.Oracle用一个单独的数组管理.可以通过X$KSQEQ(kernelser洗的拼音 vice
enqueueobject)或者V$ENQUEUE_LOCK试图察看.隐含参数_ENQUEUE_LOCKS影响这个数组
的大小.
Oracle使用不同的结构管理TXandTM队列.
X$KTCXB(kerneltransactioncontroltransactionobject—thebaseviewfor
V$TRANSACTION_ENQUEUE)andX$KTADM(kerneltransactionaccessdefinitiondmllock).
TRANSACTIONSandDML_LOCKS初始化参数会决定管理TXandTM队列的结构大小.
当然通过查询V$LOCK可以获得所有数据库locks的信息.也是我们诊断enqueue争用的一个重要视图.
EnqueueArchitecture
在数据库内部,enqueuearchitecture和sga中cachebuffersarchitecture十分近似.(读过eygle
<
enqueuearchitecture的最主要组件由enqueuehashchainslatches,enqueuehashtable,
enqueuehashchains,andenqueueresources组成.
它们之间的数量关系:
enqueuehashchainslatch(1:m)ahashbucket(1:1)aenqueuehashchain.
子enqueuehashchainslatches保护enqueuehashtableandhashchains.默认状态下enqueue
hashchainslatches的个数等于CPU_COUNT,这个数量可以通过隐含参数
_ENQUEUE_HASH_CHAIN_LATCHES调整.
根据resourcetypeandidentifiersv$resource(TY,ID1,ID2)Enqueueresources被hash到
enqueuehashtable并且被置于相应enqueuehashchains.要使用某个enqueueresource必须获
取相应ehashtable的大小来源于SESSIONS初始化参数,也可以通过
设置_ENQUEUE_HASH设置.
IfyoueverneedtoincreasetheENQUEUE_RESOURCESparametersignificantlyfromits
defaultvalue,youmightwanttokeepaneyeonthesleeprateoftheenqueuehashchains
becausetheenqueuehashtablelengthwillremainthesamebecauseitis
derivedfromSESSIONS,notfromENQUEUE_binationofahigh
demandforenqueueresourcesandasmallenqueuehashtablewillresultinahigherhash
oblemmanifestsitselfaslatch
case,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)\"M凡客诚品 ODE\"
fromv$session_wait
whereevent=\'enqueue\'
/
另一种方法.通过v$session_wait(p1raw)列也可以.
ignorethe
leadingzerosandfocusonthelast4bytes(thatis,thelasteightnumbers).Thehighorder
54580006asanexample,the2highorderbytesare
,54Hexisdecimal84and58Hexisdecimal88,sotheenqueuetypecanbe
discoveredasfollows:(AppendixBhasacompletelistofenqueuetypes.)
selectchr(84)||chr(88)fromdual;CH--TX
Oracle10g后enqueuewaiteventname可以通过v$session_wait(event)直接获得.
Processesrequestenqueuelocksinoneofthesesixmodes:Null(N),RowShare(RS),Row
Exclusive(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,ksqst南宋四大家是哪四位 wat
/
--Oracle9iDatabaseandabove
select*
fromv$enqueue_stat
wherecum_wait_time>0
orderbyinst_id,cum_wait_time
/
下面就最常见的一些enqueue等待事件进行讨论.
WaitforTXEnqueueinMode6
对于TXenqueueinmode6的等待是最常见的enqueuewait
(InOracleDatabase10g,thewaiteventnameisenq:TX—rowlockcontention.).当一个事物
试图update或delete一行或多行已经被另一个事物锁定的记录时这个等待事件发生.通常这是由应用
程序引起的.
eg.
在SessionA中:
updateasetobject_id=0whereobject_id=11;
与此同时在SessionB中执行相同的语句,SessionBishung:
updateasetobject_id=0whereobject_id=11;
SessionB一直会等待sessionA提交或回滚此事物.
没有其他方法可以释放SessionA持有的rowexclusivelock(KillsessionA会引起事物被pmon回滚
并释放相应lock资源)
ThefollowinglistingshowsanexampleofTXenqueuewaitinmode6asseenintheV$LOCK
view:
ADDRKADDRSIDTYID1ID2LMODEREQUESTCTIMEBLOCK---------------------------
----------------------------A3950688A395069C10TM
A304E2A0A304E2B010TX655851478360630
01AD23D401AD24A420TX65585A3950A28A3950A3C20TM18815403
0100
每当你发现TXenqueue等待事件时,首要任务是找出哪个session是锁阻塞者(sessionA),哪些session
是锁等待者(sessionB),在一个繁忙的系统中,很科能伴有多个锁等待者.
使用以下sql定位即可:
/*
BLOCKER_SID:锁持有者sid(阻塞sid)
WAITER_SID:等待者sid
MODE_HELD:锁持有模式
REQUEST_MODE:请求模式
*/
select/*+ordered*/
blocker_sid,1 3年级白居易的诗
me
blocker_username,
#,
_time现代诗歌冰心 ,
,
ode_held,
ime_held,
ter_sid,
trequest_mode,
ime_waited
fromv$lockb,
v$enqueue_lockc,
v$sessiona
=
1=1(+)
2=2(+)
(+)=\'TX\'
=\'TX\'
=1
orderbytime_held,time_waited
/
你也可通过以下查询定位,哪些数据库资源正在被征用.
ter_sid,
_name,
_type
fromdba_objectsa,
v$sessionb,
v$session_waitc
where(_id=_wait_obj#_object_id=_wait_obj#)
=
andchr(bitand(c.P1,-16777216)/16777215)||chr(bitand(c.P1,16711680)/65535)=\'TX\'
ike\'enq%\'
/
当发生TXEnqueueinMode6等待事件时
获取到waitingsession和blockingsession正在执行的sql语句十分重要.我们可以通过这个sql语句
定位应用程序可能出现问题(1很有可能应用程序没有commit2没有及时commit或rollbackDML
操作这就需要结合应用需求而调整了)的大致范围.
WaitforTXEnqueueinMode4—ITLShortage
TXenqueueinmode4的等待事件我们分成3部分讨论.
1>ITL(interestedtransactionlist)shortage
2>Uniquekeyenforcement
3>Bitmapindexentry
Ok我们先从ITLShortage说起.
SQL>selectdbms__RELATIVE_FNO(rowid)file_no,
2dbms__BLOCK_NUMBER(rowid)blk_no
3froma
4whererownum<2
5/
FILE_NOBLK_NO
--------------------
41550
SQL>altersystemdumpdatafile4block1550;
系统已更改。
ItlXidUbaFlagLckScn/Fsc
0x010x000a.017.000001280x00802ee0.004b.2aC---0scn0x0000.00076ef1
0x020x0005.01c.000001330x00803f33.0059.28--U-9fsc0x0009.00079e2b
0x030x0002.02c.0000012a0x00800605.005b.1bC---0scn0x0000.教学反思20篇简短 00076d65
ITL是数据块内\"感兴趣的事物列表\",是数据块内事物插槽(transactionslot).由建表时INITRANS和
MAXTRANS子句决定.\"-文言文学弈朗读的停顿 -U-\"表示此ITL正在被使用.
在默认情况下,表所包含的每个数据块中有1个ITL,索引有2个ITL,每个ITL占据24个字节,以
#.WRAP#.形式包含事务ID.每一个DML事物被处理之前必须占有数据块内ITL空间,当某
个数据库块内所有可用的ITL都在使用中,并且PCTFREE中没有空间让ORACLE动态分配一个新的ITL
事物插槽时,ITL争用就会发生,在这种情况下,会话将持续等待,直到一个事务被提交或回滚.
ThefollowinglistingshowsanexampleoftheTXenqueuewaitinmode4thatiscausedbyITL
shortage,asseenintheV$LOCKview.
ADDRKADDRSIDTYID1ID2LMODEREQUESTCTIMEBLOCK---------------------------
----------------------------8A2B64008A2B64148TM31720302480
89EF3A0C89EF3A1C8TX480
01A4177C01A418489TX7618A2B63888A2B639C9TM3172030376
0
从Oracle9i开始可以通过以下sql定位ITL征用的数据库对象.
,
_name,
ect_name,
_type,
pace_name,
,
tic_name
FROMv$segment_statisticss
tic_name=\'ITLwaits\'
>0
ORDERbyVALUEDESC
/
WaitforTXEnqueueinMode4—UniqueKeyEnforcement
UniqueorprimarykeyenforcementisyetanotherreasonyoumightseecontentionfortheTX
enqueueinmode4.(InOracleDatabase10g,thewaiteventnameisenq:TX—rowlock
contention.)
Thisonlyoccurswhenmultipleconcurrentsessionsinsertthesamekeyvalueintoatablethat
stsessiontoinsertthevaluesucceeds,butthe
restfreezeandwaituntilthefirstsessioncommitsorrollsbacktoseeif―ORA-00001unique
constraint(%s.%s)violated‖shouldberaised.
ThefollowinglistingshowsanexampleofaTXenqueuewaitinmode4asseenintheV$LOCK
thedifferencebetweenthislistingand
theonecausedbyITLshortage?Noticethatthewaiter(SID=8)hastwoTXentriesinthe
V$esn’,theV$TRANSACTION
viewshowsonlytwotransactions—owsSID8is
waitingfortheTXlockheldbySID9,anditwantsasharelock(mode4)
rthingyoushouldbeawareofisthe
objectIDthatisrecordedinID1oftheDMLtransaction(TM)isalwaysthetableID,notthe
indexID,althoughauniquekeyisenforcedthroughanindex.
WaitforTXEnqueueinMode4—BitmapIndexEntry
AwaitfortheTXenqueueinmode4canalsooccurwhenmultiplesessionstrytoupdateor
se,thisdoesnot
applyiftheapplicationdoesnotusebitmapindexes.
UnliketheB-treeindexentry,whichcontainsasingleROWID,abitmapentrycanpotentially
abitmapindexentryislocked,alltheROWIDsthatare
coveredbytheentryarealsolocked.
ThefollowinglistingshowsanexampleofaTXenqueuewaitinmode4asseenintheV$LOCK
thedifferencebetweenthislistingandtheprecedingonein
theuniquekeyenforcement?Canyoutellifyouaredealingwithabitmapindexentryor
uniquekeyenforcementissuebylookingattheV$LOCKviewoutput?No,youcan’
objectIDintheTMlockdoesn’thelpeither,asitistheobjectIDofthetableandnottheindex.
ThatiswhyitisveryimportantforyoutocapturetheSQLstatementofthewaitingand
blockingsessions.
Ifthewaitingsessionisattemptinganinsert,youaredealingwithauniquekeyenforcement
issue.
如果waitingsession正在试图作insert操作.
Ifthewaitingsessionisattemptinganupdateordelete,mostlikelyyouaredealin人日思归 gwitha
bitmapentryissue.如果waitingsession正在试图作updateordelete操作
Inordertoresolvethecontention,r,the
erwastherefirst,forcrying
serhasalegitimatereasontoholdthelock,thewaitersshouldbackoutof
theirtransactions.
WaitforSTEnqueue
每个数据库只有一个ST锁。
修改UET$(用户范围表)和FET$(空闲范围表)的数据库操作需要ST锁,这包括删除、截取、结合等动作。
ST锁争用表明有多个活动会话在字典管理的表空间中执行动态磁盘空间分配或解除分配。不是使用
TEMPORARY子句创建的临时表空间和经历大范围分配和解除分配的字典管理的表空间是ST锁争用的主
要原因。
减少ST锁争用的方法:
1)使用本地管理表空间,在ORACLE9i中所有表空间均可本地化管理。
2)使用命令创建所有临时表空间。
更多推荐
locks是什么意思ks在线翻译读音例句
发布评论