组织法的英文翻译英语怎么说-坦桑尼亚旅行


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)

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在线翻译读音例句