测试原因

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

 
性能测试的分类
  • 设备层的测试
  • 业务层的测试
  • 数据库层的测试
 
设备层的测试
  • 关注哪些指标
    • 服务器,磁盘性能
    • 磁盘坏块率
    • 服务器寿命
 
业务层测试
  • 针对业务进行测试
 
数据库层的测试
  • 什么情况下要做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. 如何实现Asp与Asp.Net共享Session

    <iframe align="top" marginwidth="0" marginheight="0" src="http ...

  2. C++ 类的对象管理模型初讲

    //类的对象管理模型初讲 #include<iostream> using namespace std; class PointA{ private: int x;//占据4个字节大小的内 ...

  3. 解决Maven项目 Missing artifact jdk.tools:jdk.tools:1.7的错误

    因学习项目需要,在pom.xml添加hbase-client依赖的时候提示解决Maven工程中报 Missing artifact jdk.tools:jdk.tools:1.7的提示信息,之前遇到这 ...

  4. TensorFlow基础笔记(2) minist分类学习

    (1) 最简单的神经网络分类器 # encoding: UTF-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist i ...

  5. 【Properties】Properties的load方法

    Properties的load方法其实就是传进去一个输入流,字节流或者字符流,字节流利用InputStreamReader转化为字符流, 然后字符流用BufferedReader包装,Buffered ...

  6. Unity3D项目之 Survival Shooter 记录

    1.导入资源 2.把预设文件的环境拖到场景中, 3.位置归0 4.保存场景 5.删除默认灯光,把预设灯光拖到场景中,位置归0 6.新建一个 Quad 7.旋转90度,设置缩放100,100,1 重命名 ...

  7. QTreeWidget 获取被双击的子项的层次路径

    from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout, QTreeWidget, QTreeWidgetItem, QGrou ...

  8. ERROR getting 'android:label' attribute: attribute is not a string value

    这个的原因很多地方都有描述,原因多半是多国语言string.xml 有的有这个值, 有的没有. 关键是怎么定位? 实际上他报错的是当前处理的xml element有问题, 而出错的时候盖住了要处理的. ...

  9. 《linux系统及其编程》实验课记录(五)

    实验 5:权限的设置和更改 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统.有另外一个无特权用户 student,密码 student 的 ...

  10. ssh证书登录(实例详解)

      前言 本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问 ...