自定义sql负载testing工具

我想运行一些testing来比较我们的mysql应用程序的几种configuration。 但我不想使用像sysbench或oltptesting,因为我们有一些沉重的存储过程的逻辑。 所以…我想testing我们的程序。

是否有任何testing应用程序/框架,我们可以使用运行自定义查询(作为选项 – 并行),看到统计? 像networking围攻? 我已经find的通常使用他们自己生成的数据库模式和scheme。

我可以让我的开发人员创build一个自定义的java界面,并使用Siege,bot不想增加开销或影响数字。

问候,伊戈尔。

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

我之前没有使用jdbcfunction,所以我不知道它是否会处理您的复杂查询。

您可以按照大多数unit testing引擎的一般原则来构build一个简单的mySQLunit testing引擎。

我们过去为MS SQL构build了这样的东西

这个想法是以下

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

2)我们编写一个打开游标的过程/脚本,从目录中select启动“test_”的所有过程名称,并在EXEC(@procedure_name)语句中执行它们中的每一个。 如果testing失败,testing程序应该提出错误。

3)testing执行的结果存储在一个表中。

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

如果你想要一个现在与MySQL 5.1打包的工具,你可能会比尝试MySQL Slap(又名mysqlslap)更糟糕。 直接从文档中获得一个例子:

提供自己的创build和查询SQL语句,每个客户端有50个查询和200个select:

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

这提供了并行运行testing的选项 – 虽然使用多个客户端的并行执行可能并不完全符合您的需要。 这里是一个简短的描述(再次,逐字):

mysqlslap运行在三个阶段:

  1. 创build模式,表格,以及可选的任何存储的程序或数据,您想要用于testing。 该阶段使用单个客户端连接。

  2. 运行负载testing。 这个阶段可以使用许多客户端连接。

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

如果这不完全符合你的口味,你可以使用cron脚本在特定的时间触发MySQL Slap,对于许多用户或许多相同configuration/指定的机器,具有与服务器等相同的networkingpath(后者是非常重要,因为基准应该消除任何可能的差异,以防止模糊的结论)。

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

这是一个基本的演练。

我喜欢:

  1. 编写一些PHP / Python / Perl脚本来访问数据库并执行testing并以XML格式打印结果
  2. 使用HTTP基准testing工具(httperf或类似工具)来logging数据库并保存结果输出
  3. parsing失败,重复。

最后,我使用SQLIO来压缩磁盘,然后编写一些自定义查询来生成相当多的数据,然后在大型表上进行各种计算,并模拟一个负载很重但优化程度不佳的数据库。 然后,我增加了并发连接的数量,直到它死亡。