如果您的業務中,OLAP類型與OLTP類型的業務基於不同的應用程式訪問資料庫,則可分別為這些應用程式配置不同的叢集地址,然後將行存節點和列存節點分別配置到不同叢集地址(Endpoint)的服務節點中,從而實現行存和列存分流。
手動分流方案說明
分流規則:
OLTP業務:一般包含讀和寫的請求。寫請求統一轉寄至主節點處理,讀請求由唯讀行存節點或主節點處理。
OLAP業務:一般僅包含讀請求。讀請求統一由唯讀列存節點處理。
手動分流方案(讀寫入模式為可读可写(自动读写分离)或只读均可):
將OLTP類的應用與不含唯讀列存節點的叢集地址進行關聯,讀請求由主節點或唯讀行存節點處理。
將OLAP類的應用與僅包含唯讀列存節點的叢集地址進行關聯,讀請求由唯讀列存節點處理。

操作步驟
您需要為OLTP類業務和OLAP類業務分別配置不同的叢集地址,配置叢集地址的方式可參見管理串連地址。
在配置叢集地址的過程中,有如下注意事項:
針對OLTP類業務的叢集地址:
若在只读模式下,服務節點只需包含唯讀行存節點。
若在可读可写(自动读写分离)模式下,服務節點建議包含至少一個唯讀行存節點。此時若將主库是否接受读設定為是,則讀請求也會發往主節點。
說明可读可写(自动读写分离)模式下,無論主節點是否已被添加在服務節點中,所有寫請求只會發往主節點。
針對OLAP類業務的叢集地址:由於OLAP類業務一般僅包含讀請求,因此建議設定為只读模式。該模式下服務節點需要包含至少一個唯讀列存節點。
通過HINT文法強制執行行存或列存執行計畫
如果使用行存和列存手動分流沒有達到預期效果,您可以使用HINT文法強制執行行存或列存執行計畫。
HINT文法僅對指定的SQL語句生效,對其它串連或同一個串連下的其它SQL語句沒有影響。如果在5.7.7版本之前的MySQL用戶端執行
HINT文法,則在串連資料庫引擎時需要添加--comments選項。您可以使用mysql --version命令來查看MySQL用戶端版本。
強制執行列存執行計畫。
在唯讀列存節點上,SQL語句會根據預估執行代價自動選擇列存執行計畫或行存執行計畫,具體的規則為:當SQL語句的預估執行代價大於
loose_cost_threshold_for_imci的值時,使用列存執行計畫。否則,使用行存執行計畫。如果需要強制某些SQL語句選擇列存執行計畫,您可以通過HINT命令降低loose_cost_threshold_for_imci的值。例如:/*FORCE_IMCI_NODES*/EXPLAIN SELECT /*+ SET_VAR(cost_threshold_for_imci=0) */ COUNT(*) FROM t1 WHERE t1.a > 1;說明通過
/*+SET_VAR()*/修改閾值時,需要刪掉參數首碼loose_,否則HINT語句不生效。強制執行行存執行計畫。
您可以通過
HINT文法將USE_IMCI_ENGINE的值修改為OFF,來強制SQL語句使用行存執行計畫。樣本如下:EXPLAIN SELECT /*+ SET_VAR(USE_IMCI_ENGINE=OFF) */ COUNT(*) FROM t1 WHERE t1.a > 1;