- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然并行运行几个事务,但大多数时候我都会遇到死锁:
------------------------
LATEST DETECTED DEADLOCK
------------------------
2019-09-04 06:19:12 0x2b01917c7700
*** (1) TRANSACTION:
TRANSACTION 14470484, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 13 lock struct(s), heap size 1136, 7 row lock(s), undo log entries 4
MySQL thread id 69372, OS thread handle 47285779531520, query id 10366178979 172.31.19.11 master updating
update `VerificationActionLog_AUD` set `REVEND`=427956 where `id`=138136 and `REV`<> 427956 and `REVEND` is null
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 7307 page no 1108 n bits 128 index PRIMARY of table `TestDB`.`VerificationActionLog_AUD` trx id 14470484 lock_mode X waiting
Record lock, heap no 60 PHYSICAL RECORD: n_fields 27; compact format; info bits 0
...
*** (2) TRANSACTION:
TRANSACTION 14470485, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
11 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 4
MySQL thread id 69395, OS thread handle 47285735814912, query id 10366178981 172.31.19.11 master updating
update `VerificationActionLog_AUD` set `REVEND`=427957 where `id`=138137 and `REV`<> 427957 and `REVEND` is null
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 7307 page no 1108 n bits 128 index PRIMARY of table `TestDB`.`VerificationActionLog_AUD` trx id 14470485 lock_mode X locks rec but not gap
Record lock, heap no 60 PHYSICAL RECORD: n_fields 27; compact format; info bits 0
...
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 7307 page no 1108 n bits 128 index PRIMARY of table `TestDB`.`VerificationActionLog_AUD` trx id 14470485 lock_mode X waiting
Record lock, heap no 60 PHYSICAL RECORD: n_fields 27; compact format; info bits 0
...
*** WE ROLL BACK TRANSACTION (2)
我试图推断这些陈述所解释的内容。据我了解,事务2持有TestDB
.VerificationActionLog_AUD
主索引的锁。与此同时,事务 2 也在等待相同的锁。单个事务怎么可能持有并等待同一个锁?
我从这些陈述中推断出错误了吗?我该如何继续解决这些僵局。另外,死锁仅适用于由 envers 在幕后维护的 AUD 表,如何解决这个问题?
最佳答案
这是由于间隙锁而发生的。间隙锁是对索引记录之间间隙的锁定,或者对第一个索引记录之前或最后一个索引记录之后的间隙的锁定
假设您有相邻的 id
,1 和 2。当从 2 个不同的 session 同时执行过程时,每个 session 都会在两个索引记录上放置间隙锁(使用 id
值 1 和 2 - 也可能是 0、4、5,但为了简单起见,我们假设为 2),并且它们中的每一个都必须等待另一个释放锁才能执行插入。
Gap locks in InnoDB are “purely inhibitive”, which means they only stop other transactions from inserting to the gap. They do not prevent different transactions from taking gap locks on the same gap. Thus, a gap X-lock has the same effect as a gap S-lock *."
解决方案:
Gap locking can be disabled explicitly. This occurs if you change the transaction isolation level to READ COMMITTED or enable the innodb_locks_unsafe_for_binlog system variable (which is now deprecated). Under these circumstances, gap locking is disabled for searches and index scans and is used only for foreign-key constraint checking and duplicate-key checking.
引用文献:
关于mysql - 如何解决MySQL由于hibernate envers审计而导致的死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57782636/
Hibernate Envers 是否可以将另一个数据库用于审计表? 最佳答案 您可以使用不同的架构/目录。见 org.hibernate.envers.default_schema和 org.hib
我在我的应用程序中使用 Hibernate Envers 来存储审计跟踪数据,所有与审计相关的信息都正确存储在 *_AUD 表中。但是,所有_AUD表中rev列的数据类型都是Integer数据类型。我
我是 hibernate envers 的新手。我已经成功地为每个实体创建了审计表。但是我不知道如何为每个实体读取这些历史记录。我想在 jsp 中显示这个历史记录。我想阅读所有的历史记录对于那个特定的
我想使用 hibernate envers 在审计表上应用 group by。 我怎样才能做到这一点? 最佳答案 不幸的是,Envers 不支持 Group by。 关于hibernate-enver
我正在尝试使用 hibernate-envers 审核@Embeddable 对象的集合。 根据 https://hibernate.atlassian.net/browse/HHH-6613添加了对
使用 Hibernate Envers 我想获得所有 实体 , 修订号 , 修订日期 和 修订类型 实体的 ID。 目前我这样做是为了获取实体、修订号和修订日期: public List obtene
我从休眠的 Envers 3.6 移植到 Envers 4.0。这个新版本没有 审计事件监听器 .旧版本要求:listeners 我找不到如何配置新版本。 最佳答案 在 4.0 版中:
我的应用程序使用 envers 将数据写入 _aud 表,并将其包装到写入另一个表的 xml 中。我在 Envers 4.3 中使用条件审核来完成此操作。我的类扩展了 EnversIntegrator
我需要为项目中的所有 CRUD 操作实现审计历史记录。该项目使用 Spring JPA Data Rest。我四处寻找好的图书馆来完成所需的任务,并遇到了这个 Hibernate Envers ,这看
我正在做很多 rnd 来为一个大项目做审计。该项目将完全基于带有 JPA 和 Hibernate 的 Spring 框架来完成数据映射部分。对于审计,我遇到了各种特性和技术。使用 Hibernate
用户有 n 个联系人。联系人可以有本地化的评论(评论在联系人之间共享)。 Java Bean: @Audited @Entity public class User { @OneToMany(
我无法使用连接表( https://stackoverflow.com/a/7603036 和 https://en.wikibooks.org/wiki/Java_Persistence/ManyT
我有一个 Envers 查询返回一个惰性结果,尽管该字段在 hibernate 映射中定义为惰性 =“false”。 我在 Hibernate-Envers 论坛上查找过它,但没有找到任何有用的信息。
使用 JBoss Envers (4.2.0 FINAL) 注释但在尝试审计 @Enumerated 属性时失败 @Entity @Audited public class TestEntity ex
项目使用 Hibernate 3.5、Spring Webflow 2 和 Hibernate Envers 进行审计。 Envers 在 hibernate.cfg.xml 中配置。我在实体“Art
我正在我正在从事的项目中实现 Hibernate Envers,对于此客户端,数据库中的表和列必须遵循特定的名称模式。名称模式使用表名来生成部分列名,并且保存修订的表与原始表具有不同的名称(当然),因
我有一个正在运行的 ENVERs 项目,我正在完成该项目的实现,并注意到属性级别修改跟踪功能。此功能听起来非常适合我们的需求,并将取代一些(手动)表。 问题就出在这里;我在数据库中设置了字段,但当我更
我有一个 envers 查询来查找给定实体的历史记录,我想做的是使用请求中指定的谓词。 例如,我希望能够根据发送的请求按日期/用户/修订类型等(或字段组合)进行过滤。 我知道如何添加谓词,我只是想知道
跟进这三个主题: Getting the old value and new value between two revisions withHibernate Envers Diff on hibe
Doctrine 1.x 和 2 都以单独的审计表的形式提供某种 Versionable 支持,用于跟踪随时间的变化。然而,这些版本似乎是为每行使用(即,它们都维护自己的版本号)而不是数据库范围的,例
我是一名优秀的程序员,十分优秀!