【问题标题】:Lockmode PESSIMISTIC_WRITE in criteria vs select for updateLockmode PESSIMISTIC_WRITE 在标准与选择更新
【发布时间】:2017-09-26 10:52:21
【问题描述】:

在休眠条件中使用 PESSIMISTIC_WRITE 作为 LockMode 作为 Select for update 查询的替代方案,性能是否存在显着差异。

用例涉及以下几点:

  1. 状态、时间等多列值的限制
  2. 按多列排序
  3. 只选择第一行进行处理。

此处理由多台机器/线程同时完成。 我目前正在使用休眠条件,这会导致多次锁定超时,从而导致所有其他查询阻塞。

【问题讨论】:

  • 你确定 Hibernate 确实为 MySQL/MariaDB 实现了PESSIMISTIC_WRITE
  • 是的,有用于 MySQL 的。虽然我使用的是 InnoDB 引擎而不是 MariaDB
  • PESSIMISTIC_WRITE生成了什么SQL?我能找到的一点是SELECT ... FOR UPDATE(在 InnoDB 中)。当流量低且查询速度快时,您不太可能遇到问题。
  • 可以有5个并发请求。
  • 是的,在 InnoDB 中选择 UPDATE

标签: mysql hibernate innodb hibernate-criteria readwritelock


【解决方案1】:

在这种情况下,FOR UPDATE 是正确并发所必需的:

BEGIN;
SELECT x ... FROM t ... FOR UPDATE;
use `x` for whatever
UPDATE t ...;
COMMIT;

没有FOR UPDATEx 的值可能会发生变化,从而可能使UPDATE 的意图无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2020-03-12
    相关资源
    最近更新 更多