自动化的DB(SQL)压力/负载测试工具?

9
我想测试我的数据库应用程序的性能和可扩展性。我正在寻找一种工具,可以让我针对我的数据库运行多个SQL语句,以数据库和脚本(SQL)文件作为参数(+必要的详细信息,例如主机名、端口、登录等)。
理想情况下,它应该让我控制参数,如模拟客户端数量、测试持续时间、随机化变量或从列表中选择(例如,SELECT FROM ... WHERE value = @var,其中var是从命令行读取或每次执行随机化)。我希望将测试结果保存为CSV或XML文件,以便分析和绘图。当然,在定价方面,我更喜欢“免费”或“演示版”:-)
令人惊讶的是(至少对我来说),虽然有数十种用于Web应用程序负载测试的工具,但我找不到任何用于DB测试的工具!我看到的那些工具,如pgbench,使用基于某些TPC场景的内置DB,因此它们有助于测试DBMS配置和H/W,但我无法测试MY DB!有什么建议吗?
具体来说,我在Linux上使用Postgres 8.3,尽管我可以使用任何符合这些要求的通用数据库工具。硬件有32GB的RAM,而主要表和索引的大小约为120GB。因此,在冷启动与热启动运行之间可能存在1:10的响应时间比率(I/O vs RAM)。实际上,我希望请求能均匀分布,因此重要的是对不同部分的数据库测试查询。
欢迎通过电子邮件与我联系。 谢谢!
-- Shaul Dar(info@shauldar.com)

如何在本地对开发数据库服务器进行压力测试,可能没有测试支持,可以使用工具。请参考以下链接:https://dev59.com/d1HTa4cB1Zd3GeqPT7aS - Gennady Vanin Геннадий Ванин
5个回答

5

Apache的JMeter可以处理不同类型的服务器。我使用它来对Web应用程序进行负载测试,团队中的其他人则用它来进行数据库调用。它可以通过多种方式进行配置以获得所需的负载。它可以在控制台模式下运行,甚至可以使用不同的客户端进行集群化,以最小化客户端开销(从而使结果不被伪造)。

这是一个Java应用程序,乍一看有点复杂。但我们仍然喜欢它。 :-)


谢谢Rudolfson。我确实花了几天时间使用JMeter,早在我发帖之前就开始了,现在已经达到了它可以工作的地步。正如你所说,设置和理解可能会很烦人(我一直在努力弄清楚如何传递参数,以便可以运行不同的数据库查询,并且还遇到了由于内存消耗而导致冻结的问题)。但是这种投资是非常值得的。JMeter真的非常好用,功能丰富,操作流畅。 -- Shaul - Shaul Dar

4

k6.io可以通过xk6-sql扩展来对一些关系数据库进行压力测试。

例如,一个测试脚本可能如下所示:

import sql from 'k6/x/sql';

const db = sql.open("sqlite3", "./test.db");

export function setup() {
  db.exec(`CREATE TABLE IF NOT EXISTS keyvalues (
           id integer PRIMARY KEY AUTOINCREMENT,
           key varchar NOT NULL,
           value varchar);`);
}

export function teardown() {
  db.close();
}

export default function () {
  db.exec("INSERT INTO keyvalues (key, value) VALUES('plugin-name', 'k6-plugin-sql');");

  let results = sql.query(db, "SELECT * FROM keyvalues;");
  for (const row of results) {
    console.log(`key: ${row.key}, value: ${row.value}`);
  }
}

请阅读这篇简短教程,了解更多有关使用k6对SQL数据库进行负载测试的信息。


1

0
我们从未真正找到一种适合压力测试我们的主机DB2数据库的解决方案,所以最终我们自己开发了一套。实际上,它只是由30台安装有DB2 Connect的Linux PC组成的一个银行。
其中29个盒子运行一个脚本,简单地等待在NFS挂载上出现一个启动文件,然后根据数据开始执行固定查询。这些查询(和数据库中的数据)是固定的,这意味着我们可以轻松地与之前成功运行的结果进行比较。
第30个盒子连续运行两个脚本(第二个与其他所有盒子相同)。第一个清空并填充数据库表格,使用我们已知的数据,然后创建启动文件,以便让所有其他机器(包括它自己)继续运行。
所有这些都是用bash和DB2 Connect完成的,因此相当容易维护(而且免费)。
我们还有另一种变体,可以根据收集多个月的生产信息进行随机查询。更难以检查输出是否符合已知的成功基线,但在这种情况下,我们只关注功能和性能问题(因此我们会检查错误和查询时间过长的情况)。

我们目前正在研究是否可以将所有物理服务器都合并为虚拟机,包括运行zLinux的主机(将使用共享内存HyperSockets进行TCP/IP通信,基本上消除了网络延迟)和使用VMWare的Intel平台,以释放一些硬件资源。

如果您不介意一些前期工作,这是一个值得考虑的选项,因为它可以让您在未来有更多的控制权。


哇,这是找不到测试工具的恐怖图示吗? 我有两个问题:1)为什么是30台而不是12或48台计算机?2)我应该明白没有独立于特定RDBMS的RDBMS测试工具; 2a)我可以提出关于SQL Server数据库测试工具/技术的问题吗,还是会被视为重复? - Gennady Vanin Геннадий Ванин

0

你有没有查看Continuent提供的开源工具Bristlecone?虽然我没有使用过它,但它适用于Postgres,并且似乎可以满足你的要求。(很抱歉作为新用户,我无法直接给出该工具页面的链接,但谷歌搜索一下就可以找到 ;o])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接