這篇文章是為了補充《oracle性能優化與診斷案例精選》一書中的案例而寫的,但是想想,也許還可以擴充一下,對于剛接觸 oracle 資料庫的朋友們,試着回答一下以下幾個問題,看看自己能否找到正确的答案:
當我們 insert 一條記錄,不送出,這個資料在記憶體還是磁盤? 當我們 insert 一條記錄,送出,這個資料在記憶體還是磁盤? 當我們 insert 一條記錄,不送出,檢查點,這個資料在記憶體還是磁盤? 當我們 insert 一條記錄,送出,檢查點,這個資料在記憶體還是磁盤?
先看看我的測試:
我們首先執行一個資料行插入,送出,執行檢查點,這條資料被寫入磁盤; 再插入一條資料,送出,此時(在檢查點發生之前)這條資料不會寫入磁盤; 當然 dump 之類的操作也不會引起這條資料寫入磁盤;
那麼如何驗證:
通過dump block,從資料檔案轉儲,隻能看到一行記錄; 通過dump buffer cache block,能夠看到兩條記錄。
這裡的知識點是,如何dump buffer cache中的資料塊,書中未提及這個知識點,但是隐含的用到了。
1.以下步驟執行了資料寫入和dump,我們看到dump datafile時隻有一條記錄存在于資料檔案之上
2.進一步的dump buffer cache block,這裡有兩個指令:
經過轉儲可以看到cache中的兩條記錄:
這樣的動手測試驗證,非常有助于了解 oracle 的運作原理,以及在這背景 redo 的作用。三天不練手生,大家應當動手不懈。而且如果能夠看到以上 trace 檔案中的所有輸出,那就是具有相當水準的專家風範了。
<b>本文來自雲栖社群合作夥伴“dbgeek”</b>