Cache寫策略——write-through與write-back


write-through和write-back這個概念在存儲工程師眼里絕對不會陌生,而對於數據庫管理員來說並卻並不一定十分清楚。我說看到的數據庫管理員與存儲工程師的接口無非就是這些:

1. 我需要一個scalable vg,大小是100g。 
2. 我需要使用三個1T的裸盤用來做asm。 
3. 我需要一個IOPS為12000的陣列,底層做成raid 10, 條帶大小為1M

沒有人願意去了解關於磁盤cache是怎么工作的,因為那不是我工作的范疇。

俗話說: “不想當廚師的裁縫不是個好司機“, 如果預備做Exadata的管理員,或許您應該先了解了解cache的寫模式。Take it easy, it is not rocket science.

在進入正題之前,先來問問wikipedia怎么看: Writing Policies  。 wiki大神已經解釋得非常清楚了,看來沒有寫下去的必要了。這篇文章就到這吧,再見。No, to make it more clear, I would like to interpret it in an Exadata way, that is the point. 俗話說:“No pictures, No trues”, let’ s get started.

Write-Through 模式: 
1. DB向Cell發送一個寫請求, cellsrv進行驗證確認其請求有效; 
2. cellsrv將發送指令將其寫入到物理磁盤; 
3. 寫完成以后,給DB確認已經寫成功; 
4. cellsrv判斷次數據是否適合緩存到cache中,如果滿足條件則緩存,否則不緩存。

Write-Back 模式: 
1. DB向Cell發送一個寫請求, cellsrv進行驗證確認其請求有效; 
2. cellsrv將發送指令將其寫入到磁盤Cache; 
3. 將此數據的狀態置為dirty的狀態。(直到下次臨界條件將臟數據刷新到磁盤,並判斷此數據是否適合緩存,如果不適合,刷新完成以后會丟棄,刷新和緩存過程是異步的,並不在步驟3來完成) 
4. 寫完成以后,給DB確認已經寫成功;

Write-Back 模式明顯更高效,因為寫數據到cache的速度比寫到物理磁盤速度要快幾個數量級。但是cache屬於揮發性設備,無法持久的保存數據,所以需要磁盤控制器/Flash卡有獨立的電源模塊作為驅動將cache中的數據寫回到磁盤。如果沒有電源模塊,則原本保存在cache中的數據並無法保障總能成功寫入到磁盤,如果這個時候主機發生掉電,則可能造成數據不一致。為了保證數據的一致性,如果磁盤控制器或者flash卡的電量不足,則會自動從write-back模式轉到write through 模式, 進而對系統的I/O造成影響。在exadata中可以使用exachk工具來檢查,以下是Exachk中磁盤raid控制器電池不足導致自動切換到write-through的告警。

實際上可以在BIOS中強行修改磁盤控制器的wirte-back或者write-through模式,但是為了保證數據的一致性,我們並不建議這么做。如果出現了以上問題,正確的做法應該是開一個sr,上傳對應的exachk報告要求更換電池。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM