如何测试mysql的性能和稳定性

如何测试mysql的性能和稳定性,第1张

 有一些有用的工具可以测试MySQL 和基于MySQL 的系统的性能。这里将演示如何利用这些工具进行测试。

mysqlslap

mysqlslap可以模拟服务器的负载,并输出计时信息。它包含在MySQL 5.1 的发行包中,应该在MySQL 4.1或者更新的版本中都可以使用。测试时可以执行并发连接数,并指定SQL 语句(可以在命令行上执行,也可以把SQL 语句写入到参数文件中)。如果没有指定SQL 语句,mysqlslap 会自动生成查询schema 的SELECT 语句。

MySQL Benchmark Suite (sql-bench)

在MySQL 的发行包中也提供了一款自己的基准测试套件,可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的 *** 作在服务器上执行得更快。

这个测试套件的主要好处是包含了大量预定义的测试,容易使用,所以可以很轻松地用于比较不同存储引擎或者不同配置的性能测试。其也可以用于高层次测试,比较两个服务器的总体性能。当然也可以只执行预定义测试的子集(例如只测试UPDATE 的性能)。这些测试大部分是CPU 密集型的,但也有些短时间的测试需要大量的磁盘I/O *** 作。

这个套件的最大缺点主要有:它是单用户模式的,测试的数据集很小且用户无法使用指定的数据,并且同一个测试多次运行的结果可能会相差很大。因为是单线程且串行执行的,所以无法测试多CPU 的能力,只能用于比较单CPU 服务器的性能差别。使用这个套件测试数据库服务器还需要Perl 和BDB 的支持,相关文档请参考.

Super Smack

Super Smack是一款用于MySQL 和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。这是一个复杂而强大的工具,可以模拟多用户访问,可以加载测试数据到数据库,并支持使用随机数据填充测试表。测试定义在"smack"文件中,smack 文件使用一种简单的语法定义测试的客户端、表、查询等测试要素。

Database Test Suite

Database Test Suite 是由开源软件开发实验室(OSDL,Open Source DevelopmentLabs)设计的,发布在SourceForge 网站上,这是一款类似某些工业标准测试的测试工具集,例如由事务处理性能委员会(TPC,Transaction Processing Performance Council)制定的各种标准。特别值得一提的是,其中的dbt2 就是一款免费的TPC-C OLTP 测试工具(未认证)。之前本书作者经常使用该工具,不过现在已经使用自己研发的专用于MySQL 的测试工具替代了。

Percona's TPCC-MySQL Tool

我们开发了一个类似TPC-C 的基准测试工具集,其中有部分是专门为MySQL 测试开发的。在评估大压力下MySQL 的一些行为时,我们经常会利用这个工具进行测试(简单的测试,一般会采用sysbench 替代),在源码库中有一个简单的文档说明。

sysbench

sysbench是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件I/O、 *** 作系统调度器、内存分配和传输速度、POSIX 线程,以及数据库服务器等。sysbench 支持Lua 脚本语言,Lua 对于各种测试场景的设置可以非常灵活。sysbench 是我们非常喜欢的一种全能测试工具,支持MySQL、 *** 作系统和硬件的硬件测试。(节选自《高性能MySQL》)

运行基准测试并分析结果

一旦准备就绪 就可以着手基准测试 收集和分析数据了

通常来说 自动化基准测试是个好主意 这样做可以获得更精确的测试结果 因为自动化的过程可以防止测试人员偶尔遗漏某些步骤 或者误 *** 作 另外也有助于归档整个测试过程

自动化的方式有很多 可以是一个Makefile 文件或者一组脚本 脚本语言可以根据需要选择 shell PHP Perl 等都可以 要尽可能地使所有测试过程都自动化 包括装载数据 系统预热 执行测试 记录结果等

一旦设置了正确的自动化 *** 作 基准测试将成为一步式 *** 作 如果只是针对某些应用做一次性的快速验证测试 可能就没必要做自动化 但只要未来可能会引用到测试结果 建议都尽量地自动化 否则到时候可能就搞不清楚是如何获得这个结果的 也不记得采用了什么参数 这样就很难再通过测试重现结果了

基准测试通常需要运行多次 具体需要运行多少次要看对结果的记分方式 以及测试的重要程度 要提高测试的准确度 就需要多运行几次 一般在测试的实践中 可以取最好的结果值 或者所有结果的平均值 亦或从五个测试结果里取最好三个值的平均值 可以根据需要更进一步精确化测试结果 还可以对结果使用统计方法 确定置信区间(confidence interval)等 不过通常来说 不会用到这种程度的确定性结果注 只要测试的结果能满足目前的需求 简单地运行几轮测试 看看结果的变化就可以了 如果结果变化很大 可以再多运行几次 或者运行更长的时间 这样都可以获得更确定的结果

获得测试结果后 还需要对结果进行分析 也就是说 要把 数字 变成 知识 最终的目的是回答在设计测试时的问题 理想情况下 可以获得诸如 升级到 核CPU 可以在保持响应时间不变的情况下获得超过 % 的吞吐量增长 或者 增加索引可以使查询更快 的结论 如果需要更加科学化 建议在测试前读读null hypothesis 一书 但大部分情况下不会要求做这么严格的基准测试

如何从数据中抽象出有意义的结果 依赖于如何收集数据 通常需要写一些脚本来分析数据 这不仅能减轻分析的工作量 而且和自动化基准测试一样可以重复运行 并易于文档化 下面是一个非常简单的shell 脚本 演示了如何从前面的数据采集脚本采集到的数据中抽取时间维度信息 脚本的输入参数是采集到的数据文件的名字

假设该脚本名为 *** yze 当前面的脚本生成状态文件以后 就可以运行该脚本 可能会得到如下的结果

第一行是列的名字 第二行的数据应该忽略 因为这是测试实际启动前的数据 接下来的行包含Unix 时间戳 日期 时间(注意时间数据是每 秒更新一次 前面脚本说明时曾提过) 系统负载 数据库的QPS(每秒查询次数)五列 这应该是用于分析系统性能的最少数据需求了 接下来将演示如何根据这些数据快速地绘成图形 并分析基准测试过程中发生了什么

       返回目录 高性能MySQL

       编辑推荐

       ASP NET开发培训视频教程

数据仓库与数据挖掘培训视频教程

lishixinzhi/Article/program/MySQL/201311/29735


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7318435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存