我想测量数据库应用程序的性能和可伸缩性。我正在寻找一种工具,允许我对我的数据库运行许多SQL语句,将数据库和脚本(SQL)文件作为参数(+必要的详细信息,例如主机名,端口,登录......)。
理想情况下,它应该让我控制参数,如模拟客户端的数量,测试的持续时间,随机化变量或从列表中选择(例如SELECT FROM ... WHERE value = @var,其中var从命令行读取或随机化每次执行)。我想测试结果保存为CSV或XML文件,我可以分析并绘制它们。当然,在定价方面,我更喜欢“免费”或“演示”: - )
令人惊讶的是(至少对我来说)虽然有很多这样的工具用于Web应用程序负载测试,但我找不到任何数据库测试!我看到的那些,比如pgbench,使用基于某些TPC场景的内置数据库,所以它们有助于测试DBMS配置和H / W,但我无法测试我的数据库!有什么建议吗?
具体来说,我在Linux上使用Postgres 8.3,但我可以使用满足这些要求的任何数据库通用工具。 H / W有32GB的RAM,而主表和索引的大小约为120GB。因此,冷缓存运行与暖缓存运行之间的响应时间比为1:10(I / O与RAM)。实际上我希望请求能够均匀分布,因此对我来说,针对不同的数据库测试查询非常重要。
请随时通过电子邮件与我联系。 谢谢!
- Shaul Dar(info@shauldar.com)
答案 0 :(得分:4)
JMeter可以处理不同的服务器类型。我将它用于针对Web应用程序的负载测试,团队中的其他人将其用于数据库调用。它可以通过多种方式进行配置,以获得所需的负载。它可以在控制台模式下运行,甚至可以使用不同的客户端进行集群,以最大限度地减少客户端开销(从而伪造结果)。
这是一个java应用程序,乍一看有点复杂。但我们仍然喜欢它。 : - )
答案 1 :(得分:1)
k6.io 可以使用 xk6-sql extension 对一些关系数据库进行压力测试。
作为参考,测试脚本可能类似于:
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}`);
}
}
阅读有关此 short tutorial 的更多信息。
答案 2 :(得分:0)
我们从来没有真正找到适当的解决方案来对我们的大型机DB2数据库进行压力测试,因此我们最终推出了自己的。它实际上只包含30台运行Linux且安装了DB2 Connect的PC。
其中29个框运行一个脚本,该脚本只是等待启动文件出现在NFS挂载上,然后根据数据开始执行固定查询。这些查询(以及数据库中的数据)是固定的这一事实意味着我们可以轻松地与之前的成功运行进行比较。
第30个框连续运行两个脚本(第二个框与所有其他框相同)。然后,第一个空的数据库使用我们的已知数据填充数据库表,然后创建启动程序文件以允许所有其他计算机(及其自身)继续。
这一切都是使用bash
和DB2 Connect完成的,所以很容易维护(并且免费)。
我们还有另一种变体可以根据对数月收集的生产信息的分析来进行随机查询。根据已知的成功基线检查输出更难,但在这种情况下,我们只是在寻找功能和性能问题(因此我们检查错误和查询花费的时间太长)。
我们目前正在检查是否可以将所有这些物理服务器整合到虚拟机中,运行zLinux的大型机(将使用共享内存HyperSockets for TCP / IP,基本上消除网络延迟)和英特尔平台VMWare,释放一些硬件。
如果您不介意前面的一些工作,那么您应该检查这个选项,因为它可以让您在赛道上获得很大的控制权。
答案 3 :(得分:0)
您是否从Continuent检查了Bristlecone是一个开源工具?我不使用它,但它适用于Postgres,似乎能够做你要求的事情。 (抱歉,作为新用户,我无法向您提供工具页面的直接链接,但Google会让您到达那里; o])
答案 4 :(得分:0)