從Oracle新特性看資料庫發展

楊建榮的學習筆記 發佈 2020-02-06T10:27:43+00:00

1.資料庫智能管理 — 「自治」Oracle最早在2017年提出了自治的概念,其提出並倡導的」Autonomous Database,100% Self-Driving」理念開創了資料庫智能管理之先河。

雖說近些年來,從國內資料庫市場來看,Oracle是有些勢衰;但從全球角度來說,其霸主地位依然不可撼動。其技術的演講變化,仍然對行業資料庫發展有著頗大的指導引領意義。下面是我對其近三年來發布的新特性加以盤點,進而洞察行業變化,挖掘技術趨勢。材料部分內容引用自蓋總的《Oracle新特性》系列文章,感謝!

1. 資料庫智能管理 「自治」

Oracle最早在2017年提出了自治的概念,其提出並倡導的」Autonomous Database,100% Self-Driving」理念開創了資料庫智能管理之先河。其公開的新特性包含以下內容:

  • 自動化索引創建與管理

    索引是查詢加速的重要優化手段,如何創建、管理索引,長期以來是DBA的一項繁重工作。從Oracle 19c開始,自動化索引創建和實施技術被引入進來。Oracle預置的專家系統,通過捕獲、識別、驗證、決策、在線驗證、監控的全流程管控索引自動化的過程。這一特性將會自動幫助用戶創建有效的索引,並通過提前驗證確保其性能和有效性,並且在實施之後進行監控,這一特效將極大緩解資料庫索引維護工作。此外,其還支持刪除長時間未使用的索引。

  • 內存對象管理

    Oracle的內存管理,經歷了數代的發展。從早期的各組件分別控制、到SGA、PGA分別控制、再到MEM整體的全局控制。如何滿足不同負載情況下內存的管理要求,如何更精細地管理內存,成為Oracle內存管理重點。特別隨著12c引入了列式內存結構,內部管理更加複雜。Oracle正通過內置的機器學習算法自動實現內存管理,減少人為干預。例如,自動壓縮較少訪問的內存列數據等等。

解讀

  • 資料庫智能管理,是近些年來很火的一個課題。特別是,隨著AI技術的逐步成熟,如何利用人工智慧更好的管理資料庫,減少人為干預管理的工作量成為熱點。

  • 不僅在大型商業資料庫如此,開源資料庫也有不少實踐。以2017年馬遜和卡內基梅隆大學一起開發的一套名「OtterTune」的機器學習自動化調整DBMS的系統為代表。國內BAT等大廠也有很多在智能管理上的實踐。例如通過參數調整節省內存,進而減低整體成本。

  • 智能管理,在雲資料庫方面,有著更為重要的意義。作為一種「開箱即用」的產品,如何減低用戶對雲資料庫使用門檻,是各家著力去解決的問題。例如阿里的CloudDBA、騰訊的DBbrain等,這些附加在數據內核之外的產品,正通過增值的周邊生態服務,吸引用戶,增加自身競爭力。

2. 資料庫架構能力 — 「靈活

Oracle的架構能力,我認為一直以來是比較薄弱的。這與其原來的產品理念有關。隨著開源資料庫(特別是MySQL)的大熱,其靈活多變的架構方式,滿足了客戶的多種需求。Oracle也嘗試在這方面有所改進。

  • 分片(Sharding)

Oracle在12c中推出了分片的概念,其提出了「表家族」的概念。表家族中的所有Sharded table都按照相同的sharding key(主鍵)來分片。在19c中,進一步增強了此功能,允許存在多個表家族。此外,Oracle還提供了跨地域和混合雲的的自動Sharding能力。

  • 讀寫分離

在讀寫分離方面,Oracle 19c中支持自動重定向備庫DML。在使用ADG作為備庫進行讀寫分離部署時,可能因為應用的原因,會有偶然的DML操作發送到備庫上。通過這一特性,ADG會話的ACID一致性得以保持,同時透明的支持「多數讀,偶爾更新」應用的自然讀寫分離配置。這個特性的引入,將進一步的增加ADG的靈活性,幫助用戶將備庫應用的更加充分。

解讀

  • 資料庫的架構是否靈活,滿足用戶的各異需求,對資料庫產品來說很重要。早前的一些做法,更多是通過」中間件+資料庫」的配合來完成。但現在的趨勢是更多在資料庫端解決,或者向上包住一層,給客戶整體化解決方案的感覺。

  • 對於分片、讀寫分離等問題,很多廠商正試圖引入AI技術,自動化處理,減少客戶干預。讓產品內部足夠靈活,對外提供統一訪問方式,減少客戶對產品的細節了解,降低使用門檻。

3. 數據一致性

數據一致性,是資料庫最為核心的能力要求之一。看看Oracle近幾年都做了哪些改進。

  • 增強同步

    在ADG中支持對Nologging數據的複製同步。

  • 多實例並行重做日誌應用增強

    在Oracle Data Guard環境中,備庫的日誌應用速度一直是一個重要挑戰,如果備庫不能夠及時跟上主庫的步調,則可能影響備庫的使用。自Oracle 12.2版本開始,支持多實例並行應用,這極大加快了恢復進度;在18c中,開始支持In-Memory列式存儲;在19c中,並行應用開始支持In-Memory列式存儲。

  • 增加數據檢查函數checksum

    在20c中,Oracle增加了CHECKSUM函數,用於檢測數據的完整性。

解讀

  • 數據一致性要求,是對資料庫的基本要求,但也是頗有難度的挑戰。例如MySQL的數據一致性,一直是個繞不過去的梗。解決這一問題取巧的方式,是通過底層存儲同步或如雲原生的那般處理。

  • 從原理上看,數據保存一份,是最完美的一致性。隨著HTAP技術的成熟、資料庫承載能力的提升,對數據一致性的要求,是可能通過一體式方案在一定程度上解決的。

4. 業務連續性 — SLA

如何保證資料庫的可用性,保證變更時不影響業務,是資料庫能夠承載核心業務的重要標誌。Oracle無疑在這方面走在各家的前面。

  • 透明的應用連續性支持增強

    在Oracle RAC集群中,支持對於查詢的自動切換。當一個節點失效,轉移到另外一個節點,在19c中Oracle持續改進和增強了連續性保持,資料庫會自動記錄會話狀態,捕獲用於重演的信息,以便在切換時,在新節點自動恢復事務,使DML事務同樣可以獲得連續性支持。

  • 在線維護操作增強

    在不同版本中, Oracle 持續增強在線維護操作, 例如在12.2 開始支持的Online Move、在線修改普通表為分區表等特性。在19c中,持續增強了智能的、細粒度的游標失效控制,將DDL操作對於游標失效的影響降至最低等等。

  • 編譯游標增強

    第一個看到需要重新編譯SQL游標的會話(例如,由於新的優化器統計信息)執行重新編譯。其他會話繼續使用舊的SQL游標,直到編譯完成避免因重新編譯而導致大量會話停頓。

  • 零影響的計劃停機維護

    在20c中,對於計劃停機維護或者滾動升級等,Oracle通過Smart DRM等特性以實現對應用的零影響。對於維護操作,資料庫可以在實例關閉前進行動態的資源重分配,這一特性被稱為Smart DRM,通過GRD的動態資源重組織,重新選出的Master節點不需要進行任何的恢復和維護,對於應用做到了完全無感知、無影響。

  • 備庫的Result Cache支持

    在Oracle12.2和18c中,已經實現了ADG的會話連接保持和Buffer Cache保持;在20c中,Result Cache在備庫上進一步得以保留,以確保這個細節特性的主備性能通過。在做切換時,可儘快承載起業務。

解讀

  • 對於業務可用性來說,Oracle的確做到的前面。不僅僅在實例級別、會話級別實現連續可用,Oracle在方方面面為連續可用做了大量工作,來保證對業務的平滑體驗。

  • 分布式資料庫,在處理上述問題時有其天然的優勢,特別是無master的模式。配合上前端的接入層,已經可以實現較為完美的平滑體驗。

5. 混合負載 — HTAP

混合負載類型,是未來資料庫發展的重要方向之一。Oracle這方面的重點投入就是引入了」in-memory選件」,並儘量使其完美內置,對用戶無感。

  • In-memory

    In-Memory技術引入之後,為Oracle資料庫帶來了基於內存的列式存儲能力,支持OLTP和OLAP混合的計算。在20c 中, Oracle 支持了自主的In-Memory 管理, DBA將不再需要人工指定將哪些數據表放置在內存中,資料庫將自動判斷需要將哪些對象加入或驅逐出In-Memory的列式存儲中。

解讀

  • HTAP,看起來是很美好,但實現起來難度很大。其核心還是要將數據按場景做多份存儲,由不同的計算引擎來處理。Oracle的in-memory如此,TiDB的TiFlash亦如此。混合負載類型的難點在於,數據同步、資源隔離等。目前各大廠也都紛紛提出了HTAP的方案,至於解決如何還需拭目以待。

6. 性能加速 — Fast

追求更高的性能,是各資料庫一直以來的追求。這方面場景有幾類做法:

  • 硬體上的提升,例如引入更快的存儲、網絡設備。

  • 存儲模式的變化,例如引入列存滿足特定場景、引入LSM結構由同步改異步等。

  • 算法的改進,例如提供bloom filter提升過濾效率;提供近似計算,在精度要求不高的情況下,提供更大的性能。

解讀

  • 關係模型,對於性能有其天然的短板。在維護一個複雜功能上,其性能必然有所損失,這也是很多nosql或特定場景資料庫(如時序)的特長所在。

  • 分布式資料庫,性能方面尤其值得注意,在跨網絡條件下,其性能表現一般較單機資料庫還是有所差距。

  • 這裡需要區分下,吞吐量<>高性能。在很大程度上,資料庫的吞吐量指標更有價值。極致性能,只在某些特定場景才有需求。

7. 數據分層、虛擬化、生命周期

  • 數據分層

    Oracle在12c中引入了數據生命周期的概念。其通過對數據使用的監控,實現了一定程度上的數據分層,最大程度利用資源。

  • 外部表(in-memory,inline)

    外部表的引入,使得Oracle對外部數據操作更加靈活,並且基於內存列式存儲壓縮,能夠更快的支持大數據量的運算,對於數據倉庫環境將會是極大的增強。而Inline外部表,可以通過SQL直接調用,無需創建僅需一次使用的外部表,這使得開發靈活了很多,也減少了大量元數據的處理。

  • 混合分區表支持

    在19c中,Oracle增強了分區特性,可以將外部對象存儲上的文件,以外部表的方式連結到分區中,形成混合分區表,藉助這個特性,Oracle將資料庫內外整合打通,冷數據可以剝離到外部存儲,熱數據在資料庫中在線存儲。

解讀

  • 個人認為,這是Oracle做到比較強的方面。其憑藉多年的積累,對數據使用特徵的掌握,可以做到數據全生命周期管理。這一點有些平台也是通過外部表方式支持,但其使用體驗及順滑度,較Oracle還是有所差距。

  • 這方面是資料庫的未來發展重點。在用戶已經滿足了基本的存儲、計算能力後,如何更好地使用數據成為重點。分層、虛擬化等技術,可以更好地降低用戶成本,提升數據利用率。

8. 易用性 — 使用方便

使用Oracle的DBA,都有種感覺,就是Oracle太方便了。的確是,Oracle在易用性方面做了大量的工作。

  • 分析視圖

    12c引入的分析視圖,實現了將底層各種數據對接,在提供給簡化SQL訪問,最終輸出給應用,將複雜性通過分析視圖遮蔽。

  • 多維表達式

    多維表達式查詢支持。

  • 多態表

    支持自描述,全動態SQL。是ANSI 2016標準的一部分。

  • SQL宏

    宏的作用在於讓SQL獲得進一步的概括和抽象能力,允許開發者將複雜的處理邏輯通過宏進行定義,然後在後續程序處理中可以反覆引用這一定義。

  • SQL擴展

    在Oracle 20c中,關於SQL的函數擴展很多,包括對於ANSI 2011標準的部分支持,進一步的提升了SQL的處理能力。

解讀

  • 這一方面,國產資料庫或開源資料庫還任重而道遠。Oracle的易用,也成為很多去O項目的核心難點。這也是很多國內資料庫一直致力於Oracle兼容性工作的初衷。

9. 優化器 — 更加智能

  • 統計信息近實時刷新。

    隨著表數據的變化,優化器表數據統計數據將近實時刷新,以防止次優執行計劃。統計的在線維護內置於直接路徑加載操作中當數據顯著變化時運行自動統計信息收集作業。例如,自上次收集統計信息以來,表中超過10%的行被添加/更改。

  • 執行計劃自動管理

    在19c中,資料庫預設的就會啟用對於所有可重用SQL的執行計劃捕獲,然後進行自動的執行計劃評估,評估可以針對AWR中的TOP SQL、SGA、STS中的SQL進行。如果被評估的執行計劃優於當前執行計劃(一般是要有效率 50%以上的提升),會被加入到執行計劃基線庫中,作為後續的執行選擇,而不佳的執行計劃則會被標記為不可接受。有了這個特性,SQL執行計劃的穩定性將更進一步。

  • SQL增強

    在19c中,SQL 功能獲得了進一步的增強,這其中包括對於COUNT DISTINCT的進一步優化,在12c中引入的近似 Distinct操作已經可以為特定SQL帶來極大性能提升,現在基於位圖的COUNT DISTINCT操作繼續為查詢加速。

解讀

  • 優化器方面,一直是Oracle最令人稱道的地方。這一點,還需要國內廠商奮起直追。

  • 優化器後續發展方向是更加智能地管理SQL,減少執行抖動的情況。

10. 軟硬體結合

近些年來,新興硬體的出現對資料庫的發展影響很大。如何利用好這些硬體,甚至從底層架構去適配這些硬體,是後續的發展重點。

  • 基於NVRAM的多級緩存增強

    在資料庫中NVRAM又被作為一級高性能緩存用於加速資料庫,這是非常強大的軟硬結合優化。這一特性應該率先被用於Exadata環境,Exadata將NVRAM放置在了Flash Memory前面,計算節點可以通過RDMA協議,繞過軟體棧,實現高性能的訪問,較傳統協議路徑提速20倍。NVRAM用作Cache和作為直接存儲使用,綜合能力提升了10倍。

  • 持久化內存存儲支持

    自Oracle 19c開始,Oracle就已經開始修改程序以更好的配合持久化內存,提升資料庫性能。在20c中,Oracle明確支持了持久化內存 - Persistent Memory,雖然目前發布的信息是在Exadata中支持,但是軟體的提升是通過的,在各類一體機中,或者是傳統架構中使用持久化內存是毫無障礙的。持久化內存的引入,讓Oracle的存儲多達6級:SATA、SAS、SSD、Flash、PMEM、RAM,冷熱數據分離,分層存儲,可以進行更加精細化的架構設計。整體架構提供小於19個微秒的IO延時。

  • 100Gb乙太網和RoCE

    在Oracle新發布的Exadata X8M一體機中,100Gb的乙太網和RoCE獲得支持,這是第一次在Oracle一體機中引入了基於RoCE的架構;存儲伺服器上,通過PMEM在Flash之前進行加速,RoCE和PMEM提供了極速性能。

11. 多模支持

  • 原生的區塊鏈支持

    隨著區塊鏈技術的不斷成熟和發展,Oracle在其多模的資料庫支持中,引入了原生的區塊鍊表支持。區塊鍊表使客戶可以在需要高度防篡改的數據管理,而又無需在多個組織中分布分類帳或依靠分散的信任模型時使用Oracle資料庫。為了遵循區塊鏈的可信和安全機制,區塊鍊表只能INSERT記錄,而不能修改,同時鏈可以被多方參與者驗證。區塊鍊表,可以和其他常規表進行關聯,進行事務處理或者查詢。

  • 地理信息與全文檢索

    針對Oracle資料庫內置的多模特性,地理信息-Spatial和全文檢索-Text組件,在20c中,通過In-Memory的內存特性,獲得了進一步的支持。對於空間數據,Oracle在內存中為空間列增加空間摘要信息(僅限於內存中,無需外部存儲),通過SIMD矢量快速過濾、替換R-Tree索引等手段,以加速空間數據查詢檢索,可以將查詢速度提升10倍。針對全文檢索(Text,在內存中將倒排索引添加到每個文本列,同時通過將單詞映射到包含單詞的文檔,以內存替換原來的磁碟索引,從而加速全文檢索的性能。通過結合關係數據和文本的混合查詢,全文檢索可以獲得3倍以上的性能提升。

解讀

  • 多模的趨勢,是為了充分利用現有成熟的資料庫生態,實現在單一平台對多類數據的加工處理的需求。

12. 機器學習

  • 增加機器學習算法

    在Oracle的新版本中,更多的機器學習算法被加進來,進而實現更廣泛的算法支持。如分類、回歸、排行、異常檢測等等。

歡迎關注韓老師的公眾號:

韓鋒頻道:

關注技術、管理、隨想。

長按掃碼可關注

  • 去IOE or Not?

  • 拉里·佩奇(Larry Page)的偉大歸來

  • 《吊打面試官》系列-Redis基礎

  • 唯一ID生成算法剖析,看看這篇就夠了

  • 關於大數據運維能力的一些思考

  • DBA菜鳥的進化簡史:不忘初心,記工作中踩過的三個坑

  • 美女主持直播,被突發意外打斷!灣區網友卻高喊: 我懂!超甜

關鍵字: