gpt4 book ai didi

mysql - MySQL InnoDB 是否使用 READ_COMMITTED 隔离级别锁定多行?

转载 作者:行者123 更新时间:2023-11-29 12:12:39 24 4
gpt4 key购买 nike

我在解决 LOCK WAIT TIMEOUT EXCEED 时遇到麻烦MySQL InnoDB 错误。

我已经浏览过this article它说如果我们使用隔离级别 READ_COMMITTED那么我的更新查询应该只锁定那些与 WHERE 匹配的行条件,但这对我不起作用,因为我得到 54该查询的行锁。

SHOW ENGINE INNODB STATUS;的结果下面给出。

---TRANSACTION 8AE162608, ACTIVE 102 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 56 lock struct(s), heap size 6960, 54 row lock(s), undo log entries 135
MySQL thread id 18013536, query id 164766412915 localhost MyDataDb Updating
update stock set quantity = quantity + -1, last_updated_dts='2015-01-19 00:08:23', last_updated_by='vishal' where location = 1 and product_id = '123'
------- TRX HAS BEEN WAITING 98 SEC FOR THIS LOCK TO BE GRANTED:

为什么我的更新查询条件仅匹配一行并且我正在使用READ_COMMITED,但54行被锁定隔离级别?

最佳答案

事务隔离级别READ_COMMITTED有一个 promise :数据库 promise 仅读取已提交的数据并将尚未提交的数据排除在事务之外

锁定超时错误是一个运行时错误:数据库尝试更新数据,但找不到执行此操作的好时机(请参阅 MySQL 引用手册中提到的 here 中的 innodb_lock_wait_timeout) 。即使没有数据可以修改,数据库也需要找到一个时刻来断言。

事务隔离级别READ_COMMITTED已经提高了数据库找到更新数据的好时机的机会(例如,参见here),但它无法阻止其他查询/事务锁定整个表(像你的罪魁祸首查询可能那样进行全表扫描)。

更多搜索确实显示 possible solution对于您的删除问题。

关于mysql - MySQL InnoDB 是否使用 READ_COMMITTED 隔离级别锁定多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com