在体验PolarDB MySQL 版之前,这里先为大家提供一下PolarDB MySQL 版 Serverless评测入口,以供热爱数据库探索的小伙伴们共同体验极致弹性体验的数据库PolarDB MySQL 版,测评入口:https://developer.aliyun.com/topic/polardbserverless
下面开始正文,测评PolarDB MySQL 版各项性能,那么在开始之前,例行惯例先简单介绍一下什么是PolarDB MySQL 版,这样也方便大家对PolarDB MySQL 版有一个基础的理解。
什么是PolarDB MySQL 版
PolarDB MySQL版是阿里巴巴自研的云原生HTAP数据库。PolarDB MySQL版100%兼容原生MySQL的多个版本,包括MySQL 5.6、MySQL 5.7和MySQL 8.0。PolarDB MySQL版的企业版基于云原生架构、计算存储分离、软硬件一体化设计,为用户提供具备超高弹性和性能、高可用和高可靠保障、高性价比的数据库服务。
到这里,大家也就知道什么是PolarDB MySQL版,简单的说就是你平常用的Mysql,只不过这个Mysql是一款云原生数据库,不需要你部署,不需要你维护,你只需要用就可以了,就是这么简单。
下面我们开始正式体验PolarDB MySQL版的极致弹性究竟体现在哪里呢?
PolarDB MySQL版体验
打开浏览器输入PolarDB MySQL版控制台地址:https://polardb.console.aliyun.com/ 点击【集群列表】
没有集群的话就选择【创建新集群】,这里我已经创建好了集群,点击集群ID进去集群信息页面
点击【基本信息】页面下滑找到【数据库节点】配置,点击右上角的【Serverless配置】
在打开弹框页面设置如下信息
点击【确定】完成Serverless配置。
弹性压测一
下面开始进行弹性压测,执行如下命令初始化数据
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf637o962oq7nqmqq.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 prepare
点击【性能监控】可以看到PCU数量有个弹性增高
等待集群数据库初始化数据完成之后,开始进行256并发读写混合压测,输入命令
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf637o962oq7nqmqq.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
观察命令执行输出日志可以看到,在同样的并发数下,tps逐渐上升,延迟(lat)逐渐下降,最终到达一个稳定值
继续观察,可以看到tps lat逐渐趋于稳定,这说明PolarDB的处理能力借助Serverless弹性获得提升
回到控制台性能监控页面,查看节点负载情况,可以看到随着主节点PCU CPU使用率的不断提升,PCU数量从1分钟内从1 PCU弹升到最大上限32 PCU。
压测一段时间后,PCU数量及PCU CPU使用率也趋于稳定
停止压测后可以看到主节点PCU CPU使用率会立即下降,而PCU数量随后也会逐步自动缩小至1 PCU
弹性压测二
下面开始进行读写混合压测,回到集群基本信息页面,更改【Serverless配置】
更改完成后回到命令行页面执行如下命令,发起256并发读写混合压测请求
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf637o962oq7nqmqq.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
和前面观察日志输出结果一致,在同样的并发数下,tps逐渐上升,延迟(lat)逐渐下降,最终到达一个稳定值
回到控制台查看集群基本信息,可以看到当主节点弹升到最大规格后,Serverless系统会逐个创建只读节点,分摊主节点的读请求,直到只读节点的数量满足当前负载
回到性能监控页面,点击【集群】监控可以看出,PolarDB收到读写混合请求后,主节点会首先迅速弹升到最大的32 PCU,之后监控逐步出现2个读节点。当只读节点分摊主节点的读请求后,主节点CPU使用率逐步下降,规格最终稳定在22.5 PCU。
由于目前2个只读节点都没有到最大规格32 PCU,系统判断目前Serverless规格已经满足实际负载,不会再继续增加新的只读节点。
根据该实验之前的配置,PolarDB for MySQL Serverless最多支持扩展出7个只读节点,如果后续压力增大会继续弹性增加只读节点。那么下面增加只读压力测试。
弹性压测三
基于弹性压测二,继续增加只读压力测试,输入命令
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=pc-uf637o962oq7nqmqq.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
为了效果明显可以多开几个只读压测命令执行的窗口,知道出现多个只读节点为止。也就是说当数据库接收到新的只读负载后,首先当前的2个只读节点会弹升到最大规格32 PCU,之后Serverless系统会继续创建新的只读节点,直到满足新增只读负载的要求。整个过程大概需要等待20~30min,且需要开启多个只读脚本压测命令窗口即可看到效果。
弹性缩容
当停止掉所有的Sysbench脚本之后,PolarDB for MySQL Serverless的计算节点首先会自动缩容,之后新增的只读节点会逐步回收,大概耗时 20~25min,等待一段时间后,最终PolarDB会缩容到只有一个主节点的状态。
从上面的实验可以看出,PolarDB for MySQL Serverless的节点数量和规格都能够根据负载进行自动伸缩与自动配置。
操作体验
对于PolarDB MySQL 版 Serverless整体的操作体验上很流畅,文档内容也很详细,整个实验操作下来达到了理想的预期,也看到了PolarDB MySQL 版 Serverless的极致弹性,配置简单,功能很强大,对于企业来说,弹性增减数据库节点可以极大的优化企业数据管理成本以及运维成本。同时在应对大数据量并发时,可以自动化的弹性伸缩保障数据库节点的稳定运行,也保障了业务的稳定运行。真的是做到了超高弹性和性能、高可用和高可靠保障、高性价比,为企业保驾护航,很赞。