开发者社区> 化雨u> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 采用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。













版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DRDS和RDS只读实例性能对比测试
我们都知道,对于数据库中基础信息表来说,它的数据变化频率低,数据量小,但由于基础数据本身的特点,大多数相关系统都会对频繁地读取它。即便我们通过对数据调取服务进行服务化包装,通过HSF服务的方式对外暴露,以减少多个系统直接操作数据库带来的问题,但数据本身的读取频率和并发度都非常高,QPS可以轻易达到10万以上。
398 0
基于Dubbo的压测调优实例
       不久前参与开发了一个基于dubbo分布式框架的底层账单系统,并实现了其中的一部分业务接口,目前需对这些接口进行压测,以评估生产环境所能承受的最大吞吐量。
1447 0
软件测试基础
关于测试,知识点还是非常丰富的,最近收到了CSDN的书,参考了陈绍英老师写的《大型IT系统性能测试入门》这本书,写下了以下的见解,首先先来了解一下测试种类。 (1)压力测试: 对系统施加压力的测试,利用最大级别的的设置来进行的测试。
877 0
性能测试总结(一)---基础理论篇
    随着软件行业的快速发展,现代的软件系统越来越复杂,功能越来越多,测试人员除了需要保证基本的功能测试质量,性能也随越来越受到人们的关注。但是一提到性能测试,很多人就直接连想到Loadrunner。
686 0
iOS开发UI篇—核心动画(基础动画)
iOS开发UI篇—核心动画(基础动画) 一、简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。
594 0
DS基础一
1.多岔路口的交通灯管理(通行能力最大化)。 2.算法解决的是一类问题。  3.DS是一个二元组,包含数据元素的集合和定义在数据元素关系上的集合。4.根据斯特林公式n!约等于(n/e)^n。5.指数级算法如2^n,n在小于20时还可以用。
647 0
+关注
化雨u
智者乐水,仁者乐山
18
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载