0

我正在使用 jMeter 使用 JDBC 请求对 SAP HANA 数据库进行负载测试,该请求使用“Prepared SELECT Statement”查询类型发出 SELECT 语句。

select * from accounts where acc = '${__P(acct),)} order by ts LIMIT 10

它是从一个有数百亿条记录的表中读取的,我预计每秒有几千个事务的吞吐量。“acct”是使用 CSV 数据集配置从 CSV 读取的唯一 PK,使用 BeanShell 侦听器替换。

数据库缓存中的 SQL 语句包含诸如

select * from accounts where acc = 110982 order by ts LIMIT 10

这是一个问题,因为数据库必须解析每个语句,而且 CPU 开销很高。使用“准备好的 SELECT 语句”,我曾期望看到这样的内容:

select * from accounts where acc = :acc order by ts LIMIT 10

在运行时准备语句并替换值的位置,避免重新解析。

jMeter 文档在这个主题上是沉默的,那么“准备好的 SELECT 语句”的 JDBC 查询类型是否会用文字代替绑定变量?

4

1 回答 1

1

Prepared Select 语句应该类似于 apache Jmeter 文档站点所附屏幕截图中提到的语句:

http://jmeter.apache.org/images/screenshots/jdbctest/jdbc-request.png

您编写准备好的选择语句的方式不正确。

您也可以直接从 CSV 数据集配置传递变量“${acct}”,无需将它们作为属性传递“__P(acct)”

使用以下详细信息作为您准备好的选择语句的参考:

select * from accounts where acc = ?  order by ts LIMIT 10

参数值: ${acct}
参数类型: 根据您的数据库架构

希望这会有所帮助。

于 2014-11-05T05:18:46.687 回答