简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现

Dear 丶 2022-09-12 02:58 248阅读 0赞

本文首发于 GreatSQL社区 微信公众号。

MySQL 8.0.26下MGR表现如何?用实测数据说话。

此外,MySQL 8.0.26还存在一个严重缺陷。

MySQL 8.0.26发布差不多两个月了,一直还没对它进行测评,看到release notes中涉及到几个MGR相关的Bug fixed,最近抽空对其简单测试一番,下面说说结果吧。

本文后半段还会爆出MySQL 8.0.26的一个严重缺陷。

本次测试选用sysbench的mix-load方案(感谢楼方鑫老师的分享):

  1. require("oltp_common")
  2. local runtype = 0;
  3. function prepare_statements()
  4. -- use 1 query per event, rather than sysbench.opt.point_selects which
  5. -- defaults to 10 in other OLTP scripts
  6. sysbench.opt.point_selects=1
  7. runtype = (10 * sysbench.tid + 10) / sysbench.opt.threads
  8. if runtype <= 6 then
  9. prepare_point_selects()
  10. else
  11. prepare_non_index_updates()
  12. end
  13. end
  14. function event(thread_id)
  15. if runtype <= 6 then
  16. execute_point_selects()
  17. else
  18. execute_non_index_updates()
  19. end
  20. end

下面是压测相关的几个指标参数:

  • --tables=10
  • --table_size=100000
  • --threads=16
  • --report-interval=1

下面是InnoDB & MGR相关的几个主要参数选项值:

  1. innodb_buffer_pool_size = 256M
  2. slave_parallel_type = LOGICAL_CLOCK
  3. slave_parallel_workers = 64
  4. binlog_transaction_dependency_tracking = WRITESET
  5. slave_preserve_commit_order = 1
  6. slave_checkpoint_period = 2
  7. group_replication_flow_control_mode = "DISABLED"

备注:由于测试机配置一般,所以压测的数据量并不大,并发也不高。

接下来针对 group_replication_consistency 几个不同可选项,我拿GreatSQL 8.0.25-15 和 MySQL 8.0.26进行对比,主要关注tps和latency数据。

1. group_replication_consistency=EVENTUAL

e8e0d275dd6f19151031f27bf274512f.png

14da72c3a1c60fd9d1a1e432d32f6745.png

2. group_replication_consistency=BEFORE_ON_PRIMARY_FAILOVER

677405837beee75ed4632837b0492fee.png

f44af270f7fe306761c8f0d0ef1f67c9.png

3. group_replication_consistency=BEFORE

3678684ce7da843c524ff7105500a4f5.png

236b62920406e4c5e8d6a0f6bed78a2d.png

4. group_replication_consistency=AFTER

34b1b47d0b9f32df32aa4ac0b20819a0.png

bb75faf2792be0c869964aaef82481a7.png

5. group_replication_consistency=BEFORE_AND_AFTER

6d6dfb2e1a231e0c47539597cd27e749.png

4ee97fbd80f480d79ec22e19d2cc2cdc.png

从上面的几个测试数据可以看到:

  1. MySQL 8.0.26的tps还是很不平稳,波动很大。
  2. MySQL 8.0.26的latency也是波动很大。

另外,从测试的直观感受来看,在MySQL 8.0.26以前的版本中存在的几个问题略有改善:

  1. 被kill后的SECONDARY节点重新加回集群,分布式事务恢复较快(快辄20-30秒左右),不像以往要很久(最少1-2分钟)。
  2. 把SECONDARY节点kill后,集群tps波动的时长变短了,之前大概需要20-30秒,现在大概10-20秒。
  3. 把SECONDARY节点kill后,集群还是大约要20多秒才能将其踢出,这个没改善。
  4. 磁盘空间满之后会导致MGR事务被阻塞,在8.0.26里依然会阻塞事务,时间太久就没及时处理的话,还会因为待认证事务堆积等原因导致mysqld进程被oom killed,这个算是更严重了(BUG#104979),后面我再整理文章。

接下来说说MySQL 8.0.26的严重问题吧(BUG#104980)。

复现方案:

  1. 设置 group_replication_consistency = BEFORE_AND_AFTER | AFTER(二选一,其余模式暂未出现问题)。
  2. 启动sysbench对MGR集群进行持续压力测试。
  3. 压测过程中,随机kill某个SECONDARY节点。
  4. 经多次重试,会有相当大概率出现该SECONDARY节点无法重新加回集群的问题。报错信息类似下面这样:

    [ERROR] [MY-013309] [Repl] Plugin group_replication reported: ‘Transaction ‘2:39976870’ does not exist on Group Replication consistency manager while receiving remote transaction prepare.’
    [ERROR] [MY-011452] [Repl] Plugin group_replication reported: ‘Fatal error during execution on the Applier process of Group Replication. The server will now leave the group.’
    [ERROR] [MY-011712] [Repl] Plugin group_replication reported: ‘The server was automatically set into read only mode after an error was detected.’”

同样的测试,在GreatSQL 8.0.25中未出现,还是相当给力的呀。

所幸的是,一般很少选用AFTER或BEFORE_AND_AFTER模式,所以能碰到这个BUG的人不会太多才对。

再报告个小问题(BUG#104974),在线设置 group_replication_consistency 选项值时,如果设置为 BEFORE,则必须加引号才可以,否则会报错,其他几个模式则没问题:

  1. mysql>set global group_replication_consistency=EVENTUAL;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql>set global group_replication_consistency=BEFORE_ON_PRIMARY_FAILOVER;
  4. Query OK, 0 rows affected (0.00 sec)
  5. mysql>set global group_replication_consistency=BEFORE;
  6. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEFORE' at line 1
  7. mysql>set global group_replication_consistency='BEFORE';
  8. Query OK, 0 rows affected (0.00 sec)
  9. mysql>set global group_replication_consistency=AFTER;
  10. Query OK, 0 rows affected (0.00 sec)
  11. mysql>set global group_replication_consistency= BEFORE_AND_AFTER;
  12. Query OK, 0 rows affected (0.00 sec)

Enjoy GreatSQL :)


文章推荐:

  • 面向金融级应用的GreatSQL正式开源

  • Changes in GreatSQL 8.0.25 (2021-8-26)

  • 一周碎碎念,2021.9.12,之前说的MGR课程上线啦
  • 技术分享 | Update更新慢、死锁等问题的排查思路分享
  • MySQL分区表的一个性能BUG

  • 《叶问》36期,MySQL最多只能用到128个逻辑CPU,是真的吗

  • GreatSQL重磅特性,InnoDB并行并行查询优化测试

  • 在Linux下源码编译安装GreatSQL/MySQL


扫码加入GreatSQL/MGR交流QQ群

e454886e994ece54de2fb640f5e400cc.png

点击文末“阅读原文”直达老叶专栏

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql8026myini

    如何开单机征途 安装MYSQL4.1数据库 1.安装向导欢迎界面 2、选择安装类型 Typical(典型)、Complete(完全)、Custom(自定义),选择“

    相关 稳定性测试-测试

    1.对软件多次测试,长时间运行,是否正常运行   2.长时间对软件开启关闭软件和系统是否正常   3.软件长时间执行某个业务后切换到别的不同的业务操作是否受影响