8

我想测量我的数据库应用程序的性能和可扩展性。我正在寻找一种工具,它允许我对我的数据库运行许多 SQL 语句,将数据库和脚本 (SQL) 文件作为参数(+必要的详细信息,例如主机名、端口、登录名......)。

理想情况下,它应该让我控制参数,例如模拟客户端的数量、测试持续时间、随机化变量或从列表中选择(例如 SELECT FROM ... WHERE value = @var,其中 var 是从命令行读取或每次执行随机化) . 我想将测试结果保存为 CSV 或 XML 文件,我可以分析和绘制它们。当然,在定价方面,我更喜欢“免费”或“演示”:-)

令人惊讶的是(至少对我来说)虽然有很多这样的工具用于 Web 应用程序负载测试,但我找不到任何用于 DB 测试的工具!?我看到的那些,比如 pgbench,使用基于一些 TPC 场景的内置数据库,所以它们有助于测试 DBMS 配置和硬件,但我无法测试我的数据库!有什么建议么?

具体来说,我在 Linux 上使用 Postgres 8.3,尽管我可以使用任何满足这些要求的 DB 通用工具。硬件有 32GB 的 RAM,而主表和索引的大小约为 120GB。因此,冷缓存与热缓存运行(I/O 与 RAM)之间的响应时间比率可能为 1:10。实际上,我希望请求能够均匀分布,因此对我来说测试针对不同数据库部分的查询很重要。

请随时通过电子邮件与我联系。谢谢!

-- 绍尔达尔 (info@shauldar.com)

4

5 回答 5

5

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

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

于 2009-05-20T11:49:03.257 回答
2

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}`);
  }
}

阅读有关此简短教程的更多信息。

于 2021-07-19T10:21:22.000 回答
1

SQL Load Generator 是另一个这样的工具:

http://sqlloadgenerator.codeplex.com/

我喜欢它,但它还没有保存测试设置的选项。

于 2012-06-22T18:14:03.833 回答
0

我们从未真正找到合适的解决方案来对大型机 DB2 数据库进行压力测试,因此我们最终推出了自己的解决方案。它实际上只是由一组 30 台运行 Linux 并安装了 DB2 Connect 的 PC 组成。

29 个盒子运行一个脚本,它只是等待启动文件出现在 NFS 挂载上,然后开始执行基于数据的固定查询。这些查询(以及数据库中的数据)是固定的,这意味着我们可以轻松地与之前的成功运行进行比较。

第 30 个盒子连续运行两个脚本(第二个与所有其他盒子相同)。第一个清空然后用我们已知的数据填充数据库表,然后创建启动文件以允许所有其他机器(和它自己)继续。

这一切都是通过bashDB2 Connect 完成的,因此相当容易维护(并且免费)。

我们还有另一种变体,可以根据对数月来收集的生产信息的分析进行随机查询。对照已知的成功基线检查输出比较困难,但在这种情况下,我们只是在寻找功能和性能问题(因此我们检查错误和查询时间过长)。

我们目前正在研究是否可以在运行 zLinux 的大型机(它将使用 TCP/IP 的共享内存 HyperSockets,基本上消除网络延迟)和带有 VMWare 的 Intel 平台上将所有这些物理服务器整合到虚拟机中,以释放一些硬件。

如果您不介意提前做一点工作,那么您应该检查一下这个选项,因为它可以让您在赛道上进行大量控制。

于 2009-05-23T09:45:19.837 回答
0

您是否检查过 Bristlecone Continuent 的开源工具?我不使用它,但它适用于 Postgres,并且似乎能够完成您要求的事情。(对不起,作为一个新用户,我不能给你工具页面的直接链接,但谷歌会带你去那里;o])

于 2009-05-27T05:59:11.150 回答