本篇来介绍一下PolarDB-X全局binlog在性能方面的一些设计和思考,先通过几个实际的测试案例来展示全局binlog的性能情况,然后结合这些案例来深入讲解全局binlog关于优化的故事。
准备一个PolarDB-X 2.0实例,本文测试所用实例版本为5.4.14-16576195,实例配置如下:
准备两台ECS压测机,机器配置:64核128G
Event Per Second,每秒写入binlog文件的event个数
DML Event Per Second,每秒写入binlog文件的dml event个数,所谓dml event特指binlog中的TableMapEvent、WriteRowsEvent、UpdateRowsEvent和DeleteRowsEvent
Byte Per Second,每秒写入binlog文件的字节数,后文为表达方便,采用M/s来作为计量单位
Transaction Per Second,每秒钟写入binlog文件的事务个数
File Per Minute,每分钟生成binlog文件的个数,单个文件大小500M
延迟时间,单位ms
测试方法参见:https://help.aliyun.com/document_detail/405018.html
本测试案例,TPCC核心参数的配置如下:
场景一:TPCC数据导入
在进行压测数据导入时,DN节点会瞬时产生大量物理binlog,借此观察全局binlog的性能指标情况
在每台ECS上面分别部署多份tpcc程序包,同时运行多个./runDatabaseBuild.sh,来构造流量
场景二:TPCC交易测试
执行TPCC测试,模拟真实交易场景,考察全局binlog的性能情况(重点关注延迟)
调整压测并发度,构造不同的tmpC参考指标,观察全局binlog延迟指标。由于8CN+8DN在压力打满的情况下,全局binlog的延迟依然比较低,所以下面的测试,不局限于8CN+8DN
测试方法参见: 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延迟情况
测试超大事务场景下,CDC的性能情况和稳定性,重点关注延迟时间
参考如下脚本,构造不同大小的事务,进行测试,按如下脚本,每插入20w条数据可以构造一个500M大小的事务
- CREATE TABLE `t_1`
- (`id` bigint(20) NOT NULL AUTO_INCREMENT,
- `c_bit_1` bit(1) DEFAULT NULL,
- `c_bit_8` bit(8) DEFAULT NULL,
- `c_bit_16` bit(16) DEFAULT NULL,
- `c_bit_32` bit(32) DEFAULT NULL,
- `c_bit_64` bit(64) DEFAULT NULL,
- `c_tinyint_1` tinyint(1) DEFAULT NULL,
- `c_tinyint_4` tinyint(4) DEFAULT NULL,
- `c_tinyint_8` tinyint(8) DEFAULT NULL,
- `c_tinyint_8_un` tinyint(8) unsigned DEFAULT NULL,
- `c_smallint_1` smallint(1) DEFAULT NULL,
- `c_smallint_16` smallint(16) DEFAULT NULL,
- `c_smallint_16_un` smallint(16) unsigned DEFAULT NULL,
- `c_mediumint_1` mediumint(1) DEFAULT NULL,
- `c_mediumint_24` mediumint(24) DEFAULT NULL,
- `c_mediumint_24_un` mediumint(24) unsigned DEFAULT NULL,
- `c_int_1` int(1) DEFAULT NULL,
- `c_int_32` int(32) DEFAULT NULL,
- `c_int_32_un` int(32) unsigned DEFAULT NULL,
- `c_bigint_1` bigint(1) DEFAULT NULL,
- `c_bigint_64` bigint(64) DEFAULT NULL,
- `c_bigint_64_un` bigint(64) unsigned DEFAULT NULL,
- `c_decimal` decimal DEFAULT NULL,
- `c_decimal_pr` decimal(10,3) DEFAULT NULL,
- `c_float` float DEFAULT NULL,
- `c_float_pr` float(10,3) DEFAULT NULL,
- `c_float_un` float(10,3) unsigned DEFAULT NULL,
- `c_double` double DEFAULT NULL,
- `c_double_pr` double(10,3) DEFAULT NULL,
- `c_double_un` double(10,3) unsigned DEFAULT NULL,
- `c_date` date DEFAULT NULL COMMENT 'date',
- `c_datetime` datetime DEFAULT NULL,
- `c_timestamp` timestamp DEFAULT CURRENT_TIMESTAMP,
- `c_time` time DEFAULT NULL,
- `c_year` year DEFAULT NULL,
- `c_year_4` year(4) DEFAULT NULL,
- `c_char` char(50) DEFAULT NULL,
- `c_varchar` varchar(50) DEFAULT NULL,
- `c_binary` binary(200) DEFAULT NULL,
- `c_varbinary` varbinary(200) DEFAULT NULL,
- `c_blob_tiny` tinyblob DEFAULT NULL,
- `c_blob` blob DEFAULT NULL,
- `c_blob_medium` mediumblob DEFAULT NULL,
- `c_blob_long` longblob DEFAULT NULL,
- `c_text_tiny` tinytext DEFAULT NULL,
- `c_text` text DEFAULT NULL,
- `c_text_medium` mediumtext DEFAULT NULL,
- `c_text_long` longtext DEFAULT NULL,
- `c_enum` enum('a','b','c') DEFAULT NULL,
- `c_set` set('a','b','c') DEFAULT NULL,
- `c_testcase` varchar(10) DEFAULT NULL,
- PRIMARY KEY (`id`) )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='10000000' dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 8;
- 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 ,