ITL(Interested Transaction List)是Oracle數(shù)據(jù)塊內(nèi)部的一個(gè)組成部分,

位于數(shù)據(jù)塊頭(block header),itl由xid,uba,flag,lck和scn/fsc組成,

用來(lái)記錄該塊所有發(fā)生的事,江蘇會(huì)計(jì)證考試報(bào)名,2022年會(huì)計(jì)從業(yè)資格考試報(bào)名,2022年江蘇會(huì)計(jì)從業(yè)證報(bào)名,2022年江蘇會(huì)計(jì)從業(yè)考試報(bào)名,江蘇2022年會(huì)計(jì)從業(yè)資格考試成報(bào)名,2022年江蘇會(huì)計(jì)從業(yè)考試,會(huì)計(jì)電算化考試試題,2022年江蘇會(huì)計(jì)電算化,江蘇會(huì)計(jì)電算化試題,江蘇會(huì)計(jì)電算化考試,江蘇初級(jí)會(huì)計(jì)電算化,江蘇初級(jí)會(huì)計(jì)電算化考試">

射精一区欧美专区|国产精品66xx|亚洲视频一区导航|日韩欧美人妻精品中文|超碰婷婷xxnx|日韩无码综合激情|特级黄片一区二区|四虎日韩成人A√|久久精品内谢片|亚洲成a人无码电影

您現(xiàn)在的位置:首頁(yè) > IT認(rèn)證 > oracle認(rèn)證 >

對(duì)oracleITL(事務(wù)槽)的理解


一、ITL描述:
   
    ITL(Interested Transaction List)是Oracle數(shù)據(jù)塊內(nèi)部的一個(gè)組成部分,
   
    位于數(shù)據(jù)塊頭(block header),itl由xid,uba,flag,lck和scn/fsc組成,
   
    用來(lái)記錄該塊所有發(fā)生的事務(wù),一個(gè)itl可以看作是一條事務(wù)記錄。
   
    當(dāng)然,如果這個(gè)事務(wù)已經(jīng)提交,那么這個(gè)itl的位置就可以被反復(fù)使用了,
   
    因?yàn)閕tl類(lèi)似記錄,所以,有的時(shí)候也叫itl槽位。如果一個(gè)事務(wù)一直沒(méi)有提交,
   
    那么,這個(gè)事務(wù)將一直占用一個(gè)itl槽位,itl里面記錄了事務(wù)信息,回滾段的入口,
   
    事務(wù)類(lèi)型等等。如果這個(gè)事務(wù)已經(jīng)提交,
   
    那么,itl槽位中還保存的有這個(gè)事務(wù)提交時(shí)候的SCN號(hào)。
   
    ITL個(gè)數(shù)其最小值為1,由參數(shù)initrans控制(由于兼容性的原因,
   
    oracle會(huì)在對(duì)象的存儲(chǔ)塊分配兩個(gè)itl,所以initrans的最小值實(shí)際上為2),
   
    最大值為255,由參數(shù)maxtrans控制,最大值參數(shù)在10g以后不能被修改,
   
    itl是block級(jí)的概念,一個(gè)itl占用塊46B的空間,參數(shù)initrans意味著塊中
   
    除去block header外一部分存儲(chǔ)空間無(wú)法被記錄使用(46B*initrans),
   
    當(dāng)塊中還有一定的free space時(shí),oracle可以使用free space構(gòu)建itl供事務(wù)使用,
   
    如果沒(méi)有了free space,那么,這個(gè)塊因?yàn)椴荒芊峙湫碌膇tl,所以就可能發(fā)生itl等待。
   
    如果在并發(fā)量特別大的系統(tǒng)中,最好分配足夠的itl個(gè)數(shù),其實(shí)它并浪費(fèi)不了太多的空間,
   
    或者,設(shè)置足夠的pctfree,保證itl能擴(kuò)展,但是pctfree有可能是被行數(shù)據(jù)給消耗掉的,
   
    如update,所以,也有可能導(dǎo)致塊內(nèi)部的空間不夠而導(dǎo)致itl等待。
   
    dump一個(gè)塊可以看到ITL信息類(lèi)似如下:
   
    Itl Xid Uba
   
    Flag Lck Scn/Fsc
   
    0x01 0x0006.002.0000158e 0x0080104d.00a1.6e --U- 734
   
    fsc 0x0000.6c9deff0
   
    0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0
   
    fsc 0x0000.00000000
   
    Xid:事務(wù)id,在回滾段事務(wù)表中有一條記錄和這個(gè)事務(wù)對(duì)應(yīng)
   
    Uba:回滾段地址,該事務(wù)對(duì)應(yīng)的回滾段地址
   
    第一段地址:回滾數(shù)據(jù)塊的地址,包括回滾段文件號(hào)和數(shù)據(jù)塊號(hào)
   
    第二段地址:回滾序列號(hào)
   
    第三段地址:回滾記錄號(hào)
   
    SELECT UBAFIL 回滾段文件號(hào),UBABLK 數(shù)據(jù)塊號(hào),UBASQN 回滾序列號(hào),
   
    UBAREC 回滾記錄號(hào) FROM v$transaction --查看UBA
   
    Flag:事務(wù)標(biāo)志位。這個(gè)標(biāo)志位就記錄了這個(gè)事務(wù)的操作,各個(gè)標(biāo)志的含義分別是:
   
    ----- = 事務(wù)是活動(dòng)的,或者在塊清除前提交事務(wù)
   
    C--- = 事務(wù)已經(jīng)提交并且清除了行鎖定。
   
    -B-- = this undo record contains the undo for this ITL entry
   
    --U- = 事務(wù)已經(jīng)提交(SCN已經(jīng)是最大值),但是鎖定還沒(méi)有清除(快速清除)。
   
    ---T =當(dāng)塊清除的SCN被記錄時(shí),該事務(wù)仍然是活動(dòng)的,塊上如果有已經(jīng)提交的事務(wù),
   
    那么在clean ount的時(shí)候,塊會(huì)被進(jìn)行清除,但是這個(gè)塊里面的事務(wù)不會(huì)被清除。
   
    Lck:影響的記錄數(shù)
   
    Scn/Fsc:快速提交(Fast Commit Fsc)的SCN或者Commit SCN.
   
    每條記錄中的行級(jí)鎖對(duì)應(yīng)于Itl列表中的序號(hào),即哪個(gè)事務(wù)在該記錄上產(chǎn)生的鎖。 二、ITL等待
   
    發(fā)生等待的場(chǎng)景:
   
    1.超過(guò)maxtrans配置的最大ITL數(shù)
   
    2.initrans不足,沒(méi)有足夠的free space來(lái)擴(kuò)展ITL
   
    解決方法:
   
    1.maxtrans不足:這一情況是由高并發(fā)引起的:同一數(shù)據(jù)塊上的事務(wù)量
   
    已經(jīng)超出了其實(shí)際允許的ITL數(shù)。因此,要解決這類(lèi)問(wèn)題就需要從應(yīng)用著手,
   
    減少事務(wù)的并發(fā)量;長(zhǎng)事務(wù),在保證數(shù)據(jù)完整性的前提下,增加commit的頻率,
   
    修改為短事務(wù),減少資源占用事件。而對(duì)于OLAP系統(tǒng)來(lái)說(shuō)(例如,其存在高并發(fā)量
   
    的數(shù)據(jù)錄入模塊),可以考慮增大數(shù)據(jù)塊大小。
   
    2.initrans不足:數(shù)據(jù)塊上的ITL數(shù)量并沒(méi)有達(dá)到MAX TRANS的限制,
   
    發(fā)生這種情況的表通常會(huì)被經(jīng)常UPDATE,從而造成預(yù)留空間(PCTFREE)被填滿(mǎn)。
   
    如果我們發(fā)現(xiàn)這類(lèi)ITL等待對(duì)系統(tǒng)已經(jīng)造成影響,可以通過(guò)增加表的INITRANS或者
   
    PCTFREE來(lái)解決(視該表上的并發(fā)事務(wù)量而定,通常,如果并發(fā)量高,建議優(yōu)先增加
   
    INITRANS,反之,則優(yōu)先考慮增加PCTFREE)。
   
    要注意的一點(diǎn)是,如果是使用ALTER TABLE的方式修改這2個(gè)參數(shù)的話(huà),
   
    只會(huì)影響新的數(shù)據(jù)塊,而不會(huì)改變已有數(shù)據(jù)的數(shù)據(jù)塊--要做的這一點(diǎn),需要將數(shù)據(jù)
   
    導(dǎo)出/導(dǎo)入、重建表。
   
    ITL重用后如何實(shí)現(xiàn)前ITL讀一致性:
   
    ORACLE通過(guò)ITL條目中記錄的回滾段地址找到回滾段,實(shí)現(xiàn)讀一致性,如果事務(wù)已提交,
   
    ITL就可以被重用,但是若前一個(gè)ITL被重用,前一個(gè)ITL的讀一致性是如何實(shí)現(xiàn)的呢?
   
    假定block只有一個(gè)itl,假定第一個(gè)事務(wù)的時(shí)候產(chǎn)生了 ITL-0
   
    第二個(gè)事務(wù)來(lái)了,產(chǎn)生了 ITL-1 ,ITL-1 里面的UBA 可以找到回滾段地址,
   
    回滾段中除了記錄了 block用戶(hù)數(shù)據(jù)的 before image 外還記錄了 ITL-0 的信息。
   
    第三個(gè)事務(wù)來(lái)了,產(chǎn)生了 ITL-2 , ITL-2 中 UBA 指向回滾段,
   
    回滾段中也記錄了 ITL-1 的信息。
   
    這樣當(dāng)一個(gè)查詢(xún)?nèi)粜枰狪TL-0時(shí)候的信息,則找到當(dāng)前block,發(fā)現(xiàn)是 ITL-2 ,
   
    根據(jù)UBA找到回滾段進(jìn)行 roll 得到 變化前 block ,這個(gè)時(shí)候發(fā)現(xiàn)block中是 ITL-1 .
   
    還不能滿(mǎn)足需求。 于是再根據(jù) ITL-1 中的 UBA 又去回滾段中找到數(shù)據(jù)來(lái)進(jìn)行roll,
   
    得到一個(gè)block 數(shù)據(jù),這個(gè)時(shí)候block中就有了 ITL-0.
   
    通過(guò)根據(jù)當(dāng)前ITL進(jìn)行遞歸的方式找到數(shù)據(jù),實(shí)現(xiàn)之前ITL的獨(dú)一致性。

相關(guān)文章

無(wú)相關(guān)信息
更新時(shí)間2022-03-13 11:11:03【至頂部↑】
聯(lián)系我們 | 郵件: | 客服熱線(xiàn)電話(huà):4008816886(QQ同號(hào)) | 

付款方式留言簿投訴中心網(wǎng)站糾錯(cuò)二維碼手機(jī)版

客服電話(huà):