全部產品
Search
文件中心

PolarDB:配置行列手動分流

更新時間:Dec 27, 2024

如果您的業務中,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;