Tidb vs Mysql 8 低配主机性能测试比对

Tidb:7.1.1
MySQL:percona-server-8.0.33-25

背景:

探索在低配主机环境中用tidb替代MySQL MGR单主集群可行性方案,加速业务sql并提高主机资源利用率

一、测试环境:

  • 阿里云
用途 云主机型号 CPU 内存 存储空间 I/O性能 iops 价格
压测主机 ecs.c7.8xlarge 32C 32G 200G 46MB/s 11000 3351.13元/月
数据库主机 ecs.c7.4xlarge 16C 32G 1000G 440MB/s 50000 1802.78元/月

二、部署架构:

数据库类型 架构 总价格
TiDB 三节点,每个节点上 1 TIDB + 1 PD + 1 TIKV 5,408.34元/月
MySQL 两个节点,主从,增强半同步 3,605.56元/月

三、部分参数调整:

1、主机关掉透明大页
2、压测主机上部署haproxy,指向三个tidb server
2、tidb server 和 tikv 日志级别更改为error
3、innodb buffer给到24G

四、tpcc测试结果

  • 数据量1000仓

五、sysbench测试结果

  • 32张表,每张表1000W行数据

oltp_select_point(点查)

oltp_read_write(读写)

六、其他

1、在8c16G上压测的性能差距差不多
2、在没做任何资源限制的前提下,tidb本身没有OOM
3、测试过程中,Tidb三个节点能均衡地将cpu idle压至个位数;MySQL则存在大量IO wait
2 个赞

楼主厉害啊 :grinning:

1 个赞

大佬,tpcc测试1000仓生成数据大概要多久?为什么我几十仓生成差不多半个小时

1 个赞

:joy:日志丢了,反正比MySQL慢,我一般都是丢后台灌数据

1 个赞

v7.1 performance test 数据也可以直接参考 Cloud 官方文档 https://docs.pingcap.com/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc 和 sysbench 部分

1 个赞

厉害了

1 个赞

肯定tidb快很多

1 个赞

价格都估算出来了了?

1 个赞

价格取于阿里云控制台购买ECS结算页面单月价格 :upside_down_face:

1 个赞

这种对比,意义不是很大吧?

1 个赞

:upside_down_face: 因为单主mgr资源利用率不高,看看tidb能否在低配集群上替代,提升资源利用率;
另外公开的tpcc模型没法在mgr上测(缺主键),所以只能用主从半同步模拟对比;
业务场景的测试涉及敏感数据就不放出来了

1 个赞

感觉tidb分布式优势没有被体现出来

1 个赞

在实际压测中,tidb的三台主机资源利用率均被压到很低,对比MySQL MGR单主好很多 :kissing_closed_eyes:

1 个赞

这都行,MGR搞得少

1 个赞

楼主好,我在使用tiup bench tpcc压测单机mysql时,tiup bench tpcc check检查数据一致性非常耗时,想问下你这边是否有类似情况,或者是否能给出一些优化建议
详细信息如下:
数据库主机配置 16c 128g内存 1T高性能磁盘,关闭了虚拟内存
mysql是在ubuntu20.04使用apt-get install mysql-server进行安装的mysql8.0,配置优化只是在/etc/mysql/mysql.conf.d/mysqld.cnf增加了
innodb_buffer_pool_size = 96G
innodb_write_io_threads = 16
innodb_read_io_threads = 16
这三项。
压测机和mysql主机配置相同,使用16线程压了8个warehouses
tiup bench tpcc check --warehouses 8 --threads 16
问题过程中,数据库cpu在800%左右,相对16核cpu,占比50%;内存和io都很低。压测机的cpu,内存和io也都很低,内网压测,网络也不是瓶颈,但是check时长在1小时左右,感觉很不正常

以上,还请帮看下是怎么回事,感谢感谢

比tidb慢,没找到源码,我怀疑check阶段在做多表关联查询(mysql这块性能很差),期待有原厂大佬帮忙解答下 :upside_down_face:
P.S:建议直接通过日志判断数据的一致性

收到,感谢

楼住你好,我用了3台服务器部署的tidb,和你一样每个部署了kv,db,pd. 然后java包只访问了其中一个节点的db,配置是用的三节点混布文章上的配置,但是现在java包的接口处理的并发很低,2,3个接口为一批的响应,是因为我没部署HAProxy吗,还是说我配置少配置了什么

感谢,可以参考

TiDB在大规模数据的场景下(单表五千万行以上)比较有优势,而且做性能测试要把各个实例节点分开部署,否则会有很大的相互干扰,影响结果的准确性。

数据量规模不大的情况下,mysql在性能和成本核算上优势更大。

楼主如果是打算对TiDB做完整的性能测试,还有很大的优化空间。