【问题标题】:jpql delete query is active since long timejpql删除查询很长时间以来一直处于活动状态
【发布时间】:2019-08-01 07:05:09
【问题描述】:

jpql 删除查询在过去 4 小时内处于活动状态。当我尝试直接在数据库控制台上执行相同的查询时,执行大约需要 30 秒。要删除的总数据最大为 100000。我在 id 上有索引。我无法理解。任何建议,将不胜感激。 谢谢

@Modifying
    @Query("DELETE FROM IoEntity WHERE Id = :id")
    void deleteAllById(@Param("id") UUID id);

【问题讨论】:

  • 您的数据库中是否有待处理的“提交”?要检查,只需在数据库控制台中提交。
  • 可能该表一直被其他进程阻塞。在运行查询检查之前尝试隔离数据库。
  • @RiyaGeorge:是的,它没有以某种方式提交。我们能否以某种方式确保它始终使用 jpa 提交?
  • @JosemyAB:不,它没有被任何其他进程阻止。但它阻止了其他查询运行,因为删除创建了锁。

标签: java hibernate spring-boot jpa jpql


【解决方案1】:

每当您使用 SQL 客户端(如 Toad、SQL Developer 等)在数据库中运行 DML 时,请确保您提交它,除非客户端中启用了自动提交。

如果您通过 JPA 进行删除,当您在服务方法中定义 @Transactional 时,Spring 会处理提交。

【讨论】:

  • @RiyaGeorge 仍然面临同样的问题,我已将 @Transactional 添加到我的服务方法中。
  • @WitWikky 您是否检查过是否有任何未提交的语句直接在数据库上运行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多