理解redo(11)truncate和select的redo

來源:互聯網
上載者:User

很多系統,在作刪除操作時,都只是做一個標誌位,並不會去做磁碟置0那樣昂貴的操作。truncate也如是,更改的只是segment header和i-node表。truncate 會產生redo,是修改資料字典產生的,不是刪除資料來的。truncate降低HWM,釋放extent,重建data_object_id。之所以比delete快,是因為它根本不需要刪除資料,redo只是記錄這個操作本身而不會有大量資料的redo記錄。因此,對於truncate操作,如果我們知道以前的data_object_id,並且空間未被重用,我們仍然可以找回資料。

什麼情況下select會產生redo ?

1`)快速塊清除或者叫commit clean out。事務提交的時候,Oracle針對記憶體裡的塊:

a)把資料區塊ITL  ENTRY裡flag的標記為U

b)設定commit scn在Scn/Fsc列

有了這兩個標記就可以告訴全世界這個事務已經提交。但ITL ENTRY 的Lck標誌和每個資料行頭的lb(鎖定位資訊)並不會清除。Oracle 做commit clean out並不會產生日誌,這個你可能會感到比較奇怪,修改了塊,但是卻沒產生日誌。其實這個產生日誌的過程在後面的完整的塊清除的時候才做。也就是我們下一次select到這個資料區塊的時候。

2)延遲塊清除。事務提交的時候,事務修改的塊已經不在記憶體裡了,這個時候,Oracle不會再從磁碟把塊讀取到記憶體裡做塊清除,而是在下一次讀取資料區塊的時候,做塊清除的動作。這個塊清除的動作會產生Redo。

另外,因為存在遞迴等操作,若是對某個事務產生的redo進行會話級的丈量,可能有失偏頗,合理的是,基於執行個體級的測量:

select name,value from v$sysstat where name='redo size'; 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.