本文為您介紹如何通過行列路由機制,分流業務中同時存在的OLTP類業務和OLAP類業務。
背景資訊
PolarDB-X有以下三種類型執行個體:
主執行個體:主要用於承擔交易處理(TP)類流量,預設訪問行存資料,並對外提供叢集地址。該地址不僅支援交易處理流量的讀寫分離配置,還支援將分析處理(AP)流量轉寄給列存唯讀執行個體和普通的唯讀執行個體。
唯讀執行個體:主要用於承擔交易處理(TP)類的讀流量,預設訪問行存資料,並與主執行個體物理隔離(可對外單獨提供串連地址)。常用於應用程式自身的讀寫分離配置或ETL(提取、轉換、載入)情境。
列存唯讀執行個體:主要用於承擔分析處理(AP)類的讀流量,只允許訪問列存資料,並與主執行個體物理隔離(可對外單獨提供串連地址)。常用於業務中有資料分析的情境。
因為行存資料向列存資料同步存在秒級延遲,所以為了避免主執行個體讀取資料時出現不一致的問題,預設情況下,主執行個體和唯讀執行個體都只允許訪問行存資料。
在SQL語句前添加如下首碼代碼,可以將該SQL路由到列存唯讀執行個體執行:
/*+TDDL: workload_type=ap enable_columnar_optimizer=true*/
主執行個體和列存唯讀執行個體並存的路由機制
混合負載情境
如果您的業務中,OLAP類型和OLTP類型的SQL只能使用同一個串連訪問資料庫,這種情況下您可以直接使用主執行個體提供的叢集地址來訪問資料庫。系統會按照SQL的掃描代價自動路由 ,將OLAP流量自動路由給列存唯讀執行個體執行,而OLTP流量則繼續在主執行個體上執行。
自動路由規則:
掃描代價的預估值高於閾值的讀流量,會被判定為AP流量,SQL將會被自動路由至列存唯讀執行個體執行。
掃描代價的預估值低於閾值的讀流量、事務內的讀流量和寫入流量都會被判定為TP流量,SQL將會被自動路由到主執行個體執行。
如果一個主執行個體有多個列存唯讀執行個體,系統會自動採用大規模多級平行處理(Massively Parallel Processing,MPP)調度執行。
自動路由配置步驟:
在頁面左上方選擇目標執行個體所在地區。
在實例列表頁,單擊PolarDB-X 2.0頁簽。
單擊目標主執行個體ID,進入基本資料頁面。
在串連資訊地區,單擊組態管理。
在組態管理對話方塊中執行以下操作:
在資源配置地區的可選執行個體列表中,選擇目標列存唯讀執行個體顯示在已選執行個體列表中。
在列存唯讀配置設定地區,單擊開啟,再單擊確定。
列存唯讀執行個體和主執行個體的資料同步存在秒級延遲,如果對主執行個體和列存唯讀執行個體的資料有一致性要求,不建議您採用自動路由機制。
負載分離情境
如果您的業務中,OLAP類型與OLTP類型的業務基於不同的應用程式訪問資料庫,則可以分別為應用程式配置不同的串連地址,將OLTPBusiness Connectivity到叢集地址,而OLAP業務程式串連到列存唯讀執行個體的地址,從而實現主執行個體和列存唯讀執行個體的分流。
主執行個體和唯讀執行個體並存的路由機制
透明讀寫分離
PolarDB-X提供了透明的強一致讀寫分離能力。該方案的最大優勢是應用不需要改動代碼,只需要串連主執行個體的叢集地址,系統會自動將一定比例(比例可配置)的讀流量路由到唯讀執行個體。
透明讀寫分離配置步驟:
在頁面左上方選擇目標執行個體所在地區。
在實例列表頁,單擊PolarDB-X 2.0頁簽。
單擊目標主執行個體ID,進入基本資料頁面。
在串連資訊地區,單擊組態管理。
在組態管理對話方塊中執行如下操作:
在資源配置地區的可選執行個體列表中,選擇目標行存唯讀執行個體顯示在已選執行個體列表中。
在行存唯讀配置設定地區按需設定。
配置項說明:
配置項
選項
說明
強一致性讀
強一致性
路由到唯讀DN的請求可以讀取到最新資料。唯讀DN延遲超過閾值後,系統會自動將業務請求路由到其他延遲正常的唯讀DN(如果有)或主執行個體(需設定唯讀流量切回主執行個體選項為開啟)。
弱一致性
路由到唯讀DN的請求只能讀取到唯讀DN的最新資料。
開啟MPP查詢加速
開啟/關閉
基於統計資訊做代價估算,將AP類的複雜查詢路由到唯讀執行個體(CN+DN)做MPP加速。
讀寫分離
路由到唯讀執行個體流量的佔比
將原先路由給主執行個體DN的下推查詢按一定的比例路由到唯讀DN。
唯讀執行個體延遲閾值(s)
唯讀DN延遲超過閾值後,系統會自動將業務請求路由到其他延遲正常的唯讀DN上或主執行個體(需設定唯讀流量切回主執行個體選項為開啟)。
唯讀流量切回主執行個體
開啟狀態時,唯讀DN延遲超過閾值,唯讀流量會切回到主執行個體。
單擊確定。
手動讀寫分離
如果您的業務中希望在應用側實現讀寫分離,可以使用不同的串連地址,寫操作配置主執行個體的串連地址,讀操作配置唯讀執行個體的串連地址。這種方案的最大特點是讀寫流量相互隔離,彼此不受影響。
單主執行個體的路由機制
在只有主執行個體的情況下,應用預設只能訪問行存資料。
常見問題
購買主執行個體和列存唯讀執行個體後,怎麼使用列存加速查詢?
答:一般有兩種方式來使用列存唯讀執行個體:
掃描代價基於統計資訊的計算方式是否會出現誤判,導致查詢沒有按預想路由到列存唯讀執行個體?
答:因為目前統計資訊是定時採集,所以會存在統計資訊滯後,導致掃描代價計算不準,導致查詢的路由結果不符合預期。對於特別重要的複雜查詢,建議您對該SQL繫結資料行存HINT,這樣可以確保這些SQL一定會路由給列存唯讀執行個體執行。
怎麼對特定的SQL綁定HINT列存,且不需要改動應用代碼?
答:PolarDB-X提供了執行計畫管理功能,對特定SQL執行路由綁定操作,之後資料庫會自動將這類SQL路由到列存唯讀執行個體執行。
查詢在列存唯讀執行個體執行,相比主執行個體執行,效能並沒有明顯提升,怎麼解決?
答:因為列存唯讀執行個體執行的一般是複雜查詢,該類查詢對執行個體的規格要求較高,所以建議您購買至少32C及以上規格的列存唯讀執行個體(該執行個體性價比非常高)以獲得更好的效能。