MySql-性能压力测试-概论篇

性能测试前先要清楚目的是什么

  • 测试数据库新版本的性能
  • 测试新机型的性能
  • 验证某些DB/OS层面的参数
  • 压测存储的性能
  • 压测某些场景

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

影响性能的因素
大致分为:DB 层面、OS 层面 、存储层面。

  • DB层面
    MySql-性能压力测试-概论篇_第1张图片
    对于MySQL层面,Buffer pool大小事务写磁盘,binlog的策略,innodb 层的并发读设置,事务隔离级别,都是会影响到最终的压测写入性能表现。

  • OS层面
    MySql-性能压力测试-概论篇_第2张图片

  • 存储层面
    MySql-性能压力测试-概论篇_第3张图片

需要关注的重要指标

  • DB层
    QPS(Queries per second)、TPS(Throughput)、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

注意事项
- 每轮压测彼此避免相互干扰
- 使用orzdba 观察 uckpt% 等待日志刷新完毕之后再开始测试新一轮。
- 注意压测系统的瓶颈

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

常用工具

  • 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 以及路由相关基本知识有一定了解。

你可能感兴趣的:(数据库,mysql,性能测试,压力测试)