當您的業務同時涉及高並發的事務型處理(OLTP)和複雜的分析型處理(OLAP)兩種情境時,您可以為RDS MySQL執行個體添加DuckDB分析唯讀執行個體。通過資料庫代理實現HTAP自動行列分流或通過HINT文法手動分流,將OLAP查詢請求路由至DuckDB分析唯讀執行個體,OLTP查詢請求路由至主執行個體或普通唯讀執行個體,助力企業高效實現一體化交易處理與資料分析。
功能簡介
RDS MySQL的HTAP自動行列分流方案的核心在於充分利用不同儲存引擎的優勢。通過資料庫代理根據SQL查詢的預估執行代價,自動將請求分發至最適合的執行個體類型,從而實現業務隔離與效能最佳化。
執行個體類型
行存執行個體:RDS MySQL主執行個體和普通唯讀執行個體,採用InnoDB引擎,適合處理高並發的OLTP讀寫請求。
列存執行個體:DuckDB分析唯讀執行個體,採用DuckDB引擎,適合複雜的OLAP分析查詢。
分流方式
RDS MySQL支援以下兩種行列分流方式:
HTAP行列自動分流:根據SQL的執行代價,自動將OLAP類型和OLTP類型的請求進行分流,分別導向列存執行個體或行存執行個體。
通過HINT文法手動分流:當自動分流效果不理想,或MySQL版本不支援代價估計時,您可以使用
HINT文法強制指定分流目標。
查看SQL預估執行代價
在使用自動分流功能時,您可以通過SHOW STATUS LIKE 'Last_query_cost'命令查詢SQL語句的預估執行代價,以便瞭解分流決策依據。建議先執行EXPLAIN語句,再查詢執行代價。
樣本
查詢語句SELECT COUNT(*) FROM sbtest5.sbtest1的預估執行代價:
EXPLAIN SELECT COUNT(*) FROM sbtest5.sbtest1;
SHOW STATUS LIKE 'Last_query_cost';
-- 查詢結果樣本:
+-------------------+---------------+
| Variable_name | Value |
+-------------------+---------------+
| Last_query_cost | 84454.999000 |
+-------------------+---------------+查詢結果顯示,該SQL語句的預估執行代價為84454.999000。系統會根據此代價值判斷是否將查詢路由至列存執行個體。
適用範圍
如需使用HTAP行列自動分流,主執行個體需滿足以下條件:
大版本為MySQL 8.0(小版本為20250731及以上)或5.7(小版本為20260228及以上)。
已添加DuckDB分析唯讀執行個體。
已開通資料庫代理,且資料庫代理版本為2.25.8及以上。
升級MySQL核心小版本和資料庫代理版本請參見升級核心小版本和升級資料庫代理核心小版本。
注意事項
開啟HTAP行列自動分流時,目標資料庫代理串連地址的讀寫屬性需要設定為讀寫。
DuckDB分析唯讀執行個體的讀權重只作用於DuckDB分析唯讀執行個體間的負載平衡,不影響行存執行個體與列存執行個體之間的分流邏輯。
當所有DuckDB分析唯讀執行個體處於滿負載狀態時,後續的分析型請求將會在DuckDB分析唯讀執行個體中排隊等待處理。
將RDS MySQL代理串連地址的讀權重設定為自訂後,該主執行個體下新增的DuckDB分析唯讀執行個體的讀權重預設為0,需要手動設定。
您可以靈活設定資料庫代理的延遲閾值、一致性層級、讀寫屬性、讀權重,詳情參見設定資料庫代理。
開啟HTAP行列自動分流
開啟自動行列分流
登入RDS管理主控台,在左側單擊執行個體列表,然後在上方選擇地區。
在執行個體列表中單擊目標主執行個體ID(帶有
標識)。在左側導覽列,單擊資料庫代理。
在串連資訊地區,單擊目標代理串連地址操作列的修改配置。
在彈出的對話方塊內,開啟HTAP行列自動分流,然後單擊確定。
分配DuckDB分析唯讀執行個體的讀權重
當您的RDS MySQL執行個體配置有多個DuckDB分析唯讀執行個體時,您可以根據業務需求為每個執行個體設定相應的讀權重。RDS MySQL代理串連地址的讀權重預設為系統分配,執行個體的讀權重越高,處理的讀請求越多。
登入RDS管理主控台,在左側單擊執行個體列表,然後在上方選擇地區。
在執行個體列表中單擊目標主執行個體ID(帶有
標識)。在左側導覽列,單擊資料庫代理。
在串連資訊地區,單擊目標代理串連地址操作列的修改配置。
在彈出的對話方塊內,將讀權重分配設定為自訂。
設定為自訂後,該主執行個體下新增的DuckDB分析唯讀執行個體的讀權重預設為0,需要手動設定。
在DuckDB分析唯讀執行個體讀權重分配地區,根據業務需求設定每個DuckDB分析唯讀執行個體的讀權重。
例如,假設主執行個體有3個DuckDB分析唯讀執行個體,讀權重分別為0、100、200和200,則表示主執行個體不處理讀請求(寫請求仍然自動發往主執行個體),3個唯讀執行個體按照1:2:2的比例處理讀請求。
說明讀權重的取值範圍為0~10000。
若DuckDB分析唯讀執行個體被刪除,則該執行個體的權重會被自動移除,其他執行個體權重不變。
修改本參數即時生效,不會造成業務不可用。修改完成後,已存在的串連不會斷開重連,新串連和存量老串連都會根據新權重進行分配。
通過HINT文法強制手動分流
當自動分流效果不理想,或因MySQL版本限制無法使用代價估算時,您可以通過在SQL語句中添加Hint來強制指定查詢路由。Hint僅對當前SQL生效。
強制分流至列存執行個體(DuckDB分析唯讀執行個體)
/*force_ap_nodes*/ SELECT COUNT(*) FROM <目標表名>;強制分流至行存執行個體(主執行個體或唯讀執行個體)
SELECT /*+set_var(rds_cost_threshold_for_duckdb = 0)*/ COUNT(*) FROM <目標表名>;
相關文檔與API
相關API
通過API(DescribeDBProxy)查詢資料庫代理詳細資料。
通過API(DescribeDBProxyEndpoint)查詢資料庫代理的串連地址資訊。
通過API(ModifyDBProxyEndpoint)設定資料庫代理串連地址的存取原則。
附錄:HTAP行列自動分流原理
資料代理接收查詢請求後,首先將其轉寄至行存執行個體(主執行個體或唯讀執行個體)。
行存執行個體內的最佳化器對查詢進行分析,評估執行代價是否超過設定閾值。
低於SQL語句預估執行代價閾值的請求將被引流至行存執行個體(主執行個體或唯讀執行個體)上執行。多個唯讀執行個體的情況下,根據負載平衡自動判定。
高於SQL語句的預估執行代價閾值的請求將被引流至列存執行個體(DuckDB分析唯讀執行個體)上執行。多個列存執行個體的情況下,根據負載平衡自動判定。