怎样进行数据库性能测试

发表于:2013-05-21来源:博客园作者:qileilove点击数: 标签:性能测试
究竟怎样进行数据库性能测试,数据库性能测试需要做些什么?大多数产品线的RD和QA也比较迷茫,经常过来咨询。 一般说来,做数据库性能测试需要如下几个步骤:

  前言:

  究竟怎样进行数据库性能测试数据库性能测试需要做些什么?大多数产品线的RD和QA也比较迷茫,经常过来咨询。

  一般说来,做数据库性能测试需要如下几个步骤:

  1、明确测试目的

  2、设计测试模型 (即压力模型)

  3、准备测试集群环境

  4、准备压力测试工具或者编写压力测试脚本

  5、明确性能指标并加监控

  6、根据2设计的测试模型准备测试数据

  7、测试执行

  8、测试分析

  本文依据以上步骤,模拟测试需求- 多实例多盘数据库的性能对比测试,制定测试方案公布给大家,方便大家了解数据库性能测试。

  多实例多盘数据库性能测试方案

  一、测试目的

  1、对比数据库单实例、多实例的在不同硬件设备上的性能情况。

  2、对比单机单实例和多实例的性能情况

  3、验证网络带宽是否成为flash产品发挥性能优势的瓶颈。

  4、验证flash产品是否随时间存在性能衰减的可能。

  二、测试方法概述

  测试基准工具:smart-slap(mysqlslap),Jmeter模拟若干客户端、若干用户执行指定的SQL语句,访问数据库。同时,通过监控工具监控系统负载、mysql数据库的服务,全面了解数据库系统以及硬件的负载情况。

  测试模型

  测试监控及结果统计

  监控工具统计如下信息,分析性能瓶颈。

  系统负载:

  CPU:CUP_IDLE、CPU_WA、SERVER_LOADAVG

  内存:MEM_URATE、MEM_USED

  网卡:NIC_TOTAL_IN、NIC_TOTAL_OUT、

  数据库负载:

  QPS:COM_READS、COM_WEITES

  主从延迟:SECOND_BEHIND_MASTER

  慢查询:SLOW_QUERIES_PT

  连接数:THREADS_CONNECTED、THREADS_RUNNING

  STL-tools 监控集群负载

  附:性能指标:

  系统负载:

  CPU:CUP_IDLE 、CPU_WA、SERVER_LOADAVG

  内存:MEM_URATE、MEM_USED

  网卡:NIC_TOTAL_IN、NIC_TOTAL_OUT、

  数据库负载:

  QPS:COM_READS、COM_WEITES

  主从延迟:SECOND_BEHIND_MASTER

  慢查询:SLOW_QUERIES_PT

  连接数:THREADS_CONNECTED、THREADS_RUNNING

  三、测试准备

  测试环境准备

  假设将四类IO存储设备,进行单、多实例的性能测试对比。则可以部署测试集群如下:

  测试集群具体搭建:

  2台机器 ——–4主4从

  根据测试更换硬件:

  RAID+SAS:

  RAID+SSD:

  Flash:

  Fusion:

  监控:在每台机器上部署数据库监控脚本monitor,最好有统一平台上调度、管理、分析monitor采集到的数据。

  测试工具准备:

  Smart-slap:

  特点:全量发压力,可得到最大QPS,对比不同集群的最大QPS。分析不同集群的最大QPS.

  Jmeter:

  特点:控制实时压力,分析各集群在指定压力下的性能情况。

  测试思路:

  先采用slap进行对不同集群组合进行同样的sql压力。(压力时间)取得不同集群的最大QPS,进行对比。

  取最大QPS的一定比率(如1/8倍,1/4倍,1/2倍,1倍)作为每秒发送的请求压力进行测试。比较各个集群的负载、数据库性能情况。

  网络瓶颈测试:

  同网段3台压力机器 往一个集群压足够多的IO压力。分析各个硬件的IO。磁盘、CPU比网卡提前到达压力阀值说明网卡不是瓶颈。若网卡IO先达到极限则说明网卡存在瓶颈。

  硬件性能衰减测试

  同样压力测试24小时,比较最初1小时,和最后1小时的 TPS.以及各项性能指标。

  测试数据准备:

  数据库:flashT

  36张表:

  Test1- test36:

  表结构:

  CREATE TABLE `test1` (

  `doc_id` int(10) unsigned NOT NULL default ’0′,

  `main_status` tinyint(3) unsigned NOT NULL default ’0′,

  `sub_status` tinyint(3) unsigned NOT NULL default ’0′,

  `create_time` int(10) unsigned NOT NULL default ’0′,

  cid1` smallint(5) unsigned NOT NULL default ’0′,

  ……………

  PRIMARY KEY (`doc_id`)

  );

  数据量:

  每个表达到5000W 行(大概30G)

  36个表

  说明:具体的测试库表结构、类型

  每张表的测试数据量等都需要根据具体测试目的和测试场景进行设计。

  四、测试步骤

  测试一: 不同集群配置,不同实例的性能对比测试

  一: 数据构造,同时验证各硬件集群基本读、写性能。

  1)4个实例全部开启insert 5000W;初步对比写性能。

  用36个slap并发实例分别往36张表insert,往每个表插入5000W 行数据。

  2)4个实例全部开启,每张表20个select并发select。初步对比读性能。

  用36个slap并发实例子每个实例20个并发select请求分别从36张表中取数据。

  二:对比不同集群执行最常用SQL命令的性能情况

  制定数据库系统最常用的SQL语句,数据库执行这些SQL语句的性能。用slap并发用户数从10,50,100,200。

原文转自:http://www.blogjava.net/qileilove/archive/2013/03/19/396636.html