我想运行一些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运行在三个阶段:
创build模式,表格,以及可选的任何存储的程序或数据,您想要用于testing。 该阶段使用单个客户端连接。
运行负载testing。 这个阶段可以使用许多客户端连接。
清理(如果指定,断开连接,删除表)。 该阶段使用单个客户端连接。
如果这不完全符合你的口味,你可以使用cron脚本在特定的时间触发MySQL Slap,对于许多用户或许多相同configuration/指定的机器,具有与服务器等相同的networkingpath(后者是非常重要,因为基准应该消除任何可能的差异,以防止模糊的结论)。
如果(如可能)您正在运行以前的MySQL版本, 此链接提供了有关如何编译5.1源代码的有用信息; 进一步的后移可能是不可能的。
这是一个基本的演练。
我喜欢:
最后,我使用SQLIO来压缩磁盘,然后编写一些自定义查询来生成相当多的数据,然后在大型表上进行各种计算,并模拟一个负载很重但优化程度不佳的数据库。 然后,我增加了并发连接的数量,直到它死亡。