Author: 劲川
PolarDB作为阿里云自研的云原生数据库,基于存算分离的架构,具备一写多读、多活容灾、全球部署、HTAP等特性。上线五周年多以来,PolarDB已经广泛应用到了各行各业,有多篇papers发表在SIGMOD、VLDB、FAST等顶级会议上。相对应的,倚天710处理器作为阿里云自研的国产化芯片,基于新一代CIPU架构,实现了计算、存储、网络性能的数量级提升,有效应用于云原生、视频编解码、高性能计算、基于CPU的机器学习和游戏服务等场景。那么当PolarDB遇上了倚天处理器,当自研数据库碰上了自研芯片又释放出什么样的火花呢? 在开始全文前,我们回顾一下倚天处理器的独特优势。一方面,随着传统 x86 CPU的持续迭代,服务器和数据中心的功耗和成本在持续攀升,每千瓦芯片功耗在生命周期内带来上万美金的成本。另一方面,在云这类面向多租户的场景下,超线程(HT)架构的问题逐渐暴露出来,面对一些高密计算任务时很难满足业务需求,共享缓存与物理核的机制导致租户之间处理任务可能需要相互排队,导致性能大幅下降;或者互相干扰的情况导致性能波动。基于ARM架构的倚天处理器很好地解决这两个问题,独享物理核独享L1/L2 Cache,无超线程概念,在实现高性能(减少干扰)的同时实现了低功耗/低成本。 PolarDB 针对自研倚天芯片,从芯片到数据库内核全链路优化,性能相比优化前提升超50%。在 sysbench OLTP 读写混合场景下,PolarDB 倚天性能大幅领先同规格自建 MySQL 实例。
为了充分发挥出自研数据库PolarDB在自研芯片倚天上的性能,PolarDB团队从芯片侧到数据库内核做了全路径的优化。用户业务和应用从x86架构数据库向倚天ECS架构数据库迁移的过程中,业务代码改造量是零,成功实现无缝迁移:用户只需要把数据库的连接地址,从x86架构改成PolarDB On倚天ECS的地址即可。
针对倚天处理器这一全新的ARM体系,PolarDB从芯片到操作系统,进行了全栈的深度优化:
为了获取良好的性能,PolarDB在内核层面做了深度优化。其中,尤其PolarDB在多线程扩展性方面的优化,相较于传统MySQL,在倚天等多核处理器上发挥出了明显的优势:
通过对 sysbench OLTP 读写、只读和只写三种场景和 IO bound 、CPU bound 两种数据量下的压测,在每种场景和每个连接数下取压测结果QPS平均值统计,得到结果:
开箱测试,购买阿里云 PolarDB 标准版单节点倚天独享实例,并应用高性能参数模版(文档)。
架构 | 规格 | 存储 | 版本 | CPU |
---|---|---|---|---|
阿里云 PolarDB 倚天 | 8c64g 独享实例 | 2T PL3 ESSD | 8.0 | 倚天710 |
自建 MySQL 实例 | 8c64g | 2T PL3 ESSD | 8.0.28 | 倚天710 |
友商 | 8c64g | - | - | 友商最新一代 CPU |
# 准备数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=40000000 --tables=10 --threads={1~512} oltp_read_write prepare
# 运行workload
# OLTP读写混合
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=40000000 --rand-type=uniform --tables=10 --time=300 --threads={1~512} --report-interval=20 oltp_read_write run
# OLTP只读场景
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=40000000 --rand-type=uniform --tables=10 --time=300 --threads={1~512} --report-interval=20 oltp_read_only run
# OLTP只写场景
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=40000000 --rand-type=uniform --tables=10 --time=300 --threads={1~512} --report-interval=20 oltp_write_only run
# 清理数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=40000000 --tables=10 --time=300 --threads={1~512} oltp_read_write/oltp_read_only/oltp_write_only cleanup
连接数 | PolarDB 倚天 | arm 自建 | 友商 |
---|---|---|---|
1 | 4426.39 | 4128.2 | 1,324.09 |
8 | 33223.57 | 28883.37 | 9,002.77 |
32 | 101381.29 | 59096.67 | 31,897.51 |
64 | 123323.59 | 61423.14 | 52,195.38 |
128 | 127590.64 | 67676.93 | 60,150.13 |
256 | 126259.29 | 65720.02 | 63,824.66 |
连接数 | PolarDB 倚天 | arm 自建 | 友商 |
---|---|---|---|
1 | 2852.27 | 3135.17 | 1,492.69 |
8 | 28484.43 | 25144.96 | 11,605.65 |
32 | 98798.32 | 57178.22 | 43,683.58 |
64 | 114452.7 | 54767.44 | 80,841.04 |
128 | 115784.14 | 54730.61 | 96,171.27 |
256 | 124524.72 | 54019.85 | 97,759.58 |
连接数 | PolarDB 倚天 | arm 自建 | 友商 |
---|---|---|---|
1 | 4741.59 | 4337.84 | 885.65 |
8 | 34759.83 | 31551.92 | 5,783.46 |
32 | 111183.7 | 79577.7 | 17,806.85 |
64 | 152742.18 | 85337.53 | 28,969.75 |
128 | 162261.84 | 83357.96 | 40,193.94 |
256 | 163423.91 | 81871.44 | 55,503.42 |
连接数 | PolarDB 倚天 | arm 自建 | 友商 |
---|---|---|---|
1 | 2325.18 | 2092.71 | 597.64 |
8 | 17848.08 | 16368.19 | 4,682.18 |
32 | 57849.13 | 37585.66 | 17,764.87 |
64 | 73375.52 | 40402.29 | 28,490.83 |
128 | 77419.21 | 44263.56 | 32,767.81 |
256 | 79618.95 | 41929.5 | 19,559.31 |
连接数 | PolarDB 倚天 | arm 自建 | 友商 |
---|---|---|---|
1 | 2410.35 | 3113.29 | 667.55 |
8 | 18843.19 | 20459.12 | 5,399.64 |
32 | 64589.47 | 39944.8 | 21,008.63 |
64 | 84735.63 | 42712.68 | 35,479.36 |
128 | 90899.32 | 45699.65 | 41,595.30 |
256 | 91140.13 | 45245.97 | 42,600.34 |
连接数 | PolarDB 倚天 | arm 自建 | 友商 |
---|---|---|---|
1 | 3117.42 | 2284.61 | 540.05 |
8 | 22494.84 | 17690.3 | 3,491.79 |
32 | 65236.36 | 53808.61 | 14,829.89 |
64 | 82618.09 | 58923.72 | 21,072.20 |
128 | 84813.77 | 58975.09 | 33,459.10 |
256 | 87070.76 | 57020.43 | 25,615.59 |
PolarDB on 倚天充分发挥自研数据库和自研芯片的优势,性能大幅超越自建 MySQL arm 实例,相比同规格 PolarDB x86 实例降价最高可达 45%,零适配成本提升性价比,助力用户降本增效。
https://www.vldb.org/pvldb/vol15/p3432-chen.pdf