测试原因

 
为什么需要做性能测试
  • 模拟比当前系统更高的负载,找出性能瓶颈
  • 重现线上异常
  • 测试不同硬件软件配置
  • 规划未来的业务增长
 
测试分类

 
性能测试的分类
  • 设备层的测试
  • 业务层的测试
  • 数据库层的测试
 
设备层的测试
  • 关注哪些指标
    • 服务器,磁盘性能
    • 磁盘坏块率
    • 服务器寿命
 
业务层测试
  • 针对业务进行测试
 
数据库层的测试
  • 什么情况下要做Mysql的测试
    • 测试不同的Mysql分之版本
    • 测试不同的mysql版本
    • 测试不同的mysql参数搭配
 
mysql测试分类
  • CPU Bound --全内存的测试,测试的数据远小于配置的内存;这样就可以不用因为磁盘IO的性能不同,而影响测试结果。
  • IO  Bound-- 测试的数据量远大于内存,这就有大量的数据从磁盘IO读取写入;
 
4小类:
  • 写入测试
  • 更新测试
  • 纯度测试
  • 混合模式(根据业务不同)
 
常用的测试工具
  • 开源的mysql性能测试工具
    • sysbench
    • tpcc-mysql
    • mysqlslap
  • 针对业务编写性能测试工具
    • blogbench--根据网易博客,的具体业务来做的测试工具
 
性能测试衡量指标:
  • 服务吞吐量
    • TPS--每秒执行事务的总量
    • QPS--每秒执行的请求总量
  • 服务响应时间
  • 服务并发性---正在工作中的并发操作,或者是同时工作中的线程数或者连接数。例如一个web站点"同时有50000个用户"访问,却可能只有10--15个并发请求到mysql数据库,此时并发数只有10--15。
  • 可扩展性---------------简单来说,给系统增加一倍的资源(比如两倍的CPU数),就可以获得两倍的吞吐量。当然,同时性能(响应时间)也必须在可以接受的范围内。大多数系统是无法做到如此理想的线性扩展的。
 
测试方法

 
设计基准测试的常见错误:
  • 使用真实数据的子集而不是全集。
  • 与真实用户行为不匹配。
  • 没有检查错误。-----------测试中遇到不是预期结果,就应该检查错误日志,这时基本要求。
  • 忽略了系统预热的过程----系统重启后,缓存是没有数据的,这时测试与实际情况不符,实际很可能是 缓存中已经有很多数据。
  • 测试时间太短
 
1 测试规划:
  • 记录测试数据
  • 系统配置的步骤
  • 如何测试的步骤
  • 分析结果
  • 预热的方案
 
应该建立将参数和结果文档化的规范,每一轮测试都必须进行详细记录
 
2  基准测试应该运行多长时间
 
一个简单的测试规则,就是等系统看起来稳定的时间至少等于系统预热的时间。
 
基准测试应该运行足够长的时间。
 
如果没有实际去完成准确完整的基准测试,那么已经花费的所有时间都是一种浪费。有时候要相信别人的测试结果,这总比做一次半拉子的测试来得到一个错误的结论要好。
 
3  获取系统性能和状态
 
需要记录的数据包括系统状态和性能指标:
  • cpu使用率
  • 磁盘I/O
  • 网络流量统计
  • show global status 计数器等
使用脚本对这些数据进行收集。
 
基于mysql的默认配置的是没有什么意义,因为默认配置是基于消耗很少内存的极小应用的。
 
4 运行基准测试并分析结果
 
自动化基准测试,是个不错的方案。可以是一个makefile或者一组脚本。
 
要尽可能地使用所有测试过程都自动化,包括数据装载,系统预热,执行测试,记录结果。等。
 
多次测量
 
5 绘图的重要性
 
通过图形可以立刻发现一些问题,而这些问题在原始数据中却很难被注意到。
 
在执行基准测试的时候要尽可能收集更多的细节数据,然后将数据绘制成图形,这样可以帮助快速地发现问题。
 
gnuplot或者R绘图;
 
测试工具

 
Sysbench
  • 业界较为出名的性能测试工具
  • 可以测试磁盘,CPU,数据库
  • 支持多种数据库:oracle,DB2,MYSQL
  • 需要自己下载编译安装
  • 建议版本:sysbench0.5
 
sysbench,不仅用来测试数据库的性能,也可以测试运行数据库的服务器的性能。
 
强烈建议熟悉sysbench测试,在mysql用户的工具包中,这应该是最有用的工具之一。
 
  • sysbench 的cpu基准测试
  • sysbench 的文件I/O基准测试
  • sysbench 的OLTP基准测试
 
sysbench 其他的基准测试,但和数据库性能没有直接关系。
  • 内存-----测试内存的连续读写性能
  • 线程-----测试线程调度器的性能。
  • 互斥锁---测试互斥锁性能。
  • 顺序写---测试顺序写的性能。
 
 
Tpcc-mysql
 
  • TPC-C是专门针对联机交易处理系统(OLTP系统)的规范
  • Tpcc-mysql由percona根据规范实现
TPCC流程  更能模拟线上业务
使用该测试工具:需要创建数据和表结构,加载数据,执行测试三个步骤。
 
benchmark()
mysql的benchmark():可以测试某些特定操作的执行速度。
 
mysql> set @input := 'hello world';
Query OK, 0 rows affected (0.00 sec) mysql> select benchmark(1000000,MD5(@input));
+--------------------------------+
| benchmark(1000000,MD5(@input)) |
+--------------------------------+
| 0 |
+--------------------------------+
1 row in set (1.45 sec) mysql> select benchmark(1000000,SHA1(@input));
+---------------------------------+
| benchmark(1000000,SHA1(@input)) |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (1.40 sec)
虽然benchmark()函数用起来很方便,但是不适合用来做真正的基准测试,因为该函数只是简单地返回服务器执行表达式的时间,不会涉及分析和开销,等因素。
而且表达式必须像这个例子一样包含用户定义的变量(input),否则会多次执行同样的表达式会因为系统缓存命中而影响结果。
 
具体测试实践,请看sysbench实践,tpcc-mysql实践;
 
 总结

 
  • 四小类:写入测试,更新测试,纯度测试,混合模式
  • 性能测试衡量指标:
    • 服务吞吐量
      • TPS--每秒执行事务的总量
      • QPS--每秒执行请求的总量
    • 服务响应时间
    • 服务并发性
  • 设计测试常见错误:
    • 使用数据子集而不是全集,
    • 与真实用户行为不匹配,
    • 没有检查错误,
    • 忽略了系统预热过程,测试时间太短;
  • 测试方法
    • 测试规划:
      • 记录测试数据,
      • 系统配置步骤,
      • 测试步骤,
      • 分析结果,
      • 预热方案;
    • 测试时间:测试应该运行足够长的时间,至少等于系统预热的时间。
    • 获取系统性能和状态:cpu,IO,网络流量,mysql状态计数器;
    • 运行测试:自动化测试包含:数据装载,系统预热,执行测试,记录结果。
    • 绘图分析:直观的发现问题;
    • 测试工具:sysbench,tpcc-mysql,benchmark()
  • 测试小结:
    • IO Bound测试数据量要远大于内存,cpu Bound测试数据量要小于内存
    • 测试时间建议大于60分钟,减小误差;有系统预热时间;
    • Sysbench更倾向于测试Mysql性能,Tpcc更接近于业务

mysql基础测试的更多相关文章

  1. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  2. MySQL基础学习总结

    1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...

  3. MYSQL 基础操作

    1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...

  4. myBatis 基础测试 表关联关系配置 集合 测试

    myBatis 基础测试 表关联关系配置 集合 测试 测试myelipse项目源码 sql 下载 http://download.csdn.net/detail/liangrui1988/599388 ...

  5. 服务管理之mysql基础

    目录 mysql基础 1. 关系型数据库介绍 1.1 数据结构模型 1.2 RDBMS专业名词 2. mysql安装与配置 2.1 mysql安装 2.2 mysql配置 3. mysql的程序组成 ...

  6. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  7. (3.2)mysql基础深入——mysql源码阅读工具安装与应用

    (3.2)mysql基础深入——mysql源码阅读工具安装与应用 关键字:mysql源码阅读工具 工具列举:一般多用[1][2][3]吧 [1]source insight [2]写字板/记事本 UE ...

  8. (3.1)mysql基础深入——mysql二进制与源码目录结构介绍

    (3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...

  9. Linux系统——MySQL基础(一)

    # 数据库 ## 数据库简单的分类:(1)关系型数据库:MySQL和Oracle.Postgresql(2)非关系型数据库:Memcached和Redis(3)消息队列中间件(4)搜索引擎数据库:El ...

随机推荐

  1. 【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1624 一开始我打算一个个最短路................................. 然 ...

  2. 最新Android面试题集锦

    近期由于某些原因想换工作,整理一下个人认为面试中还比較值得记录的一些题目,给须要找这方面工作的人一个借鉴. 下面基本仅仅记录题目或者大概答案,假设大家有比較具体的解答或者比較好的面试题木,希望各位看到 ...

  3. C# 中的treeview绑定数据库(递归算法)

    近日面试的给我两道题目,一道是IQ测试,第二个就是题目所言 总共两个表 department(id int not null primary key,parentid int,name char(50 ...

  4. Python3创建RIDE桌面快捷方式的另一种方法

    今天尝试了一下Python3下安装Robot Framework,但是原来的Python2下创建ride快捷方式的方法都不奏效,启动不了ride.于是,转为VBS脚本的方式来间接创建快捷方式.毕竟,每 ...

  5. 哪些工具可以在word中快速绘制图形

    在数学试卷.论文.电子教案等编写过程中,我们经常要作出数学图形或图像,若用Word自身携带的绘图工具绘制,多有不便.比如一些曲线的形状很难画得像,画到位,作图时修修改改,颇为费力,所以需要借助一些辅助 ...

  6. springmvc 发送PUT 和 DELETE 请求

    一: 发送 DELETE 或者 PUT 请求: 1.在表单中加入一个隐藏的参数: _method  , 值是 DELETE (或者PUT) <form action="springmv ...

  7. 正则表达式Regex

    1.概念 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式( ...

  8. C#中文件和byte[]互换问题

    如何将图片和声音转化成byte[],并通过webservice进行传输?    如何将webservice传输过来的byte[],转化成我们想要的文件?    (一)文件转化为byte[]    方法 ...

  9. 第四篇:new和delete的基本用法

    前言 new和delete是C++中用来动态管理内存分配的运算符,其用法较为灵活.如果你对它们的几种不同用法感到困惑,混淆,那么接着看下去吧. 功能一:动态管理单变量/对象空间 下面例子使用new为单 ...

  10. HQL的第一个程序

    使用HQL查询数据库: 分为以下几个步骤 1获取query对象 //1获取query对象 String hql="FROM Employee e where e.salary>?&qu ...