Oracle ITL (Interested Transaction List) - 事務槽

tolywang發表於2010-08-17

Oracle ITL.

什麼是Interested Transaction List(ITL)及ITL等待?  如何減少ITL等待?如何診斷ITL等待?怎樣調整INITRANS 的值 ?   

 

ITL是block中的相關事務資訊的記錄,包括 事務資訊的記錄(包括list編號、回滾段地址、事務型別、事務狀態[提交否]、事務在該block影響的記錄條數等)。ITL 是  consistents reads 的基礎,根據ITL 才能去回滾段中找變化前的資料 。 如果這個事務已經提交,那麼這個ITL的位置就可以被反覆使用了,因為ITL類似記錄,所以,有的時候也叫itl槽位。   每一個ITL 對應一個 SCN 。

如果這個事務已經提交,那麼,ITL槽位中還儲存的有這個事務提交時候的SCN號

對於已經提交的事務,itl槽位最好不要馬上被覆蓋,因為一致性讀可能會用到這個資訊,一致性讀的時候,可能需要從這裡獲得回滾段的入口,並從回滾段中獲得一致性讀。

itl的個數,受引數initrans控制,最大的itl個數,受maxtrans控制,在一個塊內部,預設分配了2個或3個itl的個數,如果這個塊內還有空閒空間,那麼Oracle是可以利用這些空閒空間並再分配itl的。如果沒有了空閒空間,那麼,這個塊因為不能分配新的itl,所以就可能發生itl等待。
如果在併發量特別大的系統中,最好分配足夠的itl個數,其實它並浪費不了太多的空間,或者,設定足夠的pctfree,保證itl能擴充套件,但是pctfree有可能是被行資料給消耗掉的,如update,所以,也有可能導致塊內部的空間不夠而導致itl等待。

如果想增加initrans個數,引數可以動態修改,但是,只是針對以後的新塊起效,以前的塊如果想生效,需要在新引數下,重整表資料,如重建該表,或者move該表。


需要同時修改一個block資料的session超過maxtrans引數的限制, 或者由於block空間使用過多導致資料庫無法擴充套件itl, 就會發生itl的等待了.


適當增大initrans的個數,, 一般有3-4個就足夠了..

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-671133/,如需轉載,請註明出處,否則將追究法律責任。

相關文章