前文:
PolarDB分布式版(PolarDB-X) 私有协议2.0(1)
PolarDB分布式版(PolarDB-X) 私有协议2.0(2)
性能测试
DN 上定性评估
针对我们需要优化的线程调度问题,我们通过火焰图进行评估确认。

从上图的XRPC的点查压测火焰图中可以看到,请求执行占用CPU提升到71.79%,CPU资源有较好的应用。 对比文章最开头的旧私有协议的火焰图,可见CPU的利用有了非常可观的提升。

下图展示了 MySQL sql 协议在 MySQL connecter 在 JDBC 下点查压测的火焰图,有效执行 CPU 利用率为64.94%,也低于 XRPC 下的利用率。

DN 上定量评估
echo server
评估一个网络框架收发包能力的最直接的方式就是写个echo server进行压测,这里我们将 XRPC 的网络执行框架和阿里内部常用的 libeasy 进行对比,libeasy 的使用代码在 libeasy_bench 目录下,结果如下,测试环境为 64 core 物理机,XRPC 略高于 libeasy 64线程同步模式的性能。
| 并发 | XRPC | libeasy async 16 listen 64 worker | libeasy async 64 listen 64 worker | libeasy sync 64 threads |
|---|---|---|---|---|
| 2 | 55414.457 | 37486.25 | 37564.242 | 52956.703 |
| 4 | 107255.27 | 73971.2 | 74943.016 | 106999.3 |
| 8 | 203521.3 | 145596.88 | 146340.73 | 208922.2 |
| 16 | 392131.56 | 274835.03 | 276866.94 | 390191.97 |
| 32 | 703287.0 | 480919.72 | 481255.5 | 715153.44 |
| 64 | 1175622.9 | 799120.2 | 757774.44 | 1221337.8 |
| 128 | 1837832.9 | 1047939.56 | 1157251.1 | 1844174.2 |
| 256 | 2649329.2 | 1345222.0 | 1550693.4 | 2556187.2 |
| 512 | 3291273.0 | 1397924.2 | 1342323.6 | 3182367.2 |
| 1024 | 3612264.8 | 1360113.9 | 1440107.8 | 3415289.2 |
select 1
对比新老私有协议及 JDBC 在 select 1 下的性能。新架构性能更高,且在高并发下也能稳定运行。
- 64 core 物理机
| 并发 | JDBC | 老架构 | 新架构 |
|---|---|---|---|
| 2 | 29719.084 | 26994.299 | 29986.0 |
| 4 | 63485.3 | 59082.09 | 66999.305 |
| 8 | 126720.66 | 115059.984 | 126951.61 |
| 16 | 242323.53 | 217389.78 | 232871.14 |
| 32 | 448065.38 | 366213.53 | 423825.47 |
| 64 | 753734.6 | 588699.25 | 733777.9 |
| 128 | 1038840.2 | 821294.5 | 1150645.6 |
| 256 | 1182257.2 | 966579.4 | 1473572.4 |
| 512 | 1177471.2 | 843260.1 | 1555356.1 |
| 1024 | 1147890.2 | 825537.44 | 1514292.5 |
| 2048 | - | - | 1455882.8 |
| 4096 | - | - | 1200290.2 |
- 104 core 物理机
| 并发 | JDBC | 老架构 | 新架构 |
|---|---|---|---|
| 2 | 36907.62 | 33711.63 | 36453.35 |
| 4 | 80340.96 | 67205.28 | 79440.055 |
| 8 | 159827.02 | 137136.58 | 156556.69 |
| 16 | 299065.2 | 264378.7 | 298600.28 |
| 32 | 582958.06 | 506158.16 | 538147.75 |
| 64 | 987595.2 | 854529.56 | 917313.56 |
| 128 | 1383830.9 | 1195628.9 | 1348939.5 |
| 256 | 1622596.8 | 1554815.1 | 1685460.8 |
| 512 | 1799647.1 | 1470166.8 | 1941278.5 |
| 1024 | 1815061.2 | 916179.2 | 2084961.6 |
| 2048 | 1673776.8 | - | 2008663.9 |
| 4096 | - | - | 1820561.0 |
点查
- sysbench表
- --tables='1' --table-size='100000'
- oltp_point_select
- JDBC 走 SQL 查询
- XRPC 测试了走 SQL 查询和走 XPLAN 查询
| 并发 | 64c JDBC | 64c xrpc+xplan | 64c xrpc+sql | 104c JDBC | 104c xrpc+xplan | 104c xrpc+sql |
|---|---|---|---|---|---|---|
| 2 | 16578.027 | 23809.62 | 17772.223 | 25471.36 | 32103.791 | 25454.455 |
| 4 | 36202.38 | 47754.45 | 37122.574 | 54391.56 | 62056.797 | 54073.594 |
| 8 | 71760.65 | 97431.516 | 73274.34 | 106510.695 | 127509.5 | 106510.695 |
| 16 | 137715.45 | 176151.16 | 137329.8 | 195314.94 | 245143.45 | 196580.03 |
| 32 | 254749.1 | 311442.44 | 239416.25 | 367031.2 | 415063.97 | 356066.56 |
| 64 | 413138.38 | 526345.1 | 407636.72 | 640735.9 | 721447.75 | 604598.06 |
| 128 | 502932.12 | 720127.94 | 570637.7 | 919598.2 | 1052270.2 | 939035.44 |
| 256 | 539180.5 | 843516.9 | 628808.2 | 1084268.9 | 1281496.0 | 1163551.5 |
| 512 | 534332.7 | 854824.5 | 610362.25 | 1100764.5 | 1340563.2 | 1220010.0 |
| 1204 | 510401.28 | 843499.75 | 623204.1 | 1040283.5 | 1320433.1 | 1187091.4 |
| 2048 | - | 835596.94 | 597368.94 | - | 1241896.4 | 1102568.6 |
| 4096 | - | 771388.9 | 527704.0 | - | 1131214.1 | 987188.8 |
PolarDB-X 开箱性能
- XRPC 在公共云 5.4.17 默认打开(老版本升级上来的,可以在存储节点参数中,将 new_rpc = 'ON' 打开)
- XRPC 在开源版中,rpc_version=2 时默认打开
- XRPC 对 OLTP 类请求性能有较大提升,对 OLAP 类请求性能持平
下列图片为,阿里云官网购买 4*8c64g 的实例,按官网测试文档配置后,新老私有协议的性能对比。
sysbench DRDS 模式性能对比

sysbench 单表打散模式性能对比

TPCC DRDS 模式性能对比

TPCC auto 模式性能对比

各种不同实例规格下的性能可以参考下列性能测试文档中,版本5.4.17的性能数据:
总结
PolarDB-X 的私有协议2.0,内部也称之为 XRPC,完全重构了存储节点上的私有协议网络、调度、执行框架,实现了连接、会话、线程的解绑,并完全摆脱了 MySQL X plugin 的依赖,成为完全独立的 plugin。同时实现了在 MySQL 5.7 8.0 下同一套代码,支持 ARM 等国产化平台,极大提升了代码的可维护性和自主可控性。同时针对原始设计中的局限进行了优化改进,对 OLTP 类请求有着普适的性能提升,也为未来添加新功能提供了更多的可能。
本文来源:PolarDB-X知乎号,关注阅读更多干货好文




