Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 锁定模式悲观\写入条件与选择更新_Mysql_Hibernate_Innodb_Hibernate Criteria_Readwritelock - Fatal编程技术网

Mysql 锁定模式悲观\写入条件与选择更新

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条件中使用悲观_WRITE as LockMode作为Select for update查询的替代方法,在性能上是否有显著差异

用例包括以下几点:

  • 对状态、时间等多列中的值的限制
  • 多列排序
  • 仅选择要处理的第一行
  • 此处理由多台机器/线程同时完成。
    我目前使用的是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中进行更新