【MySQL】数据库性能测试

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
性能测试 PTS,5000 VUM额度
简介: 压测方法论   压测目的 压测场景/模型 结果分析 压测报告 其实可以把每次压测当作是一个项目,包括压测目的是什么?新版本数据库上线?新功能? 新的机型 ? 确定压测目标之后我们要选择何种压测场景进行压测,只读,只写,读写混合? 观察压测过程中的性能曲线是否满足我们的期望,并且真对性能出现可重复性抖动的问题进行分析原因并改进。
+关注继续查看

压测方法论

 


  • 压测目的

  • 压测场景/模型

  • 结果分析

  • 压测报告


其实可以把每次压测当作是一个项目,包括压测目的是什么?新版本数据库上线?新功能? 新的机型 ?


确定压测目标之后我们要选择何种压测场景进行压测,只读,只写,读写混合? 观察压测过程中的性能曲线是否满足我们的期望,并且真对性能出现可重复性抖动的问题进行分析原因并改进。


压测结束之后,发布压测报告。


2为什么要压测

 


  • 测试数据库新版本的性能  

  • 测试新机型的性能  

  • 验证某些DB/OS层面的参数  

  • 压测新型存储的性能 某个厂商的SSD/nVME  

  • 压测某些场景  

  • 比如cgroup 隔离 ,网卡绑定等等


其实这个也就是我们压测的目的/目标 ,新的db/机器/存储等上线和新技术预研,业务大促活动类似于11.11 或者秒杀活动等等都是需要提前进行压测的,评估数据库系统的性能容量和业务瓶颈,要不访问量过大导致业务瘫痪 就比较麻烦了,失去客户对我们产品的信任了。


当然这个需求是对业务量相当大的时候必须做的,如果业务量极小可以忽略该环节。


3影响压测的因素

 


讲完压测的目的,我们要讨论压测过程中可能会遇到的问题。可能影响整体系统性能的因素大致分为:DB 层面、OS 层面 、存储层面。


  • DB 层面


0?wx_fmt=png


对于MySQL层面,Buffer pool大小事务写磁盘,binlog落盘的策略,innodb 层的并发读设置  事务隔离级别 默认使用rc 都是会影响到最终的压测写入性能表现。


  • OS 层面


0?wx_fmt=png


关闭numa 在bios 里面设置 cpu 为最大性能模式,记得有一两次是由于设置为省电模式导致性能出现问题。初始化系统的时候选择ext4 或者xfs 系统文件。内核参数主要是 tcp 参数,影响业务app 和db之间建立网络连接。


  • 存储层面


0?wx_fmt=png


其实数据库模型可以分为 io bond 类型 和cpu bond 类型,估计大家目前的oltp业务系统,绝大多数的业务系统属于 io bond 类型,大家的业务系统大多数也是都是用了基于 ssd的存储结构 ,可能采用的raid 模式不一样有些是raid10 ,有些是raid 5 的差异。


在做性能压测的时候需要注意 raid 卡的配置,尤其是读写策略 WB 模式和WT模式性能差异极大。生产业务上注意对raid卡的充放电,避免导致模式变为WT 模式致使性能下降。


4需要关注的指标

 


  • DB层

  • QPS ,TPS ,RT(响应时间)


对于db层,我想特别强调对rt的监控,脱离业务场景的压测都是耍流氓,很多压测报告都说qps,tps 极高,但是没有公布对应的rt。大于生产需求的rt 阀值的压测结果都是没有用的。


比如说用户发起的一个业务请求,包含20次select,10次dml操作,单条sql,rt 为10ms,应用服务器 和db服务器网络交互 一次同城1ms -2ms,跨城5-15ms,单独db的响应时间就30*10=300ms 了,加上app与db的交互和业务处理,前端的处理时间,对于高并发的系统,吞度量不能接受。


  • 系统

  • CPU: load,usr cpu,

  • IO   :  await, svctm, %util  

  • 网络:  recv , send


await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒)


%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比


svctm:平均每次设备I/O操作的服务时间 (毫秒)%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的


  • 工具  

  •  orzdba  vmstat  iostat  dstat


5注意事项

 


  • 每轮压测彼此避免相互干扰  

  • 使用orzdba 观察 uckpt% 等待日志刷新完毕之后再开始测试新一轮。  

  • 注意压测系统的瓶颈


我最开始的某些压测场景没有做每次压测的隔离,导致上次的压测结果影响了下一次的压测性能,致使系统rt不稳定。可以通过orzdba –innodbs 命令查看uckpt% 该参数表明还有多少日志没有被刷新到磁盘。


6常用压测工具(开源)

 


这里我例举几种常见的开源数据库压测工具,仅仅讲述网上公开的how to 资料有很多,大家可以利用谷歌去搜索。


  • Sysbench

  • cpu,threads,mutex,memory,fileio,oltp


sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。是一款非常受dba 欢迎的压测工具。


  • Tpcc-mysql

  • MySQL OLTP benchmarking


TPC(Tracsaction Processing Performance Council) 事务处理性能协会是一个评价大型数据库系统软硬件性能的非盈利的组织,TPC-C是TPC协会制定的,用来测试典型的复杂OLTP系统的性能;Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试,其源码放在bazaar上,因此需要先安装bazaar客户端。值得说明的是 Tpcc-mysql 包括五个处理逻辑,是比较贴近电商平台业务的一个压测工具New-Order :新订单 Payment :支付 Order-Status :订单查询 Delivery:发货 Stock-Level  :库存。


  • mysqlslap

  • MySQL  自带的压测工具 单条SQL


mysqlslap是从5.1.4版开始的一个MySQL官方提供的压力测试工具。通过模拟多个并发客户端访问MySQL来执行压力测试,同时提供了比较详细的数据性能报告。并且能很好的对比多个存储引擎在相同环境下的并发压力性能差别。通过mysqlslap –help可以获得可用的选项,个人觉得 mysqlslap是所有压测软件中最简单的。


  • tcpcopy

  • 引用线上流量到测试环境,模拟真实压力


TCPCOPY 是一个 tcp 流量的实时复制工具,其1.0版本由网易工程师 @tcpcopy 开发和维护。一般用来将生产环境的线上流量实时复制到测试环境进行测试。例如新系统上线前,如果我们希望进行一些基本的压力测试,那么我们可以直接利用 tcpcopy 来复制线上的流量过来对系统进行测试,这样的好处是测试数据接近真实水平,且实施起来相对简单。下面我们将通过一个真实的使用案例,来简单介绍 tcpcopy 的基本使用方法。我们假定读者对 tcp 以及路由相关基本知识有一定了解。


  • Mydbtest

  • 楼方鑫的一款压测工具,可以去onexsoft下载


Mydbtest 估计很多人没有使用过,之前是楼方鑫在支付宝的时候的一个压测工具,可以根据业务模型 配置业务的sql,利用线上的数据备份进行压测的一款工具,推荐大家尝试使用。


7压测工具

 


  • Sysbench  

  • 支持多种目标的测试 缺少业务场景支持


  • mysqlslap  

  • 使用方法简单,容易上手 测试方法/场景单一 TPCC      优点 业务场景固定,能够模拟商品购买流程 缺点 不能代表自己公司业务场景。


  • tcpcopy  

  • 真实的线上压力,配置复杂,涉及线上环境,风险偏大。


  • mydbtest  

  • 定制sql,模拟业务访问,动态修改,需要先部署好压测目标库,基础工作准备略多。


如ppt上所言,每个工具各有千秋,大家在压测的时候需要选择最适合自己业务/目的的压测工具。不过我本人推荐使用mydbtest 工具,其足够灵活性,适配行更强。


8面临的问题

 


  • 不考虑场景,就是耍流氓

  • 难以模拟线上真实业务压力

  • 压测模式不够细化  

  • 只读,只写,RW,会话数,TPCC 能够模拟五个业务场景

  • 不能自动化获取压测结果


  • 需要人肉处理压测数据 获取QPS,TPS 等


9更合理的压测工具

 


在这里我提出的是一个设想,运维自动化足够高的公司可以向这个方向靠近。


  • 按需定制压测计划

  • 模拟线上生产环境

  • 配置灵活

  • 支持分布式压测

  • 自动收集性能数据


1.1 根据业务需求制定压测计划

  • 压测模型

  • 模拟各种业务类型 创建订单,减库存 等等


1.2 模拟线上生产环境

  • 数据库硬件环境

  • 真实的线上数据

  • 模拟线上应用行为模式


1.3 工具配置灵活

  • 适配多个脚本

  • 调整读写比

       读写比

       IUD的比例

  • 控制并发度

  • 调整活跃/非活跃线程比例

  • 支持分布式

       跨机房调用多台app server


1.4 自动收集性能数据 QPS,TPS,RT


0?wx_fmt=png


10总结

 


0?wx_fmt=png


这个是之前和叶金荣讨论关于性能压测的话题之后整理的思维导图。具体的地址在http://vdisk.weibo.com/s/dCZasgFETrgn/1445265070,涵盖数据库压测的所有内容。当然也有不足之处,欢迎大家给予建议和补充,能够使数据库压测结果更精准 ,为数据库性能/可用性评估提供有力帮助。


关于参考,这里我强烈推荐 dimitrik 大牛的blog ,里面汇集了各种压测场景和技术分析。

http://dimitrik.free.fr/    
http://blog.itpub.net/22664653/viewspace-713075/
http://blog.itpub.net/22664653/viewspace-757735/
http://blog.itpub.net/22664653/viewspace-757506/
http://imysql.com/2012/12/21/pc-server-benchmarking.html

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
SQL 分布式计算 测试技术
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris 迁移实践:有赞查询提速近 10 倍,OLAP 分析更实时高效!
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
|
4月前
|
关系型数据库 MySQL Java
jmeter--压测数据库
jmeter--压测数据库
|
SQL Oracle Java
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
132 0
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
|
运维 Cloud Native 关系型数据库
复盘:我在真实场景下对几款主流云原生数据库进行极限性能压测的一次总结!!(建议收藏)
最近几年,云数据库市场日趋繁荣,进入百花齐放、百家争鸣的时代,头部云计算厂商相继推出了自己的数据库产品,特别是亚马逊的Aurora、阿里云的PolarDB、华为云的GaussDB等等。
615 1
复盘:我在真实场景下对几款主流云原生数据库进行极限性能压测的一次总结!!(建议收藏)
|
SQL 运维 负载均衡
【6月23日直播预告】携程OcenanBase 实践数据库发布和拟真压测
6月23日(周四)19:00,将线上播出《深入浅出OceanBase第五期》,将带来携程OceanBase实践数据库发布和拟真压测,欢迎大家及时关注。
|
存储 缓存 安全
性能测试告诉你 mysql 数据库存储引擎该如何选?
简介 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL 的核心就是插件式存储引擎。
111 0
性能测试告诉你 mysql 数据库存储引擎该如何选?
|
存储 缓存 Oracle
征文分享|OceanBase 3.1.2 数据库性能测试探索
本文系 OceanBase 第二届技术征文大赛参赛作者“大数据模型”投稿,也是获得本届征文大赛优秀奖的文章。
436 0
征文分享|OceanBase 3.1.2 数据库性能测试探索
|
SQL 弹性计算 关系型数据库
HTAP数据库 PostgreSQL 场景与性能测试之 3.1 - (OLAP) 大表JOIN统计查询-10亿 join 1亿 agg
标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多
1673 0
|
SQL 关系型数据库 数据库
OceanBase数据库实践入门——性能测试建议
本文主要分享针对想压测OceanBase时需要了解的一些技术原理。这些建议可以帮助用户对OceanBase做一些调优,再结合测试程序快速找到适合业务的最佳性能。
2686 0
|
存储 关系型数据库 分布式数据库
基于POLARDB数据库的压测实践
POLARDB架构简介 PolarDB是阿里云ApsaraDB数据库团队研发的基于云计算架构的下一代关系型数据库(暂时仅支持MySQL,PostgreSQL正在紧锣密鼓的开发中),其最大的特色是计算节点(主要做SQL解析以及存储引擎计算的服务器)与存储节点(主要做数据块存储,数据库快照的服务器)分.
2422 0
推荐文章
更多