《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(4) https://developer.aliyun.com/article/1228543?groupCode=polardbforpg
PolarDB-X在混合负载场景下主要有两个方案。其一为采用Lambda架构,技术上使用ETL进行数据同步;其二为TiDB等一套数据库提供HTAP的能力。
PolarDB-X也为混合负载架构,将TP流量路由至主实例,AP流量路由至只读实例。再结合LogIndex+TSO,即可在HTAP架构下提供强一致性读的能力。
我们基于只读实例提供了物理隔离,确保TP和AP流量不会相互干扰。除此之外,还提供了通过cost智能识别工作负载的能力,业务无需识别TP和AP流量,可进行智能判断,减少业务负担。
我们在混合负载场景下做了测试。
首先,开启TPC-C的流量,如果将HTAP能力关闭再运行TPC-H,会发现TPC-H会对TPC-C流量造成较大影响。而开启了HTAP能力之后,可实现TPC-H和TPC-C的物理隔离,很好地满足了TP和AP的稳定性。
PolarDB-X提供了基于代价的选择执行模型。可以通过explain cost指令查看每条SQL估算出来的workload是TP还是AP。如果是个简单的点查,则会基于cost判断其为TP,如果是agg等复杂查询,则会基于cost判断其为AP。
另外,我们提供了explain physical用于查看AP和TP的执行模式。
进行简单查询,然后执行explain cost。可以看到cost会从4个维度进行判断,分别为net、IO、memory、CPU。
查看本次查询的执行模式,显示为TP_LOCAL,表示本次查询为单机TP的执行模式。
如果构造一个复杂查询,对两个亿级别的大表先做join,再做count distinct,两个join的条件不对齐,因此join不下推。在HTAP场景下,得益于MPP查询加速,相对于此前的TP_LOCAL会有3-4倍的性能提升。