【发布时间】:2021-04-24 01:54:06
【问题描述】:
我正在多线程环境中开发一个 springboot 应用程序,在该环境中我使用带有 javax.persistence.EntityManager 的 Hibernate 来访问数据库。我有单独的 HikariPools 用于读取和写入查询。
在这里,从数据库(所有读取查询)执行读取操作时的多个线程正在使用单个读取连接(因为我已经自动连接了 entityManager 而没有使用 PersistanceContext)。同样,多个线程也将在 writeEntityManager 的帮助下写入 db,其中所有线程都使用单个连接。
我遇到了 AbstractLockUpgradeEventListener.upgradeLock 的问题。这是间歇性发生的,无法找到确切的根本原因。
几个假设:-
- DB 利用率接近 100%。(这可能会给这个问题带来优势)
- 在执行任何写入查询之前应用锁,如果一个线程花费的时间超过了足够的时间,线程就会饿死
任何人都可以在这里提出一些关于设计或实施策略或可能是实际根本原因的建议。
这只是偶尔发生一次
【问题讨论】:
-
看起来你以某种方式传递了一个空锁提示,但是没有看到代码,很难说这是怎么发生的。
标签: database spring-boot hibernate entitymanager hikaricp