本文介紹了PolarDB MySQL版的列存索引特性。
簡介
當前主要面向OLTP情境,廣泛應用於線上業務,日常產生大量的資料。但是,基於行存的查詢效能並不能滿足所有應用情境的需求。通常情況下,為了實現複雜分析型查詢,需要將資料從PolarDB MySQL版匯出,然後匯入到外部專用的OLAP系統中再進行分析查詢。這樣一來,需要使用兩套資料庫系統,架構複雜性、營運工作量和成本都會大大增加。
PolarDB MySQL版重磅推出的列存索引(In-Memory Column Index,簡稱IMCI)面向OLAP情境巨量資料量複雜查詢。通過列存索引,PolarDB MySQL版實現了一體化的即時交易處理和即時資料分析的能力,成為一站式HTAP資料庫產品解決方案。通過一套資料庫系統,即可滿足業務的OLTP及OLAP需求。
版本要求
企業版叢集,叢集版本需滿足以下條件之一:
PolarDB MySQL版8.0.1版本,且修訂版本為8.0.1.1.22及以上。
PolarDB MySQL版8.0.2版本,且修訂版本為8.0.2.2.12及以上。
實現形態
為了實現OLAP和OLTP的計算資源隔離,當前僅支援在唯讀節點上實現列存索引,即OLAP查詢請求只發給唯讀節點,而不會發給主節點。至於OLAP查詢請求是發給唯讀行存節點,還是唯讀列存節點,可根據行存/列存分流方案進行配置。
費用說明
該功能可免費使用,只收取唯讀列存節點的費用。唯讀列存節點按照普通的計算節點收費,具體請參見隨用隨付計費規則和訂用帳戶計費規則。同時,列存索引也會佔用一定的儲存空間,儲存空間計費具體請參見儲存類型計費規則。
注意事項
列存索引(IMCI)不支援全球資料庫(GDN)功能。
列存索引功能與無感秒切(熱備節點)功能中的高可用模組(Voting Disk)有一定的互斥。具體如下:
對於核心版本為8.0.1.1.42及以上,或8.0.2.2.23及以上版本的叢集:
若叢集中已有開啟熱備功能的唯讀節點,支援在該叢集中添加唯讀列存節點。
若叢集中已存在唯讀列存節點,則該叢集中的任何唯讀節點都不支援開啟熱備功能。
對於核心版本低於8.0.1.1.42版本,或低於8.0.2.2.23版本的叢集,列存索引與熱備節點完全互斥,即:
若叢集中已有開啟熱備功能的唯讀節點,則不支援在該叢集中添加唯讀列存節點。
說明此時若您需要繼續為叢集添加唯讀列存節點,您需要聯絡阿里雲支援人員,在後台關閉Voting Disk,在關閉過程中會自動重啟所有節點。
若叢集中已存在唯讀列存節點,則該叢集中的任何唯讀節點都不支援開啟熱備功能。
技術原理
列存索引特性在PolarDB MySQL版中的功能架構圖如下:
從以上架構圖可以看到,PolarDB MySQL版從儲存引擎、執行運算元、最佳化器三個層面設計了列存索引的特性:
儲存引擎:支援即時事務層級一致性的行列混合儲存;
執行運算元:面向列存的向量化並存執行運算元,支援極速的單表和多表查詢;
SQL Parser/最佳化器:面向行列混合儲存的CBO最佳化器,可以根據代價自動選擇行存或者列存執行查詢請求;
在此架構下,PolarDB MySQL版實現了100%相容MySQL協議的基礎上,同時獲得數個數量級的查詢加速效果。
核心優勢
PolarDB MySQL版依託列存索引特性,具備如下優勢:
100%相容MySQL:列存具有與MySQL一致的資料類型系統,支援靈活的類型轉換,100%相容MySQL協議;
優秀的HTAP效能:PolarDB在OLTP方面本身具備良好效能。列存索引使其OLAP效能也與專用的OLAP資料庫系統處於同一水平;
行列混合儲存,降低成本:同時支援行儲存和列儲存兩種格式,且即時保證行列的事務級一致。列存更具有低成本的優勢。
適用情境
PolarDB MySQL版的列存索引特性提供了一站式HTAP產品體驗,可以應用於多種業務情境:
對線上資料有即時資料分析需求的情境,如即時報表;
專用資料倉儲情境:依託PolarDB提供的海量資料存放區能力,匯聚多個上遊資料來源,將其作為專用資料倉儲使用;
ETL資料加速計算情境:依託PolarDB基於列存索引提供的強大而靈活的計算能力,在PolarDB中使用SQL來實現ETL功能。
效能提升情況
列存索引功能對SQL查詢操作有明顯的加速作用,查詢效能甚至可以提升百倍。接下來我們以標準TPC-H測試的資料表和SQL為例,體驗列存索引對查詢的加速效果。
測試方法:TPC-H是業界常用的一套基準,由TPC委員會制定發布,用於評測資料庫的分析型查詢能力。TPC-H查詢包含8張資料表、22條複雜的SQL查詢,大多數查詢包含若干表Join、子查詢和Group by彙總等。
本文的TPC-H的實現基於TPC-H的基準測試,並不能與發行的TPC-H基準測試結果相比較,本文中的測試並不符合TPC-H基準測試的所有要求。
資料量:100 GB。
測試結果:
開啟列存索引前後效能對比
下圖展示了開啟列存索引前後分別執行TPC-H的22條查詢語句的查詢回應時間的對比。
開啟列存索引後與ClickHouse效能對比
下圖展示了開啟列存索引後,執行TPC-H的21條查詢語句(Q21除外,ClickHouse不支援)的查詢回應時間,與相同資料量和資料結構的ClickHouse資料庫的對比。
結論:
列存索引對大多數的複雜查詢操作都有加速作用,查詢效能提升非常明顯,甚至可達到百倍。
與傳統OLAP資料庫ClickHouse相比:PolarDB MySQL版開啟列存索引後,與ClickHouse效能相比各有優劣。其中在單表Scan/AGG、Join等情境中表現突出。未來的列存索引特性將在彙總加速、視窗函數等方面持續最佳化和突破。