閱讀363 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Oracle12.2體係架構圖:Filesystem+Multitenant

全麵解讀Oracle 12.2體係架構圖係列課程,精彩繼續。本期的內容由兩部分組成,一是數據庫實例與文件係統的訪問;二是多租戶解決方案。文中將會簡單列舉視頻要點,詳細內容請點擊原文鏈接下載視頻。

數據庫實例與文件係統


幾個重要的進程和內存組件

  • RVWR:Recovery Writer Process,當數據庫設置了閃回區域的時候,該進程定期將內存中,具體來講是shared pool中的flashback buffer裏麵的閃回數據寫入flashback logs.

  • Result cache --> RCBG:result cache 用於存放SQL語句或者plsql函數在執行過程中,對於原始數據進行運算所得的結果,當數據庫再次對相同的對象做同樣的操作,可直接獲取結果,避免計算資源的浪費。

  • ASH  buffer-->MMNL: ASH buffer用於存放活動會話的統計信息,包括SQL的執行情況,應用連接情況,等待事件等。當ASH buffer 被寫滿的時候,MMNL進程負責將buffer中的數據寫入到磁盤中。

  • In memory undo(IMU):在共享池中開辟一塊區域,存放臨時undo,一個事務中若修改多條數據,不再buffer Cache中的undo數據塊做修改,而是增加IMU節點進行記錄。主要是為減少undo所產生的Redo。

  • Private Redo log buffers:主要用於管理IMU所產生的臨時Redo,將事務的Redo信息存放在共享池中,減少對Redo log buffer的消耗。

  • Flash Cache:全稱是Database  smart flash Cache,是從11.2 開發的一項針對閃存的優化技術,旨在通過使用閃存代替傳統的慢速磁盤設備來存儲部分數據,已達到減少數據庫整體延遲,提高數據庫的IOPS,提升數據庫性能的目的。


Flash Cache的工作原理如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


Flash Cache中存放的內容通過兩種方式來控製:

1、flash  Cache的智能選擇算法:評估數據塊、索引塊的訪問頻繁程度來決定。

2、對數據庫對象的cell_flash_cache屬性做修改。

Flash Cache存儲內容基本標準

主要是小IO操作,以及數據塊、索引塊、文件頭,控製文件等會被緩存;

針對RMAN備份的IO操作,數據泵IO操作ASM鏡像操作以及表空間格式化等不會做緩存;

全表掃描的IO操作的緩存優先級比較低。

當數據存儲在flash Cache中,主要是為了提高查詢的速度,也就是說,它就相當於在內存之外又增加了一部分buffer Cache的區域,隻是性能更好,速度更好。那麼跟buffer Cache一樣,flash Cache中的數據寫滿或者寫到一定程度就需要把數據寫入磁盤,留出空間給新的操作數據。


Flash Cache的flushing過程

緩存內數據寫入磁盤稱為flushing。可以配置Starting and stopping cache flushing levels值,這個值表示占用整個緩存大小的百分比。當緩存內未寫入磁盤的數據達到starting flushing value時,控製器開始flushing(由緩存寫入磁盤)。當緩存內未寫入磁盤數據量低於stop flush value時,flushing過程停止。


如果start flushing level設置較高,可以在緩存內存更多的未寫入數據。這有利於提高寫操作的性能,但是要犧牲數據保護。如果要得到數據保護,可以使用較低的start and stop values。經測試表明,使用接近的start and stop flushing levels時性能較好。如果stop level value遠遠低於start value,在flushing時會導致磁盤擁塞。 


 Smart Flash Logging

長期以來,Redo log的IO瓶頸一直是困擾OLTP係統的一大難題,因為Redo的寫入延遲直接拖累了整個係統 甚至整個集群的響應速度。

 

在傳統的數據庫架構中,一些DBA會將讀寫延遲較低的小塊存儲單獨劃分給Redo,從11204開始,Oracle提出一種新的方案,在閃存區域中專門為Redo開辟一塊區域,用於存儲臨時Redo。


 In-Flash Column SCAN

將列存儲落到Flash Cache,提高頻繁操作的列存儲對象的寫IO。


  • Change  Tracking File:在增量備份中檢測塊的 變化,並記錄到文件中。 記錄單位為block。

  • wallet:Oracle Wallet是用來存儲密鑰的容器。簡單點來說就是個密碼箱,通過這個密碼箱,可以使原來需要輸入密碼的場合能夠實現免輸密碼使用,從而保護了賬號口令等敏感信息,使得安全性得到了提高,而且更加方便使用。

多租戶解決方案Multitenant

Application Container

應用容器Application Container是12.2提出來的新的組件,將同一應用下的數據庫係統劃分到一個子容器中,在保證多租戶同一管理的情況下,實現相對的業務隔離和數據安全。


PDB擁有自己的undo表空間

從12.2開始,每個PDB都擁有自己的undo表空間。消除了多個PDB間的爭用,若要進行閃回或者基於時間戳的恢複,隻需要在自己的undo數據中尋找,提高效率。


PDB的靈活創建方式

1、從PDB$seed(或者application root)創建:通過文件複製的方式

2、現有PDB經過hot clone創建


注:在12.1中,基於一個PDB創建新的PDB的時候,需要將原庫以read only的方式打開。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

而在12.2中,原庫可以持續進行DML操作,並不受影響。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


克隆過程在後台執行。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

克隆完成以後,數據會持續刷新到新庫。


3、來自其他CDB中的PDB的遷移:Relocate


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


前端執行 create pluggable database from relocate這樣一條命令,後台會自動執行遠程hot clone,做遠程文件複製和同步。


4、通過ASM磁盤文件的shadow copy方式生成新的PDB。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


PDB的內存資源管理

在多租戶環境下,多個PDB共享內存的資源,當一個PDB需要做buffer Cache的尋址時,需要從整個共享的資源中尋找,非常不方便。在12.2中,Oracle針對部分資源做了基於PDB的domain劃分。


12.1的內存資源的hash鏈表是這樣的:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


12.2中是這樣的:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


更多PDB的新特性

1、字符集:在12.2中,若CDB的字符集為超集,也就是AL32UTF8,那麼支持不同字符集的PDB。同時,通過Proxy PDB,可以實現不同字符集的PDB進行查詢,Proxy將雙方的字符集做識別和兼容,不會出現亂碼。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


關於多租戶更多的新特性詳解,請參考

YH9:Oracle Multitenant 知識庫

關注數據和雲(OraNews)公眾號,回複掌上手冊,有更多驚喜學習禮包等你拿。


多租戶技術已經被廣大用戶廣泛應用,而雲和恩墨作為數據服務行業的引領者,通過zData解決方案與Oracle 多租戶的結合,幫助用戶實現了互聯網+時代的係統雲化轉型。


文章轉自數據和雲公眾號,原文鏈接

最後更新:2017-07-18 20:36:23

  上一篇:go  122Architecture 全麵解讀 - 第一篇 全局解析+ADG+IM模塊
  下一篇:go  [原創]分析解決lvs fullnat模式下後端服務器獲取真實IP地址異常問題