PolarDB MySQL版通过RDMA技术对日志传输模块进行了优化,推出了RDMA日志传输(RDMA-based log shipment)技术方案。该方案通过RDMA来替代传统的基于共享存储或TCP的传输方式, 可以把日志传输吞吐量提升100%,并在此基础之上,把复制延迟降低50%以上。本文主要介绍RDMA-based log shipment技术方案的原理、开启方式以及标准场景下的性能测试结果。
RDMA-based log shipment技术原理
PolarDB默认基于共享存储或TCP的传输方式进行日志同步。为了追求更快的日志同步速度,降低日志同步开销,PolarDB引入了RDMA-based log shipment技术。RDMA-based log shipment的技术原理如下:
将RO节点的Redo log buffer当作是RW节点的Redo log buffer的远端镜像;
RW节点在log buffer写盘之前,将Redo log远端异步写到RO节点的log buffer,最后再将位点同步给RO节点;
RO节点通过读取本地的log buffer来替代读取共享存储中的Redo log file,加快复制同步效率。
相比于two-sided操作,RDMA-based log shipment技术使用的one-sided操作基于Read/Write Verbs,无需接收端CPU的参与。通过远程地址+密钥的方式,将日志直接写入到远端RO节点的内存中。
使用限制
集群版本需为PolarDB MySQL版8.0.1版本且内核小版本需为8.0.1.1.33及以上。
全球数据库网络GDN中的从集群不支持开启RDMA日志传输功能。
使用方法
您可以通过loose_innodb_polar_log_rdma_transfer参数开启RDMA日志传输功能。
参数 | 级别 | 说明 |
loose_innodb_polar_log_rdma_transfer | Global | RDMA日志传输功能开关,取值范围:
|
性能提升
降低复制延迟
在多种写入场景下,基于RDMA的日志传输功能都可以极大的降低RO节点的复制延迟。
以32核128 GB的PolarDB MySQL版8.0集群为例,测试数据量为20张表,单表200W数据,进行RO节点的复制延迟测试。分别对比开启和关闭RDMA日志传输功能,在不同Redo速率下,RO节点的复制延迟变化情况。
从上图可以看出,开启RDMA日志传输功能后,随着Redo写入速率的增加,RO节点的复制延迟将大大的降低。
提升PolarDB全局一致性读性能
PolarDB MySQL版开启全局一致性(高性能模式)后,RO节点的复制延迟对性能影响较大。通过RDMA-based log shipment技术可以有效的提升全局一致性读性能。
以8核32 GB的PolarDB MySQL版8.0集群为例,测试数据量为20张表,单表20W数据,进行RO节点的全局一致性读性能测试。分别对比开启和关闭RDMA日志传输功能,在不同的线程数下,RO节点的全局一致性读性能变化情况。
从上图可以看出,开启RDMA日志传输功能后,RO节点的全局一致性读性能提升了20%左右。