MySQL数据库测试工具.pdf
文本预览下载声明
数据库压力测试工具数据库压力测试工具
数据库压力测试工具数据库压力测试工具
(微博:平民架构)
过去五年里,我在管理全球最大的在线支付系统(阿里巴巴集团旗下的支付宝)的数据
库。2012 年11 月11 号全站支持了超过1 亿笔的在线支付交易,核心数据库当天处理了40
亿个数据库事务、285 亿次SQL 执行、1930 亿次内存数据块访问、生成了15GB 的数据库
日志。面对这种压力,我需要精确地了解每个数据库(不管是Oracle 还是MySQL)所能支
撑的业务能力,以便有足够的信心以支持0 点时的高峰压力,高峰压力可能会达到平时的6
倍以上。因此我花费了大量的时间在数据库的容量测试上,比如测试不同的硬件表现,例如:
SSD、Fusion IO 等等,并且编写了自己的数据库压力测试工具,因为市面上找不到足够简
单实用的同类工具。
测试中最重要的是对业务模型的抽象和测试,最好能知道不同压力下的SQL 响应时间
曲线,以避免系统雪崩效应。测试工具应当能使用你自己创建的业务表,很协助你很容易生
成随机的压测数据,并且能定制关键的测试逻辑,并能生成足够详细的时延信息。然后可以
结合应用对数据库层的时延要求,就可以知道高峰时段我们到底需要准备多少台数据库的主
机,以避免巨大的资源浪费。
测试工具主要集中在事务能力方面,下图是压测工具的设计图(两年前画的图,让同事
实现过一个版本,现在自己重新实现了一遍)。
配置文件
事务处理
随机数生成
(查询/更新) 数据库
日志文件
后面会解释每一块的内容,然后你就会学会如何使用,可以用来测试数据库(不同软硬
件条件下)的性能,以及进行容量评估,可以充分享受数据库压力测试的过程,不需要任何
脚本编程能力。
随机数生成
测试工具可以定义一些变量,并且设置随机值的取值范围,然后在SQL 语句中用冒号
加变量名来加以引用,Oracle 和MySQL 都是同样的使用方式。例如:
INSERT INTO table name () VALUES (:varname, :varname,);
SELECT * FROM table name WHERE :varname;
总共有9 种不同的变量类型可以选择,变量定义的语法如下所示:
变量名 VARTYPE 最小值 最大值
变量名 VARTYPE 值列表
变量类型可以是“SEQ”、“INT”、”INTLIST”、“CHAR”、“STRLIST”、“FLOAT”、“DOUBLE”、
“DATE”、“TIMESTAMP”中的任何一种,下面是各种变量类型的含义:
SEQ
自动递增的32 位整数,从最小值开始一直到最大值,如果测试用例执行的次数超
过最大值,则会自动从头开始循环使用,有点象Oracle 数据库里的Sequence 对
象。例如:
V_seq1 seq 1 100000000
V_seq2 seq 1 100000000
INT
自动递增的32 位整数,在最小值和最大值之间自动选取一个随机值。例如:
V_int1 INT 1 100000000
V_int2 INT 1 100000000
INTLIST
从给定的值中自动选取一个整数值,多个值之间用逗号分隔,两个值中间不能带空
显示全部