行列路由機制
本文為您介紹如何通過行列路由機制,分流業(yè)務中同時存在的OLTP類業(yè)務和OLAP類業(yè)務。
背景信息
PolarDB-X有以下三種類型實例:
主實例:主要用于承擔事務處理(TP)類流量,默認訪問行存數(shù)據(jù),并對外提供集群地址。該地址不僅支持事務處理流量的讀寫分離配置,還支持將分析處理(AP)流量轉(zhuǎn)發(fā)給列存只讀實例和普通的只讀實例。
只讀實例:主要用于承擔事務處理(TP)類的讀流量,默認訪問行存數(shù)據(jù),并與主實例物理隔離(可對外單獨提供連接地址)。常用于應用程序自身的讀寫分離配置或ETL(提取、轉(zhuǎn)換、加載)場景。
列存只讀實例:主要用于承擔分析處理(AP)類的讀流量,只允許訪問列存數(shù)據(jù),并與主實例物理隔離(可對外單獨提供連接地址)。常用于業(yè)務中有數(shù)據(jù)分析的場景。
因為行存數(shù)據(jù)向列存數(shù)據(jù)同步存在秒級延遲,所以為了避免主實例讀取數(shù)據(jù)時出現(xiàn)不一致的問題,默認情況下,主實例和只讀實例都只允許訪問行存數(shù)據(jù)。
在SQL語句前添加如下前綴代碼,可以將該SQL路由到列存只讀實例執(zhí)行:
/*+TDDL: worload_type=ap enable_columnar_optimizer=true*/
主實例和列存只讀實例并存的路由機制
混合負載場景
如果您的業(yè)務中,OLAP類型和OLTP類型的SQL只能使用同一個連接訪問數(shù)據(jù)庫,這種情況下您可以直接使用主實例提供的集群地址來訪問數(shù)據(jù)庫。系統(tǒng)會按照SQL的掃描代價自動路由 ,將OLAP流量自動路由給列存只讀實例執(zhí)行,而OLTP流量則繼續(xù)在主實例上執(zhí)行。
自動路由規(guī)則:
掃描代價的預估值高于閾值的讀流量,會被判定為AP流量,SQL將會被自動路由至列存只讀實例執(zhí)行。
掃描代價的預估值低于閾值的讀流量、事務內(nèi)的讀流量和寫入流量都會被判定為TP流量,SQL將會被自動路由到主實例執(zhí)行。
如果一個主實例有多個列存只讀實例,系統(tǒng)會自動采用大規(guī)模多級并行處理(Massively Parallel Processing,MPP)調(diào)度執(zhí)行。
自動路由配置步驟:
在頁面左上角選擇目標實例所在地域。
在實例列表頁,單擊PolarDB-X 2.0頁簽。
單擊目標主實例ID,進入基本信息頁面。
在連接信息區(qū)域,單擊配置管理。
在配置管理對話框中執(zhí)行以下操作:
在資源配置區(qū)域的可選實例列表中,選擇目標列存只讀實例顯示在已選實例列表中。
在列存只讀配置設置區(qū)域,單擊開啟,再單擊確定。
列存只讀實例和主實例的數(shù)據(jù)同步存在秒級延遲,如果對主實例和列存只讀實例的數(shù)據(jù)有一致性要求,不建議您采用自動路由機制。
負載分離場景
如果您的業(yè)務中,OLAP類型與OLTP類型的業(yè)務基于不同的應用程序訪問數(shù)據(jù)庫,則可以分別為應用程序配置不同的連接地址,將OLTP業(yè)務連接到集群地址,而OLAP業(yè)務程序連接到列存只讀實例的地址,從而實現(xiàn)主實例和列存只讀實例的分流。
主實例和只讀實例并存的路由機制
透明讀寫分離
PolarDB-X提供了透明的強一致讀寫分離能力。該方案的最大優(yōu)勢是應用不需要改動代碼,只需要連接主實例的集群地址,系統(tǒng)會自動將一定比例(比例可配置)的讀流量路由到只讀實例。
透明讀寫分離配置步驟:
在頁面左上角選擇目標實例所在地域。
在實例列表頁,單擊PolarDB-X 2.0頁簽。
單擊目標主實例ID,進入基本信息頁面。
在連接信息區(qū)域,單擊配置管理。
在配置管理對話框中執(zhí)行如下操作:
在資源配置區(qū)域的可選實例列表中,選擇目標行存只讀實例顯示在已選實例列表中。
在行存只讀配置設置區(qū)域按需設置。
配置項說明:
配置項
選項
說明
強一致性讀
強一致性
路由到只讀DN的請求可以讀取到最新數(shù)據(jù)。只讀DN延遲超過閾值后,系統(tǒng)會自動將業(yè)務請求路由到其他延遲正常的只讀DN(如果有)或主實例(需設置只讀流量切回主實例選項為開啟)。
弱一致性
路由到只讀DN的請求只能讀取到只讀DN的最新數(shù)據(jù)。
開啟MPP查詢加速
開啟/關閉
基于統(tǒng)計信息做代價估算,將AP類的復雜查詢路由到只讀實例(CN+DN)做MPP加速。
讀寫分離
路由到只讀實例流量的占比
將原先路由給主實例DN的下推查詢按一定的比例路由到只讀DN。
只讀實例延遲閾值(s)
只讀DN延遲超過閾值后,系統(tǒng)會自動將業(yè)務請求路由到其他延遲正常的只讀DN上或主實例(需設置只讀流量切回主實例選項為開啟)。
只讀流量切回主實例
開啟狀態(tài)時,只讀DN延遲超過閾值,只讀流量會切回到主實例。
單擊確定。
手動讀寫分離
如果您的業(yè)務中希望在應用側(cè)實現(xiàn)讀寫分離,可以使用不同的連接地址,寫操作配置主實例的連接地址,讀操作配置只讀實例的連接地址。這種方案的最大特點是讀寫流量相互隔離,彼此不受影響。
單主實例的路由機制
在只有主實例的情況下,應用默認只能訪問行存數(shù)據(jù)。
常見問題
購買主實例和列存只讀實例后,怎么使用列存加速查詢?
答:一般有兩種方式來使用列存只讀實例:
掃描代價基于統(tǒng)計信息的計算方式是否會出現(xiàn)誤判,導致查詢沒有按預想路由到列存只讀實例?
答:因為目前統(tǒng)計信息是定時采集,所以會存在統(tǒng)計信息滯后,導致掃描代價計算不準,導致查詢的路由結(jié)果不符合預期。對于特別重要的復雜查詢,建議您對該SQL綁定列存HINT,這樣可以確保這些SQL一定會路由給列存只讀實例執(zhí)行。
怎么對特定的SQL綁定HINT列存,且不需要改動應用代碼?
答:PolarDB-X提供了執(zhí)行計劃管理功能,對特定SQL執(zhí)行路由綁定操作,之后數(shù)據(jù)庫會自動將這類SQL路由到列存只讀實例執(zhí)行。
查詢在列存只讀實例執(zhí)行,相比主實例執(zhí)行,性能并沒有明顯提升,怎么解決?
答:因為列存只讀實例執(zhí)行的一般是復雜查詢,該類查詢對實例的規(guī)格要求較高,所以建議您購買至少32C及以上規(guī)格的列存只讀實例(該實例性價比非常高)以獲得更好的性能。