自定义 SQL 负载测试工具

自定义 SQL 负载测试工具

我想运行一些测试来比较我们的 mysql 应用程序在几种配置中的性能。但我不想使用 sysbench 或 oltp 测试之类的东西,因为我们有一些繁重的存储过程逻辑。所以...我想针对我们的程序进行测试。

是否有任何测试应用程序/框架可用于运行自定义查询(作为选项 - 并行)并查看统计数据?类似网络版 Siege 的东西?我已经发现的通常使用他们自己生成的数据库模式和场景。

我可以要求我的开发人员创建一些自定义的 Java 接口并使用 Siege,但不想增加开销或影响数字。

问候,伊戈尔。

答案1

Jmeter可以使用JDBC进行数据库负载测试:http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

我之前没有使用过 jdbc 功能,所以我不知道它是否可以处理您的复杂查询。

答案2

您可以遵循大多数单元测试引擎的一般原则来构建一个简单的 mySQL 单元测试引擎。

我们过去曾为 MS SQL 构建过类似的产品

这个想法如下

1) 我们编写单元测试程序并赋予它们相同的名称前缀,如“test_”。在 MS SQL 中,我们还使用扩展属性作为元信息来描述测试的一些特定参数(与在 NUnit 中可以使用不同的测试属性相同)

2) 我们编写一个过程/脚本,打开一个游标,从目录中选择所有以“test_”开头的过程名称,并在 EXEC (@procedure_name) 语句中执行每个过程。如果测试失败,测试过程应引发错误。

3)测试执行的结果存储在表中。

4)为了对相同数据进行测试并获得可预测的结果,我们有一个示例测试数据库,我们备份了一次,并在每次测试执行之前从备份中恢复

答案3

如果你想要一个现在随 MySQL 5.1 打包的工具,你可以尝试一下MySQL Slap(又名 mysqlslap). 文档中的一个例子:

提供您自己的创建和查询 SQL 语句,其中 50 个客户端查询,每个客户端 200 个选择:

mysqlslap --delimiter=";" \  
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" \  
--query="SELECT * FROM a" --concurrency=50 --iterations=200

这提供了并行运行测试的选项 - 尽管使用多个客户端实现并行可能并不完全符合您的喜好。以下是简要说明(再次逐字逐句):

mysqlslap 运行分为三个阶段:

  1. 创建架构、表以及(可选)您想要用于测试的任何存储程序或数据。此阶段使用单个客户端连接。

  2. 运行负载测试。此阶段可以使用许多客户端连接。

  3. 清理(​​断开连接,如果指定则删除表)。此阶段使用单个客户端连接。

如果这不完全符合您的口味,您可以使用 cron 脚本在特定时间为许多用户触发 MySQL Slap,或者为许多具有相同配置/规格的机器(具有相同的服务器网络路径等)触发 MySQL Slap(后者非常重要,因为基准测试应该消除任何可能的差异,以防止得出模糊的结论)。

如果(很可能)您正在运行以前的 MySQL 版本,此链接提供了有关如何将 5.1 源代码编译为 5.0 的有用信息;进一步的反向移植可能是不可能实现的。

以下是基本演练。

答案4

我最终使用了SQL输入输出 给磁盘施加压力,然后编写了一些自定义查询来生成大量数据,然后在大型表上进行各种计算,并模拟负载很重但优化不佳的数据库。然后我增加了并发连接数,直到它死掉。

相关内容