新聞中心
undo的段頭存在著一個(gè)SEQ值,當(dāng)回滾段使用從A區(qū)到B區(qū)的時(shí)候,相對(duì)應(yīng)的SEQ值便會(huì)加1,例如A區(qū)的SEQ值是6,則undo段使用到B區(qū)的時(shí)候變會(huì)成為7。
創(chuàng)新互聯(lián)于2013年開始,先為城東等服務(wù)建站,城東等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為城東企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。但是undo空間是循環(huán)使用的,當(dāng)該undo段中的事務(wù)提交過了之后,相對(duì)應(yīng)的塊就可以被覆蓋掉。如下:
當(dāng)3號(hào)區(qū)使用完全之后,oracle將會(huì)重新使用1號(hào)區(qū),并將其SEQ值加一,改為7,以此類推,新1號(hào)區(qū)使用完了之后,2號(hào)區(qū)也會(huì)被覆蓋,SEQ值改為8.
但是undo空間是循環(huán)使用的,當(dāng)該undo段中的事務(wù)提交過了之后,相對(duì)應(yīng)的塊就可以被覆蓋掉。如下:
當(dāng)3號(hào)區(qū)使用完全之后,oracle將會(huì)重新使用1號(hào)區(qū),并將其SEQ值加一,改為7,以此類推,新1號(hào)區(qū)使用完了之后,2號(hào)區(qū)也會(huì)被覆蓋,SEQ值改為8.
undo塊覆蓋的原則是即將被覆蓋的undo塊必須小于前一個(gè)已經(jīng)覆蓋過的SEQ值。如果如下圖,
2號(hào)區(qū)一直有一個(gè)事務(wù)占住未被釋放,等到undo再次重用到1號(hào)區(qū)的時(shí)候,1號(hào)區(qū)的值變?yōu)?0。這個(gè)時(shí)候由于2號(hào)區(qū)的事務(wù)一直未被釋放,oracle無法對(duì)2號(hào)區(qū)進(jìn)行覆蓋,也不能跳過2號(hào)區(qū)去重用3號(hào)區(qū)的undo塊。這個(gè)時(shí)候oracle便會(huì)進(jìn)行一次extend,在一號(hào)區(qū)和二號(hào)區(qū)中間新增一個(gè)undo區(qū),我們稱為新2號(hào)區(qū)。然后oracle便會(huì)在新2號(hào)區(qū)進(jìn)行覆蓋,在新2號(hào)區(qū)覆蓋完成之后,如果老2號(hào)區(qū)還未提交事務(wù),oracle便會(huì)再次申請(qǐng)extend,直到事務(wù)提交。這樣會(huì)造成undo段短時(shí)間內(nèi)消耗大量空間。如下:
如果該2號(hào)區(qū)在undo段的開頭部分,這樣會(huì)導(dǎo)致undo段大部分空間不能重用,所以oracle增加了一種steal機(jī)制。
首先確定的是undo偷竊機(jī)制的基本單位是區(qū)。例如發(fā)生上述情況:
原二號(hào)區(qū):即三號(hào)區(qū)一直有事務(wù)在占用部分塊,導(dǎo)致其無法被覆蓋。那oracle的undo偷竊機(jī)制會(huì)啟到作用,其他undo段將會(huì)把4號(hào)區(qū)偷走,此undo段便會(huì)剩下三個(gè)區(qū),然后在新2號(hào)區(qū)后進(jìn)行extend。
但是如果三號(hào)區(qū)的事務(wù)一直不提交,oracle會(huì)一直extend,導(dǎo)致3號(hào)區(qū)之前的區(qū)一直無法被重用,undo段一直在增加,可能會(huì)報(bào)錯(cuò)undo空間無法擴(kuò)展。所以事務(wù)無論大小,還是要盡快提交。
名稱欄目:undo的extend和steal機(jī)制-創(chuàng)新互聯(lián)
文章分享:http://www.ef60e0e.cn/article/cdioie.html