螞蟻金服OceanBase是什麼,比傳統的數據庫如mysql、oracle有什麼區別?

田野外的遠方


“小強show科技”,不一樣的感知,展示科技帶來的魅力生活。感謝您的閱讀!

前言

OceanBase是阿里巴巴和螞蟻金服完全自主研發的通用的分佈式關係型數據庫,定位為商用企業級數據庫。金融級別的可靠性,目前主要用於金融行業和其他行業。

OceanBase目前主要有1.x和2.x兩個版本序列。1.x版本兼容MySQL常用語法,2.x版本以兼容Oracle常用語法為目標。OceanBae支持多租戶,即在一個OceanBase集群裡會劃分出多個租戶(即實例),而租戶的類型是兼容MySQL或者Oracle。業務方使用的只是租戶(實例),是集群能力的一個子集。在使用體驗上會感覺租戶像MySQL或Oracle,但又不完全一樣。OceanBase並不是在重造一個MySQL或Oracle,而只是在功能接口上兼容它們,在底層架構上,不管哪種租戶都有分佈式能力。

OceanBase是什麼?

Oracle軟件是多進程程序,啟動後會開闢一塊共享內存。Oracle部署形態有單實例、集群RAC、主備Dataguard。MySQL軟件是單進程,進程名叫mysqld,有的還會有守護進程mysql_safe。MySQL的部署形態有單實例、主從單向同步或主主雙向同步和MySQL Cluster(用的比較少)。

OceanBase的軟件是單進程,名字叫OBServer。OceanBase是分佈式數據庫,集群部署,通常每個機器(後面統一稱為節點)上會啟動一個OBServer進程,各個節點的OBServer進程組成一個集群運行。雖然應用可以直接訪問任意一個節點的實例,但不推薦。

通常是在OceanBase集群前面啟動一個或多個反向代理OBProxy。OBProxy只負責數據路由和傳輸,不涉及到數據運算(如連接、統計、合併或排序等)。OBProxy的作用類似Oracle的監聽程序,不同的是數據返回的時候也是從OBProxy回去。這個以後再專門詳細介紹。對於業務而言,OBProxy就是數據庫的代表,可用性也很重要。所以一般會部署多個OBProxy掛載負載均衡設備或軟件下面以VIP形式對外提供服務。

OceanBase的開發


鎖、事務和超時機制

OceanBase的租戶兼容MySQL或Oracle,常用的數據類型和語法都還支持。這點使用沒什麼問題。需要注意的是在鎖和事務方面。

OceanBase的鎖是行鎖,也有表鎖,但是沒有鎖升級策略。OceanBase的事務都有版本號,類似於Oracle的SCN,讀默認是快照讀,不阻塞寫。OceanBase的事務隔離級別目前只支持讀已提交(RC)。如果要規避不可重複讀問題,則需要在讀上加鎖(支持SELECT ... FOR UPDATE)。

在租戶內,如果事務修改的分區跨越節點了,就是分佈式事務,OceanBase目前也是支持的,原理是兩階段提交,強一致。業務感知不到也不需要知道這個是分佈式事務。如果業務事務跨越了租戶邊界,則這種分佈式事務需要藉助於分佈式事務中間件產品解決。

OceanBase針對慢SQL有個超時機制,以防止慢SQL佔用數據庫資源,默認時間是10秒。慢SQL不僅包括查詢慢的SQL,還包括SQL自身性能沒問題但是被阻塞的DML SQL。在MySQL裡對於鎖等待也有超時機制,對於慢SQL也有強制中斷機制(默認沒有啟用)。

OceanBase對於長事務(長時間不提交)採取的是強制超時機制,默認時間是100秒。由於OceanBase沒有UNDO,並且事務未提交之前,Redo都在內存裡,所以大事務會佔用一定內存資源。

這兩個超時參數都可以調整。調整為很大時效果就等同於不干預,跟Oracle/MySQL就一致了。我們並不建議簡單調大。慢SQL和長事務是業務設計問題,需要業務層面儘可能的解決。

SQL調優

OceanBase的SQL執行設計參照了Oracle的設計,有硬解析、軟解析,有執行計劃緩存。執行計劃目前也很豐富,連接算法有嵌套循環、哈希、歸併連接、半連接(semi-join)、anti-jon。支持左連接或右連接,子查詢等,支持SQL改寫等等。這塊以後再詳細總結。

查看執行計劃的命令是explain,這點跟MySQL保持一致(簡潔)。

OceanBase提供一序列內部視圖(gv$視圖或v$視圖)用於診斷性能。這點跟Oracle的性能視圖比較類似。

同時OceanBase還有一個視圖gv$sql_audit擁有集群執行過的全部SQL,無論SQL是否成功還是失敗。從中可以查看SQL的執行時間、節點、執行計劃類型、報錯代碼、執行時間、等待時間、讀取塊數、返回行數、影響行數等等。

更值得一提的是OceanBase也實現了Oracle的Outline功能,能在線干預執行計劃。如調整連接算法、順序或者索引等。對於那些不可調整的慢SQL,為了消除它的影響,Outline支持對該慢SQL做限流處理。如強制串行執行等。


分享到:


相關文章: