文档详情

MySQL数据库测试工具.pdf

发布:2015-07-20约9.28千字共11页下载文档
文本预览下载声明
数据库压力测试工具数据库压力测试工具 数据库压力测试工具数据库压力测试工具 (微博:平民架构) 过去五年里,我在管理全球最大的在线支付系统(阿里巴巴集团旗下的支付宝)的数据 库。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 从给定的值中自动选取一个整数值,多个值之间用逗号分隔,两个值中间不能带空
显示全部
相似文档