如果您的業務中既包含OLTP類業務又包含OLAP類業務,則為了實現業務的最大效能,您可以基於列存索引特性,通過資料庫代理的叢集地址功能,實現OLAP查詢引流到列存節點、OLTP查詢引流到行存節點。
背景資訊
PolarDB MySQL版支援兩種唯讀節點類型:
唯讀行存節點:該類型的唯讀節點基於行儲存處理讀請求。行存節點在處理OLTP讀請求時具有更高的效能。
唯讀列存節點:該類型的唯讀節點基於列儲存處理讀請求。列存節點在處理OLAP讀請求(如複雜的SQL和分析型SQL)時,具有遠超行存節點的效能。
叢集初始包含一個主節點和一個唯讀行存節點。您可以在添加唯讀節點的時候選擇添加的節點是行存或是列存。具體請參見添加唯讀列存節點。
為了實現SQL查詢的最大效能,您可以通過配置叢集地址(Endpoint),實現OLAP查詢引流到列存節點、OLTP查詢引流到行存節點。
當前支援手動分流和自動分流兩種方案。
OLTP與OLAP業務混合負載情境下行存和列存自動分流
如果您的業務中,OLAP類型與OLTP類型的請求是通過同一個應用程式訪問資料庫,此時可實現將兩類業務的讀請求按照掃描的行數進行自動分流,分別分流到列存節點或行存節點。
若要實現行存和列存自動分流,叢集地址需要滿足以下條件中的任意一種:
叢集地址的讀寫入模式設定為可读可写(自动读写分离)。
叢集地址的讀寫入模式設定為只读,並且叢集地址的負載平衡原則設定為基於活躍請求數負載平衡。
分流規則:
OLTP類業務:一般包含讀和寫的請求。寫請求統一由主節點處理,讀請求由唯讀行存節點或主節點處理。
OLAP類業務:一般僅包含讀請求。讀請求統一由唯讀列存節點處理。
自動分流方案:
主節點和唯讀列存節點分流:由於主節點也屬於行存節點,因此也可處理OLTP類讀請求。該方案下,寫請求以及OLTP類讀請求分流至主節點,OLAP類讀請求分流至唯讀列存節點。
唯讀行存節點和唯讀列存節點分流:該方案下,寫請求依舊分流至主節點,OLTP類讀請求分流至唯讀行存節點或主節點,OLAP類讀請求分流至唯讀列存節點。
自動分流判斷標準:
低於SQL語句的預估執行代價閾值的請求將被引流至行存節點上(或者主節點)執行。多個行存節點的情況下,具體引流至哪個行存節點,根據負載平衡自動判定。
高於SQL語句的預估執行代價閾值的請求將被引流至列存節點上執行。多個列存節點的情況下,具體引流至哪個列存節點,根據負載平衡自動判定。
具體配置方式可參見配置行列自動分流。
由於採樣精度、採樣方式等原因,最佳化器預估的執行代價可能會與實際值偏差較大,導致部分慢查詢被自動分流至行存節點上。為了避免該情況出現,您可以開啟自適應執行能力,將錯誤分流到行存的慢查詢自動切換到列存執行,以保證執行效率。
OLTP與OLAP業務獨立情境下行存和列存手動分流
若您的業務中,OLAP類型與OLTP類型的業務基於不同應用程式訪問資料庫,則可分別為這些應用程式配置不同的叢集地址,然後將行存節點和列存節點分別配置到不同叢集地址(Endpoint)的服務節點中,從而實現行存和列存分流。
分流規則:
OLTP類業務:一般包含讀和寫的請求。寫請求統一由主節點處理,讀請求由唯讀行存節點或主節點處理。
OLAP類業務:一般僅包含讀請求。讀請求統一由唯讀列存節點處理。
手動分流方案(讀寫入模式為可读可写(自动读写分离)或只读均可):
將OLTP類的應用與不含唯讀列存節點的叢集地址進行關聯,讀請求由主節點或唯讀行存節點處理。
將OLAP類的應用與僅包含唯讀列存節點的叢集地址進行關聯,讀請求由唯讀列存節點處理。
具體配置方式可參見配置行列手動分流。