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