全部产品
Search
文档中心

云原生数据库 PolarDB:配置行列手动分流

更新时间:Dec 13, 2023

如果您的业务中,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;