mysql - Dropwizard @UnitOfWork : Large number of SET autocommit=1/0; commit calls where there is no transaction to run

标签 mysql hibernate load-testing ehcache dropwizard

我的应用程序( https://github.com/atulsm/config-service )是一个简单的配置服务,它从数据库存储/检索配置键/值,并包含以下内容。

  1. 水滴 Sprite
  2. hibernate
  3. hibernate EHCache
  4. MySQL

我启用了 Mysql 常规日志,当我在运行 load test 时查看它时简单的 get() 的,这是我在日志中看到的唯一填充整个日志的内容。

2019-08-28T11:36:12.003158Z 295 查询设置自动提交=0

2019-08-28T11:36:12.003318Z 295 查询提交

2019-08-28T11:36:12.003425Z 295 查询设置自动提交=1

2019-08-28T11:36:12.003834Z 295 查询设置自动提交=0

2019-08-28T11:36:12.004005Z 295 查询提交

2019-08-28T11:36:12.004105Z 295 查询设置自动提交=1

2019-08-28T11:36:12.004481Z 295 查询设置自动提交=0

2019-08-28T11:36:12.004646Z 295 查询提交

2019-08-28T11:36:12.004762Z 295 查询设置自动提交=1

问题:

  1. 由于没有执行任何查询,并且数据是从二级缓存提供的,所以我的预期是不会与Mysql进行交互
  2. 知道为什么会发生这种情况吗?有没有办法禁用它。
  3. 我的 QPS 目前约为 800。我希望如果我可以禁用这些提交调用,它会得到显着改善。

编辑

问题似乎出在@UnitOfWork 上。我删除了整个 DAO 调用并将其替换为虚拟对象,但我仍然看到数据库操作!

Bucket dummy = new Bucket();
@GET
@Produces(MediaType.APPLICATION_JSON)
@Timed
@UnitOfWork
public Bucket getBucket(@PathParam("bucketName") String bucketName){
    //return BucketService.INSTANCE.getBucket(bucketName);
    return dummy;
}

最佳答案

已通过使用 @UnitOfWork(transactional = false) 禁用 get 操作中的事务来解决此问题。

@GET
@Produces(MediaType.APPLICATION_JSON)
@Timed
@UnitOfWork(transactional = false)
public Bucket getBucket(@PathParam("bucketName") String bucketName){
    return BucketService.INSTANCE.getBucket(bucketName);
}

关于mysql - Dropwizard @UnitOfWork : Large number of SET autocommit=1/0; commit calls where there is no transaction to run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691810/

相关文章:

javascript - sequelize 更新多行

php - 循环遍历 SQL 并在 PHP 中计算总和

java - 当查询花费更多时间时,如何在 Hibernate 中抛出 TimeOutException?

java - 初始化 C3P0 连接池需要 2 分钟

c# - Visual Studio Web 测试 api 请求失败 'Invalid HTTP header characters'

multithreading - 如何在 apache jmeter 中为组线程请求设置不同的 header ?

mysql - SELECT DISTINCT 结果封装在 View 中。

MySQL查询列出具有计数之后相关记录的记录

hibernate - @ManyToOne(fetch = FetchType.LAZY) 不适用于非主键引用的列

c# - 在本地 TFS 2015 中运行 Visual Studio 负载测试