Mysql 锁定模式悲观\写入条件与选择更新
在hibernate条件中使用悲观_WRITE as LockMode作为Select for update查询的替代方法,在性能上是否有显著差异 用例包括以下几点:Mysql 锁定模式悲观\写入条件与选择更新,mysql,hibernate,innodb,hibernate-criteria,readwritelock,Mysql,Hibernate,Innodb,Hibernate Criteria,Readwritelock,在hibernate条件中使用悲观_WRITE as LockMode作为Select for update查询的替代方法,在性能上是否有显著差异 用例包括以下几点: 对状态、时间等多列中的值的限制 多列排序 仅选择要处理的第一行 此处理由多台机器/线程同时完成。 我目前使用的是hibernate标准,这导致多次获取锁时超时,导致所有其他查询阻塞。在这种情况下,更新的是“必需”的,以确保正确的并发性: BEGIN; SELECT x ... FROM t ... FOR UPDATE; use
我目前使用的是hibernate标准,这导致多次获取锁时超时,导致所有其他查询阻塞。在这种情况下,更新的
是“必需”的,以确保正确的并发性:
BEGIN;
SELECT x ... FROM t ... FOR UPDATE;
use `x` for whatever
UPDATE t ...;
COMMIT;
如果没有更新的,x
的值可能会改变,从而可能使更新的意图无效。在这种情况下,更新的对于正确的并发是“必需的”:
BEGIN;
SELECT x ... FROM t ... FOR UPDATE;
use `x` for whatever
UPDATE t ...;
COMMIT;
如果没有更新的,x
的值可能会改变,从而潜在地使更新的意图无效。您确定Hibernate确实为MySQL/MariaDB实现了悲观写入吗?是的,MySQL确实实现了。虽然我使用的是InnoDB引擎而不是Mariadb,但为悲观编写生成的SQL是什么?我能找到的很少的东西是SELECT。。。用于更新(在InnoDB中)。当流量较低且查询速度较快时,您不太可能找到问题所在。可能会有5个并发请求。是的,它选择在InnoDBAre中进行更新。您确定Hibernate确实为MySQL/MariaDB实现了悲观写入
?是的,MySQL有。虽然我使用的是InnoDB引擎而不是Mariadb,但为悲观编写生成的SQL是什么?我能找到的很少的东西是SELECT。。。用于更新(在InnoDB中)。当通信量较低且查询速度较快时,您不太可能遇到问题。可能有5个并发请求。是,它选择在InnoDB中进行更新