【发布时间】:2019-02-05 21:15:42
【问题描述】:
我目前正在尝试使用 JHM 对 MySQL 查询进行基准测试。为此,我使用 JDBC 与 dockerized 服务器建立了连接。
我的代码:
@Benchmark
public void testWithPreparedStatement(Blackhole bh) throws SQLException {
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, "Parameter1");
st.setString(2, "Parameter2");
bh.consume(st.executeQuery());
connection.commit();
st.close();
}
这些是测试的结果:
# Warmup Iteration 1: 2.318 ms/op
Iteration 1: 2.038 ms/op
Iteration 2: 1.972 ms/op
Iteration 3: 1.908 ms/op
Iteration 4: 2.000 ms/op
Iteration 5: 1.960 ms/op
Iteration 6: 1.939 ms/op
Iteration 7: 1.968 ms/op
Iteration 8: 1.959 ms/op
查询包含多个连接,并且数据库包含数据,因此基准不应该那么低。
DataGrip 中的相同查询会导致:
0 rows retrieved in 59ms (execution: 32ms, fetching: 27ms)
我尝试过的:
在
@TearDown方法中运行RESET QUERY CACHE和FLUSH TABLES将
@TearDown设置为Level.Iteration将
autoCommit设置为false并手动提交查询(参见:代码)+ 将TransactionLevel设置为READ_COMMITTED
使用 JDBC 的查询返回的结果是正确的,因此它被正确执行。
有什么想法吗?感谢所有帮助!
【问题讨论】:
标签: java mysql jdbc benchmarking jmh