全部产品
Search
文档中心

云原生数据库 PolarDB:分流方案概述

更新时间:Mar 13, 2024

如果您的业务中既包含OLTP类业务又包含OLAP类业务,则为了实现业务的最大性能,您可以基于列存索引特性,通过数据库代理的集群地址功能,实现OLAP查询引流到列存节点、OLTP查询引流到行存节点。

背景信息

PolarDB MySQL版支持两种只读节点类型:

  • 只读行存节点:该类型的只读节点基于行存储处理读请求。行存节点在处理OLTP读请求时具有更高的性能。

  • 只读列存节点:该类型的只读节点基于列存储处理读请求。列存节点在处理OLAP读请求(如复杂的SQL和分析型SQL)时,具有远超行存节点的性能。

说明

集群初始包含一个主节点和一个只读行存节点。您可以在添加只读节点的时候选择添加的节点是行存或是列存。具体请参见添加只读列存节点

为了实现SQL查询的最大性能,您可以通过配置集群地址(Endpoint),实现OLAP查询引流到列存节点、OLTP查询引流到行存节点。

当前支持手动分流和自动分流两种方案。

OLTP与OLAP业务混合负载场景下行存和列存自动分流

如果您的业务中,OLAP类型与OLTP类型的请求是通过同一个应用程序访问数据库,此时可实现将两类业务的读请求按照扫描的行数进行自动分流,分别分流到列存节点或行存节点。

说明

若要实现行存和列存自动分流,集群地址需要满足以下条件中的任意一种:

  • 集群地址的读写模式设置为可读可写(自动读写分离)

  • 集群地址的读写模式设置为只读,并且集群地址的负载均衡策略设置为基于活跃请求数负载均衡

分流规则:

  • OLTP类业务:一般包含读和写的请求。写请求统一由主节点处理,读请求由只读行存节点或主节点处理。

  • OLAP类业务:一般仅包含读请求。读请求统一由只读列存节点处理。

自动分流方案:

  • 主节点和只读列存节点分流:由于主节点也属于行存节点,因此也可处理OLTP类读请求。该方案下,写请求以及OLTP类读请求分流至主节点,OLAP类读请求分流至只读列存节点。

  • 只读行存节点和只读列存节点分流:该方案下,写请求依旧分流至主节点,OLTP类读请求分流至只读行存节点或主节点,OLAP类读请求分流至只读列存节点。

自动分流判断标准:

  • 低于SQL语句的预估执行代价阈值的请求将被引流至行存节点上(或者主节点)执行。多个行存节点的情况下,具体引流至哪个行存节点,根据负载均衡自动判定。

  • 高于SQL语句的预估执行代价阈值的请求将被引流至列存节点上执行。多个列存节点的情况下,具体引流至哪个列存节点,根据负载均衡自动判定。

混合下分流

具体配置方式可参见配置行列自动分流

说明

由于采样精度、采样方式等原因,优化器预估的执行代价可能会与实际值偏差较大,导致部分慢查询被自动分流至行存节点上。为了避免该情况出现,您可以开启自适应执行能力,将错误分流到行存的慢查询自动切换到列存执行,以保证执行效率。

OLTP与OLAP业务独立场景下行存和列存手动分流

若您的业务中,OLAP类型与OLTP类型的业务基于不同应用程序访问数据库,则可分别为这些应用程序配置不同的集群地址,然后将行存节点和列存节点分别配置到不同集群地址(Endpoint)的服务节点中,从而实现行存和列存分流。

分流规则:

  • OLTP类业务:一般包含读和写的请求。写请求统一由主节点处理,读请求由只读行存节点或主节点处理。

  • OLAP类业务:一般仅包含读请求。读请求统一由只读列存节点处理。

手动分流方案(读写模式为可读可写(自动读写分离)只读均可):

  • 将OLTP类的应用与不含只读列存节点的集群地址进行关联,读请求由主节点或只读行存节点处理。

  • 将OLAP类的应用与仅包含只读列存节点的集群地址进行关联,读请求由只读列存节点处理。

独立

具体配置方式可参见配置行列手动分流