数据库性能测试方案示例

标签: 专项测试 mysql 测试方案 | 发表时间:2013-03-15 19:08 | 作者:百度质量部
出处:http://qa.baidu.com/blog

前言 :
 
究竟怎样进行数据库性能测试,数据库性能测试需要做些什么?大多数产品线的RD和QA也比较迷茫,经常过来咨询。
 
一般说来,做数据库性能测试需要如下几个步骤:
1:明确测试目的
2:设计测试模型 (即压力模型)
3:准备测试集群环境
4:准备压力测试工具或者编写压力测试脚本
5:明确性能指标并加监控
6:根据2设计的测试模型准备测试数据
7:测试执行
8:测试分析
 
本文依据以上步骤,模拟测试需求- 多实例多盘数据库的性能对比测试,制定测试方案公布给大家,方便大家了解数据库性能测试。
 
多实例多盘数据库性能测试方案
 
一、 测试目的
1. 对比数据库单实例、多实例的在不同硬件设备上的性能情况。
2. 对比单机单实例和多实例的性能情况
3. 验证网络带宽是否成为flash产品发挥性能优势的瓶颈。
4. 验证flash产品是否随时间存在性能衰减的可能。
 
二、 测试方法概述
 
测试基准工具:smart-slap(mysqlslap),Jmeter模拟若干客户端、若干用户执行指定的SQL语句,访问数据库。同时,通过监控工具监控系统负载、mysql数据库的服务,全面了解数据库系统以及硬件的负载情况。
 
href=”http://qa.baidu.com/blog/wp-content/uploads/2013/03/b1.JPG”>
 
测试模型
测试监控及结果统计
监控工具统计如下信息,分析性能瓶颈。
 
系统负载:
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。
 
三:对比不同集群处理最耗时SQL命令的性能情况
制定数据库系统最耗时的SQL语句,数据库执行这些SQL语句的性能。用slap并发用户数从10,50,100,200。
 
四:模拟事务处理,对比各集群性能情况。
 模拟事物,,用slap并发用户数10,50,100,200,500,800,1000分析不同集群分别在多少并发用户数下,TPS值最大。
 
五:分析各集群在线事物处理能力。
 模拟事务处理,根据步骤四得到的最大TPS,设置TPS的一定比率作为每秒事务数,用jemeter测试,并发,10,50,100,200,500,800,1000.分析各个并发各种集群下的响应时间分布和其他各项性能指标。分析TPS情况最好的并发数。
 
测试二:网卡瓶颈测试
 
步骤一:分析测试一中的各项测试结果的CPU、磁盘、网卡等负载情况。
如果其他几项比网卡提前到达瓶颈。则说明网卡不会成为瓶颈。相反进入步骤二。此外,如果测试一中的各项测试磁盘,网卡,CPU等均未达到瓶颈。则将测试一中的步骤四,增大并发压力,直到出现负载瓶颈。
 
步骤二:调整测试。
 
测试三:硬件是否衰减情况。
 
步骤:用jmeter 持续测试24小时。
用测试一中的步骤五得到的最好TPS的并发数作为此次测试的并发数,用Jmeter并发测试24小时,分析第一个小时和最后一个小时的TPS,和响应时间分布。
(注意每一次测试命令中,涉及查询条件的值随机分布)
 
五、 总结:
关于数据库性能测试,只要掌握了压力测试工具。最关键的还是设计出符合业务的测试模型,以及测试完成后的测试分析。通过实践抽象出测试模型,进行自动化,则测试过程可以事半功倍。

相关 [数据库 性能 测试] 推荐:

数据库性能测试方案示例

- - 百度质量部 | 软件测试 | 测试技术 | 百度测试
究竟怎样进行数据库性能测试,数据库性能测试需要做些什么. 大多数产品线的RD和QA也比较迷茫,经常过来咨询. 一般说来,做数据库性能测试需要如下几个步骤:. 2:设计测试模型 (即压力模型). 4:准备压力测试工具或者编写压力测试脚本. 5:明确性能指标并加监控. 6:根据2设计的测试模型准备测试数据.

DB2数据库性能优化介绍

- - CSDN博客数据库推荐文章
作者:chszs,转载需注明. 博客主页: http://blog.csdn.net/chszs. 前段时间,我从CSDN得到了这本书《DB2数据库性能调整和优化(第2版)》,这是一本介绍DB2数据库性能调优的书籍,此书覆盖了DB2数据库性能调优所需的全部知识和工具,而且还提供了大量的性能调优的实际案例,颇有一种“一书在手,DB2尽在掌握”的豪情.

浅谈MySQL 数据库性能优化

- - BlogJava-qileilove
数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理. 本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,. 日志缓存,索引缓存,innodb缓存,插入缓存,以及连接参数等方式来对MySQL数据库进行优化.   这里先引用一句话,从内存中读取一个数据的时间消耗是微秒级别,而从普通硬盘上读取一个数据是在毫秒级别,二者相差3个数量级.

数据库连接池性能比对

- - 企业架构 - ITeye博客
对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池 . NOTE: 本文所有测试均是mysql库.    1:性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0. hikariCP的高性能得益于最大限度的避免锁竞争.    2:druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性.

mongodb性能测试

- - 数据库 - ITeye博客
1) Mongodb的非安全插入方式,在一开始插入性能是非常高的,但是在达到了两千万条数据之后性能骤减,这个时候恰巧是服务器24G内存基本占满的时候(随着测试的进行mongodb不断占据内存,一直到操作系统的内存全部占满),也就是说Mongodb的内存映射方式,使得数据全部在内存中的时候速度飞快,当部分数据需要换出到磁盘上之后,性能下降很厉害.

WebService性能测试

- - ImportNew
(本文也会在最下面通俗的介绍). 这里给一个站内大哥的讲解: http://www.cnblogs.com/Leo_wl/archive/2010/05/20/1740205.html. 简单点就是测试WebService的一个工具. 官网地址: http://www.soapui.org/. ps:官网是英语的,如果你英语不好的话可以使用谷歌浏览器或360极速浏览器,它可以自动把英文转换成中文.

jdbc测试mysql数据库sql预解析(绑定变量)

- - CSDN博客推荐文章
jdbc测试mysql数据库sql预解析(绑定变量).         用习惯了oracle,学习mysql,想测试一下mysql绑定变量的效果. 以前看网上介绍大部份都说mysql没有sql共享池的概念,所以也不存在sql预解析或绑定变量的说法.         今天测试了一下(通过网络抓包和看服务器端sql日志的方法),发现mysql还是有sql预解析的实现.

Mozilla 推出 FuzzDB,安全测试用例数据库

- - 博客园_新闻
Mozilla 推出了 FuzzDB 开源项目,这是一个用于对应用程序进行 Fuzz 安全测试的攻击模式和发现模式数据库,也就是一个包含了各种安全攻击模式的测试用例集合. 其中包括可用于识别特殊的服务器响应和文档资源的攻击模式、可预测的资源名称、正则表达式模式等等. 你可以使用 FuzzDB 来测试 Web 应用程序的安全性,比如:.

性能测试工具 CBenchmark

- lele - 开源中国社区最新软件
CBenchmark—-CharlesCui’s Benchmark 这是我实现的一款性能测试工具,之前在工作中常用LoadRunner之类的工具来完成性能测试,但受限于LR极其昂贵的Lisence以及难以定制的SDK,于是我用C/C++实现了这个工具,并借助Linux系统对线程和进程的良好调度,可以实现极高的并发压力.

浏览器性能测试

- - Taobao QA Team
浏览器作为一个浏览网页的平台,自身的性能直接影响网页的解析速度、渲染,而浏览器的性能一般又是由浏览器的内核来决定. 虽然浏览器的评测方法有很多,但是权威的浏览器性能测试方法主要有以下几种:. Acid3测试是检测浏览器与Web标准兼容性的主要方法,也是目前行业中最权威的测试. Acid3是由网页标准计划小组(Web Standards Project, WaSP)设计,测试焦点集中在ECMAScript、DOM Level 3、Media Queries和data: URL,浏览器开启 http://acid3.acidtests.org/测试页面后,页面会不断加载功能、直接给予分数.