• PolarDB-X 全局 Binlog 解读之性能篇(上)


    本篇来介绍一下PolarDB-X全局binlog在性能方面的一些设计和思考,先通过几个实际的测试案例来展示全局binlog的性能情况,然后结合这些案例来深入讲解全局binlog关于优化的故事。

    测试准备

    准备一个PolarDB-X 2.0实例,本文测试所用实例版本为5.4.14-16576195,实例配置如下:

    • 实例拓扑:8CN + 8DN + 2CDC
    • 单CN节点规格:32核128GB
    • 单DN节点规格:32核128GB
    • 单CDC节点规格:16核32GB

    准备两台ECS压测机,机器配置:64核128G

    名词解释

    • EPS

    Event Per Second,每秒写入binlog文件的event个数

    • DML EPS

    DML Event Per Second,每秒写入binlog文件的dml event个数,所谓dml event特指binlog中的TableMapEvent、WriteRowsEvent、UpdateRowsEvent和DeleteRowsEvent

    • BPS

    Byte Per Second,每秒写入binlog文件的字节数,后文为表达方便,采用M/s来作为计量单位

    • TPS

    Transaction Per Second,每秒钟写入binlog文件的事务个数

    • FPM

    File Per Minute,每分钟生成binlog文件的个数,单个文件大小500M

    • Delay Time

    延迟时间,单位ms

    测试方案

    TPCC

    测试方法参见:https://help.aliyun.com/document_detail/405018.html
    本测试案例,TPCC核心参数的配置如下:

    • warehouses=2000
    • loadWorkers=500
    • terminals=1024
    • runLoader.sh 中JVM参数配置 -Xms60g -Xmx60g
    • runBenchmark.sh 中JVM参数配置 -Xms60g -Xmx60g

    场景一:TPCC数据导入

    • 测试目的

    在进行压测数据导入时,DN节点会瞬时产生大量物理binlog,借此观察全局binlog的性能指标情况

    • 测试方式

    在每台ECS上面分别部署多份tpcc程序包,同时运行多个./runDatabaseBuild.sh,来构造流量

    场景二:TPCC交易测试

    • 测试目的

    执行TPCC测试,模拟真实交易场景,考察全局binlog的性能情况(重点关注延迟)

    • 测试方式

    调整压测并发度,构造不同的tmpC参考指标,观察全局binlog延迟指标。由于8CN+8DN在压力打满的情况下,全局binlog的延迟依然比较低,所以下面的测试,不局限于8CN+8DN

    Sysbench

    测试方法参见: https://help.aliyun.com/document_detail/405017.html

    场景一:Sysbench数据导入

    • 测试目的

    在进行压测数据导入时,DN节点会瞬时产生大量物理binlog,借此观察全局binlog的性能指标情况

    • 测试方式

    调整--tables和--threads的参数值,测试不同压力状态下全局binlog的性能指标

    场景二:Sysbench oltp_write_only

    • 测试目的

    执行sysbench oltp_write_only,测试混合写入场景下,全局binlog性能情况

    • 测试方式

    执行oltp_write_only,构造不同qps参考指标,观察全局binlog延迟情况

    Large Transaction

    • 测试目的

    测试超大事务场景下,CDC的性能情况和稳定性,重点关注延迟时间

    • 测试方式

    参考如下脚本,构造不同大小的事务,进行测试,按如下脚本,每插入20w条数据可以构造一个500M大小的事务

    1. CREATE TABLE `t_1`
    2. (`id` bigint(20) NOT NULL AUTO_INCREMENT,
    3. `c_bit_1` bit(1) DEFAULT NULL,
    4. `c_bit_8` bit(8) DEFAULT NULL,
    5. `c_bit_16` bit(16) DEFAULT NULL,
    6. `c_bit_32` bit(32) DEFAULT NULL,
    7. `c_bit_64` bit(64) DEFAULT NULL,
    8. `c_tinyint_1` tinyint(1) DEFAULT NULL,
    9. `c_tinyint_4` tinyint(4) DEFAULT NULL,
    10. `c_tinyint_8` tinyint(8) DEFAULT NULL,
    11. `c_tinyint_8_un` tinyint(8) unsigned DEFAULT NULL,
    12. `c_smallint_1` smallint(1) DEFAULT NULL,
    13. `c_smallint_16` smallint(16) DEFAULT NULL,
    14. `c_smallint_16_un` smallint(16) unsigned DEFAULT NULL,
    15. `c_mediumint_1` mediumint(1) DEFAULT NULL,
    16. `c_mediumint_24` mediumint(24) DEFAULT NULL,
    17. `c_mediumint_24_un` mediumint(24) unsigned DEFAULT NULL,
    18. `c_int_1` int(1) DEFAULT NULL,
    19. `c_int_32` int(32) DEFAULT NULL,
    20. `c_int_32_un` int(32) unsigned DEFAULT NULL,
    21. `c_bigint_1` bigint(1) DEFAULT NULL,
    22. `c_bigint_64` bigint(64) DEFAULT NULL,
    23. `c_bigint_64_un` bigint(64) unsigned DEFAULT NULL,
    24. `c_decimal` decimal DEFAULT NULL,
    25. `c_decimal_pr` decimal(10,3) DEFAULT NULL,
    26. `c_float` float DEFAULT NULL,
    27. `c_float_pr` float(10,3) DEFAULT NULL,
    28. `c_float_un` float(10,3) unsigned DEFAULT NULL,
    29. `c_double` double DEFAULT NULL,
    30. `c_double_pr` double(10,3) DEFAULT NULL,
    31. `c_double_un` double(10,3) unsigned DEFAULT NULL,
    32. `c_date` date DEFAULT NULL COMMENT 'date',
    33. `c_datetime` datetime DEFAULT NULL,
    34. `c_timestamp` timestamp DEFAULT CURRENT_TIMESTAMP,
    35. `c_time` time DEFAULT NULL,
    36. `c_year` year DEFAULT NULL,
    37. `c_year_4` year(4) DEFAULT NULL,
    38. `c_char` char(50) DEFAULT NULL,
    39. `c_varchar` varchar(50) DEFAULT NULL,
    40. `c_binary` binary(200) DEFAULT NULL,
    41. `c_varbinary` varbinary(200) DEFAULT NULL,
    42. `c_blob_tiny` tinyblob DEFAULT NULL,
    43. `c_blob` blob DEFAULT NULL,
    44. `c_blob_medium` mediumblob DEFAULT NULL,
    45. `c_blob_long` longblob DEFAULT NULL,
    46. `c_text_tiny` tinytext DEFAULT NULL,
    47. `c_text` text DEFAULT NULL,
    48. `c_text_medium` mediumtext DEFAULT NULL,
    49. `c_text_long` longtext DEFAULT NULL,
    50. `c_enum` enum('a','b','c') DEFAULT NULL,
    51. `c_set` set('a','b','c') DEFAULT NULL,
    52. `c_testcase` varchar(10) DEFAULT NULL,
    53. PRIMARY KEY (`id`) )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='10000000' dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 8;
    54. INSERT t_1 (c_bit_1 , c_bit_8 , c_bit_16 , c_bit_32 , c_bit_64 , c_tinyint_1 , c_tinyint_4 , c_tinyint_8 , c_tinyint_8_un , c_smallint_1 , c_smallint_16 , c_smallint_16_un , c_mediumint_1 , c_mediumint_24 , c_mediumint_24_un , c_int_1 , c_int_32 , c_int_32_un , c_bigint_1 , c_bigint_64 , c_bigint_64_un , c_decimal , c_decimal_pr , c_float , c_float_pr , c_float_un , c_double , c_double_pr , c_double_un , c_date , c_datetime , c_timestamp , c_time , c_year , c_year_4 , c_char , c_varchar , c_binary , c_varbinary , c_blob_tiny , c_blob , c_blob_medium , c_blob_long , c_text_tiny , c_text , c_text_medium ,
  • 相关阅读:
    Linux用户增删改查,修改密码,查看当前用户ID,切换用户
    使用Tomcat Maven插件产生的疑惑
    最高月薪20K?平均薪资近万...在华为子公司工作是什么体验?
    FreeSql 导入数据的各种场景总结 [C#.NET ORM]
    net-java-php-python-毕业生离校管理系统计算机毕业设计程序
    前端无法获取Django自定义响应头 Response Header
    【云原生&微服务十三】SpringCloud之深度源码剖析OpenFeign如何扫描所有的FeignClient
    The AWS Well-Architected Framework Module 1 - Overview
    科技前沿:Web3与物联网的智能连接
    动态 SQL
  • 原文地址:https://blog.csdn.net/weixin_43970890/article/details/127674139