DRDS只读实例的性能测试------基础总结篇

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云服务器 ECS,每月免费额度200元 3个月
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 采用mysqlslap进行的压测比对,针对单一SQL简单实用,新手上路有不对的地方请帮忙指正。

关于MySQLslap压测工具----MySQL自带的也测工具


官方文档解释:

http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html

mysqlslap — Load Emulation Client

mysqlslap is a diagnostic program designed to emulate client load for a MySQL server and to report the timing of each stage. It works as if multiple clients are accessing the server.

Invoke mysqlslap like this:

shell> mysqlslap [options]

Some options such as --create or --query enable you to specify a string containing an SQL statement or a file containing statements. If you specify a file, by default it must contain one statement per line. (That is, the implicit statement delimiter is the newline character.) Use the --delimiter option to specify a different delimiter, which enables you to specify statements that span multiple lines or place multiple statements on a single line. You cannot include comments in a file; mysqlslap does not understand them.



--concurrency    并发数量

--engines    要测试的引擎
--iterations    运行测试多少次。
--auto-generate-sql    用系统自己生成的SQL脚本来测试。
--auto-generate-sql-load-type    要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries     总共要运行多少次查询
--debug-info 代表要额外输出CPU以及内存的相关信息。
--number-int-cols :  创建测试表的 int 型字段数量
--auto-generate-sql-add-autoincrement :     代表对生成的表自动添加auto_increment列,从5.1.18版本开始
--number-char-cols     创建测试表的 char 型字段数量。
--create-schema     测试的schema,MySQL中schema也就是database。
--query     使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--only-print    如果只想打印看看SQL语句是什么,可以用这个选项。




测试过程:

 

######################################################################################################

 

一.准备环境

 

 

1.1 环境如下:

 

######################################################################################################

 

RDS: 48G   100G

主实例:drds_xncs_master      10.3.244.2   物理机ip:10.3.162.244


 

只读实例:

         drds_xncs_readonly_1        drds_xncs_master       10.3.224.68   物理机ip:10.3.162.156


 

         drds_xncs_readonly_2        drds_xncs_master       10.3.225.153   物理机ip:10.3.162.206

 

         drds_xncs_readonly_3        drds_xncs_master       10.3.224.74   物理机ip:10.3.162.216

 

         drds_xncs_readonly_4        drds_xncs_master       10.3.224.3   物理机ip:10.3.162.200

 

         drds_xncs_readonly_5        drds_xncs_master       10.3.231.6   物理机ip:10.3.162.239

 

 

 

DRDS: 64C  128G

drds_xncs_bic_cs    10.3.244.137

 

 

ECS:16C  64G

 

ecs_xncs_cs_1         10.3.244.148      192.168.130.115

ecs_xncs_cs_2         10.3.244.149      192.168.35.24

ecs_xncs_cs_3         10.3.244.150      192.168.36.52

 

 

 

 

 

#########################################################################################################

 

1.2 创建测试表:

 

在DRDS建立非分库分表的测试表:

 

 

CREATE TABLE `bic_base_org` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '组织机构id',

  `inst_id` bigint(20) DEFAULT NULL COMMENT 'ERP机构表唯一标识,根据INST_ID来识别是否新增或更新机构信息',

  `code` varchar(20) DEFAULT NULL COMMENT '机构唯一标识代码,需符合编码规则',

  `name_cn` varchar(200) DEFAULT NULL COMMENT '中文名称',

  `aic_register_name` varchar(200) DEFAULT NULL COMMENT '机构的工商注册名称',

  `postcode` varchar(20) DEFAULT NULL COMMENT '类型允许为空值,开发、测试、uat都要更改',

  `administrative_division` varchar(20) DEFAULT NULL COMMENT '机构的国家标准行政区域代码,6位编码',

  `province_code` varchar(20) DEFAULT NULL COMMENT '省行政区划编码',

  `city_code` varchar(50) DEFAULT NULL COMMENT '地市行政区划编码',

  `status` varchar(20) NOT NULL COMMENT '标示组织机构的生效/失效状态',

  `business_unit` varchar(20) NOT NULL COMMENT '标示该机构归属:邮政,速递',

  `org_level` varchar(20) NOT NULL COMMENT '标示机构所属层级:集团、板块总部、省分公司、地市(州)分公司、区县(旗)分公司、支局(所、网点)',

  `org_category` varchar(20) DEFAULT NULL COMMENT '标示机构所属分类:营业、大宗收寄、网运、投递、集邮、分销、报刊、代理速递',

  `manage_level` varchar(20) DEFAULT NULL COMMENT '标示机构机构管控级别:一体化专业、一体化现业、非一体化',

  `parent_org_code` varchar(20) DEFAULT NULL COMMENT '上级机构的机构代码,需符合编码规则',

  `erp_parent_org_code` varchar(20) DEFAULT NULL COMMENT 'erp上级行政机构代码',

  `distribution_org_flag` varchar(20) DEFAULT NULL COMMENT '一级中心局/二级中心局/三级中心局/市邮件处理中心/县邮件处理中心/不适用。速递无需此字段;邮务需此字段。',

  `legal_entity_flag` char(1) DEFAULT NULL COMMENT '机构是否为法人单位',

  `address` varchar(200) DEFAULT NULL COMMENT '机构地址',

  `approve_create_date` datetime DEFAULT NULL COMMENT '机构批准成立日期',

  `source_org_create_date` datetime DEFAULT NULL COMMENT '源系统机构创建日期',

  `major` varchar(20) DEFAULT NULL COMMENT '组织机构所处专业',

  `org_phase` varchar(20) DEFAULT NULL COMMENT '组织机构所处环节',

  `main_category` varchar(20) DEFAULT NULL COMMENT '管理机构:总部、省公司、总部直管单位、省管单位、地市公司、地市管单位;生产机构:速递物流揽投机构、邮件处理机构、客户服务机构、电商与物流生产机构、运输类机构、挂靠类机构;其他邮务无需此字段',

  `detail_category` varchar(20) DEFAULT NULL COMMENT 'A:管理机构:                                                 1.总部:总部下级                                   2.省公司:省公司  \n3.总部直管单位:总部直管区域分公司,总部直管子公司,总部直管控股公司,总部直管海外公司、总部直管全国性邮件处理中心                              \n4.地市公司:地市公司                   \n5.省管单位:省直属专业分公司、省直属邮件处理中心、省直属营业部、省管区域分公司、省管地市区域一体化公司、省直管计划单列县、省管长期投资股权公司、其他省管机构                        6.地市管单位:地市直属专业分公司、地市直属邮件处理中心、地市管区域分公司、地市管县营业部、地市管长期投资股权公司,其他地市直属机构,其他地市管机构,其他地市直属管理中心            B:生产机构:在生产机构大类基础上细化的分类。\n1.速递物流揽投:A、B、C、D\n2.邮件处理:1级、2级、3级\n3.客服服务:区域客户服务中心\n4.电商与物流生产:电商与物流业务项目组、供应链管理中心\n5.运输:运输公司、运输队\n6.挂靠:大客户营销中心,调度室,客户服务中心(本地性),财务共享中心,网运支撑中心\n邮务无需此字段',

  `business_function` varchar(50) DEFAULT NULL COMMENT '类型允许为空值,开发、测试、uat都要更改',

  `core` varchar(20) DEFAULT NULL COMMENT '1城市核心,2城市非核心,3辖县核心,4辖县非核心\n邮务无需此字段',

  `corporation_flag` char(1) DEFAULT NULL COMMENT '值为是或否',

  `department_flag` char(1) DEFAULT NULL COMMENT '值为是或否',

  `company_code` varchar(20) DEFAULT NULL COMMENT '是否部门项为是的才有所属公司',

  `company_name` varchar(200) DEFAULT NULL COMMENT '财务-所属公司名称',

  `common_service` char(1) DEFAULT NULL COMMENT '机构是否适用于普遍服务',

  `branch_emp_relationship` varchar(20) DEFAULT NULL COMMENT '代办/自办/不适用。邮务需此字段;速递无需此字段。',

  `branch_urban_type` varchar(20) DEFAULT NULL COMMENT '城市/农村/不适用。速递无需此字段;邮务需此字段。',

  `branch_func_type` varchar(20) DEFAULT NULL COMMENT '纯邮政/综合/纯金融/不适用。速递无需此字段;邮务需此字段',

  `branch_invest_type` varchar(20) DEFAULT NULL COMMENT '营业/营投合一/投递/不适用。速递无需此字段;邮务需此字段。',

  `erp_branch_invest_type` varchar(20) DEFAULT NULL COMMENT 'ERPERP网点营投类型, 开发、测试、UAT、生产都要添加',

  `create_date` datetime DEFAULT NULL COMMENT 'ERP系统记录的创建时间',

  `modify_date` datetime DEFAULT NULL COMMENT 'ERP系统记录的最后更新时间',

  `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建人id',

  `gmt_created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  `modify_user_id` bigint(20) DEFAULT NULL COMMENT '修改人id',

  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',

  `is_deleted` char(1) DEFAULT '0' COMMENT '是否删除:\n0:否\n1:是',

  PRIMARY KEY (`id`),

  KEY `idx_parent_org_code` (`parent_org_code`),

  KEY `idx_code` (`code`),

  KEY `idx_name_cn` (`name_cn`),

  KEY `idx_business_unit` (`business_unit`)

) ENGINE=InnoDB AUTO_INCREMENT=191001 DEFAULT CHARSET=utf8 COMMENT='组织机构基础信息(ERP)';

 

 

1.3 导入测试数据(从生产全部导出并导入)

 

mysql -udrds_xncs_bic_cs -p -h10.3.244.137 -P3306 drds_xncs_bic_cs < rds_jdsc_bic_bic_base_org_insert.sql

 

1.4 查看表大小

 

mysql> select count(*) from bic_base_org;

+----------+

| count(*) |

+----------+

|   191087 |

+----------+

1 row in set (0.03 sec)

 

1.5 查看数据

 

mysql> select id,inst_id,code,name_cn,aic_register_name,postcode,administrative_division,province_code,city_code,status,business_unit,org_level,org_category,manage_level,parent_org_code,erp_parent_org_code   from bic_base_org where id=170000;

+--------+---------+----------+--------------------------------------------------------------------+-------------------+----------+-------------------------+---------------+-----------+--------+---------------+-----------+--------------+--------------+-----------------+---------------------+

| id     | inst_id | code     | name_cn                                                            | aic_register_name | postcode | administrative_division | province_code | city_code | status | business_unit | org_level | org_category | manage_level | parent_org_code | erp_parent_org_code |

+--------+---------+----------+--------------------------------------------------------------------+-------------------+----------+-------------------------+---------------+-----------+--------+---------------+-----------+--------------+--------------+-----------------+---------------------+

| 170000 |  245313 | 54310302 | 中国邮政储蓄银行股份有限公司苍梧县新地营业所                       | NULL              | 543103   | 450421                  | 45            | 4504      | 0      | A             | 06        | NULL         | NULL         | 54316100        | 54316100            |

+--------+---------+----------+--------------------------------------------------------------------+-------------------+----------+-------------------------+---------------+-----------+--------+---------------+-----------+--------------+--------------+-----------------+---------------------+

1 row in set (0.01 sec)

 

 

1.6 执行计划

 

mysql> explain select id,inst_id,code,name_cn,aic_register_name,postcode,administrative_division,province_code,city_code,status,business_unit,org_level,org_category,manage_level,parent_org_code,erp_parent_org_code   from bic_base_org where id=170000;

+------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+

| GROUP_NAME                                                       | SQL                                                                                                                                                                                                                                        | PARAMS |

+------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+

| DRDS_XNCS_BIC_CS_1513840820139DMOXDRDS_XNCS_BIC_CS_CJWT_0000_RDS | select id,inst_id,code,name_cn,aic_register_name,postcode,administrative_division,province_code,city_code,status,business_unit,org_level,org_category,manage_level,parent_org_code,erp_parent_org_code   from bic_base_org where id=170000 | {}     |

+------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+

1 row in set (0.00 sec)

 

mysql> explain execute  select id,inst_id,code,name_cn,aic_register_name,postcode,administrative_division,province_code,city_code,status,business_unit,org_level,org_category,manage_level,parent_org_code,erp_parent_org_code   from bic_base_org where id=170000;

+----+-------------+--------------+-------+---------------+---------+---------+-------+------+-------+

| id | select_type | table        | type  | possible_keys | key     | key_len | ref   | rows | Extra |

+----+-------------+--------------+-------+---------------+---------+---------+-------+------+-------+

|  1 | SIMPLE      | bic_base_org | const | PRIMARY       | PRIMARY | 8       | const |    1 | NULL  |

+----+-------------+--------------+-------+---------------+---------+---------+-------+------+-------+

1 row in set (0.01 sec)

 

 

可以看到 ,在0号db上执行,并且执行计划是主键查询,最快的方式

 

 

############################################################################################################################################

 

二.测试语句

 

2.1 测试语句:

 

vi hebin_select.sql

 

select id,inst_id,code,name_cn,aic_register_name,postcode,administrative_division,province_code,city_code,status,business_unit,org_level,org_category,manage_level,parent_org_code,erp_parent_org_code   from bic_base_org where id=170000;

 

2.2 测试工具:

 

mysqlslap

 

#############################################################################################################################################

 

 

三.开始测试

 

 

3.1 DRDS上测试(把其中一个slave读设100% 测drds下 一个备库 ) 100并发 总共跑 1千万条相同的主键查询:

 

mysqlslap  --query=/home/hebin/hebin_select.sql --concurrency=100 --number-of-queries=10000000  --iterations=1 --create-schema=drds_xncs_bic_cs --engine=innodb  -h10.3.244.137 -udrds_xncs_bic_cs -p

 

Benchmark

         Running for engine innodb

         Average number of seconds to run all queries: 235.556 seconds

         Minimum number of seconds to run all queries: 235.556 seconds

         Maximum number of seconds to run all queries: 235.556 seconds

         Number of clients running queries: 100

         Average number of queries per client: 100000

 

 

 

 

3.2 RDS上主库测试 100并发 总共跑 1千万条相同的主键查询:

 

mysqlslap  --query=/home/hebin/hebin_select.sql --concurrency=100 --number-of-queries=10000000  --iterations=1 --create-schema=drds_xncs_bic_cs_trou_0000 --engine=innodb  -h10.3.244.2 -udrds_xncs_master -p

 

Benchmark

         Running for engine innodb

         Average number of seconds to run all queries: 154.738 seconds

         Minimum number of seconds to run all queries: 154.738 seconds

         Maximum number of seconds to run all queries: 154.738 seconds

         Number of clients running queries: 100

         Average number of queries per client: 100000

 

qps=10000000/154.738=64625.3667489563

 

 

3.3 RDS上其中一个只读库测试 100并发 总共跑 1千万条相同的主键查询:

 

mysqlslap  --query=/home/hebin/hebin_select.sql --concurrency=100 --number-of-queries=10000000  --iterations=1 --create-schema=drds_xncs_bic_cs_trou_0000 --engine=innodb  -h10.3.225.153 -udrds_xncs_master -p

 

Benchmark

         Running for engine innodb

         Average number of seconds to run all queries: 150.370 seconds

         Minimum number of seconds to run all queries: 150.370 seconds

         Maximum number of seconds to run all queries: 150.370 seconds

         Number of clients running queries: 100

         Average number of queries per client: 100000

 

qps=10000000/150.370=66502.62685376072

 

3.4 DRDS上测试(5个只读每个开20%) 100并发 总共跑 1千万条相同的主键查询:

 

mysqlslap  --query=/home/hebin/hebin_select.sql --concurrency=100 --number-of-queries=10000000  --iterations=1 --create-schema=drds_xncs_bic_cs --engine=innodb  -h10.3.244.137 -udrds_xncs_bic_cs -p

 

Benchmark

         Running for engine innodb

         Average number of seconds to run all queries: 216.412 seconds

         Minimum number of seconds to run all queries: 216.412 seconds

         Maximum number of seconds to run all queries: 216.412 seconds

         Number of clients running queries: 100

         Average number of queries per client: 100000

 

qps=10000000/216.412=46208.15851246696

 

3.5 DRDS上测试(5个只读每个开20%) 1000并发 总共跑 1亿条相同的主键查询:

 

mysqlslap  --query=/home/hebin/hebin_select.sql --concurrency=1000 --number-of-queries=100000000  --iterations=1 --create-schema=drds_xncs_bic_cs --engine=innodb  -h10.3.244.137 -udrds_xncs_bic_cs -p

 

Benchmark

         Running for engine innodb

         Average number of seconds to run all queries: 1790.584 seconds

         Minimum number of seconds to run all queries: 1790.584 seconds

         Maximum number of seconds to run all queries: 1790.584 seconds

         Number of clients running queries: 1000

         Average number of queries per client: 100000

 

 

qps 大约 100000000/1790=55865.9217877095

 

 

 

*****以上数据考虑到单台ECS性能并发量的局限性,于是采用多台ECS并发测试,通过DRDSRDS控制台观察数据***************************

3.6 DRDS上测试(5个只读每个开20%) 共10000并发,两个ECS执行分别5000 总共跑 20亿条相同的主键查询:

 

 

mysqlslap  --query=/tmp/huayu.sql --concurrency=5000 --number-of-queries=1000000000  --iterations=1 --create-schema=drds_xncs_bic_cs --engine=innodb  -h10.3.244.137 -udrds_xncs_bic_cs -p

 

物理RT:1.1ms左右

DRDS:QPS:大约125000左右

RDS上SQL的执行时间:100微秒左右

 

3.7 DRDS上测试(5个只读每个开20%) 共15000并发,三个ECS执行分别5000 总共跑 30亿条相同的主键查询:

 

 

DRDS:QPS:大约210000左右

RDS上SQL的执行时间:100微秒左右

物理RT:2.1ms左右

 

3.8 RDS上测试(5个只读每个开20%) 共1500并发,两个ECS执行分别1000,500 总共跑 20亿条相同的主键查询:

 

 

mysqlslap  --query=/tmp/huayu.sql --concurrency=1000 --number-of-queries=1000000000  --iterations=1 --create-schema=drds_xncs_bic_cs --engine=innodb  -h10.3.244.137 -udrds_xncs_bic_cs -p

连接数:75%(1500),RDS最大连接数为2000.

RDS:QPS:接近70000

CPU:接近100%

SQL的执行时间:几百-几万微妙

ECS的网络:已经接近瓶颈

 

 

3.9 RDS上测试(5个只读每个开20%) 共1900并发,三个个ECS执行分别1000,500,400 总共跑 30亿条相同的主键查询

连接数:1900.

RDS:QPS:接近70000

Cpu:接近100%

SQL的执行时间:几百-几万微妙

RDS的QPS已经到达极限

ECS的网络:接近瓶颈

################################################################################################################

 

四.测试总结:

 

单台ECS相对并发量较低的测试:

1.RDS 只读库和主库 性能基本相同

2.单独开一个只读的 DRDS 耗时比 单rds写库或者单rds只读库 相差较大 154/235 = 65% 大约损失35%的性能

3.开满5个只读的 DRDS 耗时比 单rds写库或者单rds只读库 相差较大 154/216 = 71% 大约损失29%的性能

4.单rds的qps是6w6左右,最高性能的drds提高并发后最多达到5w5左右 所以  17% 左右的性能损耗

 

多台ECS,高并发量,DRDSRDS最大吞吐量测试:

5.DRDS开满5个只读实例,三台ECS到达15000的并发,DRDS的QPS可以达到210000左右

6.RDS主实例开5个只读实例,两台ECS接近75%(1500)的并发,RDS的QPS可以接近70000。再次提高并发数QPS已经没有提升。可见主实例RDS规格48G内存128G磁盘的最大QPS接近70000。













相关实践学习
跟我学:如何一键安装部署 PolarDB-X
《PolarDB-X 动手实践》系列第一期,体验如何一键安装部署 PolarDB-X。
目录
相关文章
|
11天前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例详细介绍_性能测试和租用价格
阿里云服务器ECS经济型e实例详细介绍_性能测试和租用价格,阿里云服务器ECS推出经济型e系列,经济型e实例是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU采用Intel Xeon Platinum架构处理器,支持1:1、1:2、1:4多种处理器内存配比,e系列性价比优选
|
2天前
|
关系型数据库 MySQL 数据库
测试部署PolarDB-X 分布式与集中式
在本文中,作者详述了在CentOS 7.9上部署测试PolarDB-X分布式与集中式数据库的过程。PolarDB-X作为阿里云优化的分布式数据库,提供高稳定性和与MySQL的兼容性,是应对单体数据库扩展性和性能瓶颈的解决方案,同时也符合国产化需求。文章介绍了部署环境准备,包括关闭防火墙和SELinux,设置系统参数,安装Python3和Docker,以及配置MySQL客户端。接着,通过PXD工具部署了PolarDB-X的集中式和分布式版,遇到的问题包括阿里云镜像源异常导致的部署失败以及指定版本安装的困扰。最后,作者进行了初步的压力测试,并对文档完善、生态工具建设以及提供更多使用案例提出了建议。
19 4
测试部署PolarDB-X 分布式与集中式
|
11天前
|
存储 弹性计算 运维
阿里云经济型e实例详细介绍_性能测试_使用限制说明
阿里云服务器ECS推出经济型e系列,经济型e实例是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU采用Intel Xeon Platinum架构处理器
|
11天前
|
关系型数据库 中间件 数据库连接
drds读写分离与只读实例
drds读写分离与只读实例
43 3
|
11天前
|
弹性计算 测试技术 开发者
我使用了阿里云的e实例进行了一系列性能测试
我使用了阿里云的e实例进行了一系列性能测试
65 0
|
7月前
|
SQL 缓存 关系型数据库
PolarDB-X 混沌测试实践:如何衡量数据库索引选择能力
随着PolarDB分布式版的不断演进,功能不断完善,新的特性不断增多,整体架构扩大的同时带来了测试链路长,出现问题前难发现,出现问题后难排查等等问题。原有的测试框架已经难以支撑实际场景的复杂模拟测试。因此,我们实现了一个基于业务场景面向优化器索引选择的混沌查询实验室,本文之后简称为CEST(complex environment simulation test)。
|
8月前
|
存储 弹性计算 运维
阿里云服务器e实例优惠价格表及性能测试
阿里云服务器e实例优惠价格表及性能测试,阿里云ECS云服务器e系列2核2G配置182元一年、2核4G配置365元一年、2核8G配置522元一年
86 0
|
10月前
|
监控 关系型数据库 Shell
用shell脚本写一个监控drds实例的脚本
用shell脚本写一个监控drds实例的脚本
57 1
|
10月前
|
JSON 监控 关系型数据库
用python写一个监控drds实例的脚本
用python写一个监控drds实例的脚本
60 1
|
10月前
|
弹性计算 前端开发 关系型数据库
实践教程之使用PolarDB-X进行TP负载测试
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何使用PolarDB-X进行TP负载测试。

热门文章

最新文章