MySQL 间隙锁定

2023-12-22

我有一张桌子叫tree_nodes,在那里我存储了节点的...树表示。我的主题树是在持有者的上下文中创建的。所以,有一个专栏叫做holder_id.

我有一个事务方法,它会从此表和其他表中进行多次读取,以确定应从树中添加/删除哪些节点。

我的应用程序是集群式的并且是高度并发的,因此应用程序内的代码互斥体不起作用。

我的关系数据库是MySQL。

这就是我想要做的,我想放置一个间隙锁定查询以防止对该表进行并发修改。 据我所知,大多数查询看起来都像范围查询或精确匹配查询。例如:

SELECT * FROM tree_nodes where tree_node_id > some_value FOR UPDATE 

问题是,就我而言,查询将如下所示:

 SELECT * FROM tree_nodes where holder_id=? FOR UPDATE

但这可能会导致大型数据集无缘无故地从数据库传输到我的应用程序中,因为我不打算使用所有这些节点。

我可以改为放置以下查询并期望锁定按预期工作吗?

 SELECT count(*) FROM tree_nodes WHERE holder_id=? FOR UPDATE

=======更新=======

这是我经历的行为,我看到所有线程都在其中一个线程获取锁时停止,然后在它完成后,似乎闩锁被删除,其余线程开始命中而不获取锁,我已附加下面是有关第一个线程持有锁时的事务的信息。

---TRANSACTION 7492, ACTIVE 261 sec
1 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 10, OS thread handle 123145553260544, query id 1290 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

---TRANSACTION 7491, ACTIVE 261 sec
1 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 11, OS thread handle 123145553575936, query id 1289 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

---TRANSACTION 7490, ACTIVE 261 sec
1 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 17, OS thread handle 123145555468288, query id 1287 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

---TRANSACTION 7489, ACTIVE 261 sec
1 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 15, OS thread handle 123145554837504, query id 1286 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

---TRANSACTION 7488, ACTIVE 261 sec
1 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 18, OS thread handle 123145555783680, query id 1285 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

---TRANSACTION 7487, ACTIVE 261 sec
1 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 12, OS thread handle 123145553891328, query id 1284 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

---TRANSACTION 7486, ACTIVE 261 sec
1 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 16, OS thread handle 123145555152896, query id 1282 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

---TRANSACTION 7485, ACTIVE 261 sec
4 lock struct(s), heap size 1136, 3 row lock(s)
MySQL thread id 9, OS thread handle 123145552945152, query id 1283 localhost 127.0.0.1 imochurad cleaning up
Trx read view will not see trx with id >= 7485, sees < 7485

欢迎任何帮助。


这就是我无法实现我想要的原因:https://bugs.mysql.com/bug.php?id=95230 https://bugs.mysql.com/bug.php?id=95230

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 间隙锁定 的相关文章

  • Mysql - 如何搜索26条以字母开头的记录?

    基本上 我正在尝试创建一个查询 该查询可以根据英语字母表中的字母 26 个字母 从表中检索 26 个单词 所以 苹果 香蕉 椰子 等等 我一直在使用 like a 所以 SELECT from word WHERE word name li
  • 如何让MySQL数据库完全在内存中运行?

    我注意到我的数据库服务器支持内存数据库引擎 我想让一个已经运行 InnoDB 的数据库完全在内存中运行以提高性能 我怎么做 我探索了 PHPMyAdmin 但找不到 更改引擎 功能 假设您了解注释中提到的使用 MEMORY 引擎的后果 并且
  • SQL IN 子句比单个查询慢

    我正在使用 Hibernate 的 JPA 实现和 MySQL 5 0 67 MySQL 配置为使用 InnoDB 在执行 JPA 查询 转换为 SQL 时 我发现使用IN子句比执行单个查询慢 例子 SELECT p FROM Person
  • 如何从准备好的语句中获取标量结果?

    是否可以将准备好的语句的结果设置为变量 我正在尝试创建以下存储过程 但失败了 第 31 行出现错误 1064 42000 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 stmt USING m c a 附
  • Node.js - 我可以在 PhoneGap / Cordova 应用程序上安装 NPM 包吗?

    感谢 Cordova 我正在构建一个移动应用程序 并且由于 Cordova 基于 Node js 我认为我可以在应用程序中使用 NPM 包 例如 我希望我的移动应用程序能够与远程 MySQL 数据库通信 我想我可以使用 mysql NPM
  • 在 LAMP 配置中创建个性化 URL

    在 LAMP 配置下创建用户个性化 URL 的最佳方法是什么 例如 可以按如下方式访问用户个人资料页面 http www website com profile php id 1 http www website com profile p
  • 为什么java字符串在MYSQL中不保存为UTF-8?

    message new String round id getBytes UTF 8 conn DriverManager getConnection jdbc mysql host db useUnicode true character
  • 无法将代码优先迁移应用到 mysql 数据库

    我正在使用 EF 代码优先模型开发 asp net mvc 我正在尝试首先使用 EF 代码将迁移应用到我的项目中 我正在使用 MySql 数据库 目前我使用的是 EF 4 3 1 版本和 6 6 4 0 版本的 mysql Connecto
  • 安装 mysql2 时出错:无法构建 gem 本机扩展

    我在尝试安装时遇到一些问题mysql2Rails 的宝石 当我尝试通过运行安装它时bundle install or gem install mysql2它给了我以下错误 安装 mysql2 时出错 错误 无法构建 gem 本机扩展 我该如
  • MySql 完全联接(联合)和多个日期列的排序

    一个相当复杂的 sql 查询 我可能使它变得更加困难 我有两张桌子 消息 newsid 日期时间 新闻文本 图片 图片ID 日期时间 imgPath 两者没有关系 我只是在新闻 图片创建的日期之前加入 到目前为止的 SQL SELECT F
  • 为什么这个 MySQL 更新不起作用?

    有一张桌子叫meterreadings 我需要复制属性meterreading从一排到另一排 这是数据示例 id meterreadingdate meterreading meterreadingtype id created 1 201
  • MySQL 命令输出在命令行客户端中太宽[重复]

    这个问题在这里已经有答案了 我在用mysql终端模拟器中的命令行客户端lxterminal在Ubuntu中 当我运行以下命令时 mysql gt select from routines where routine name simplep
  • 如何让MySQL数据库完全在内存中运行?

    我注意到我的数据库服务器支持内存数据库引擎 我想让一个已经运行 InnoDB 的数据库完全在内存中运行以提高性能 我怎么做 我探索了 PHPMyAdmin 但找不到 更改引擎 功能 假设您了解注释中提到的使用 MEMORY 引擎的后果 并且
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • SimpleSAMLPHP 重定向循环

    我们正在尝试使用自定义 mysql 数据库设置 sso 但它在以下两个请求之间进入无限循环 POST http 192 168 0 15 simplesaml module php core loginuserpass php 设置Cook
  • 在无文本搜索查询中使用 sphinx 与 MySQL

    我有这样的疑问 假设我有一个大表 与一个较小的用户表有关系 这个想法是在那个真正的大表中搜索大于给定日期的日期并按分数 例如大整数 排序 并同时获取相关的用户信息 此查询的结果大约每 10 分钟就会更改一次 所以 没有文本搜索 但我有一个非
  • 如何将另一列的整数值添加到日期列?

    我试图将整数添加到日期 但出现以下错误 1064 你的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在第 6 行的 wp OrderDate INTERVAL WPProduct Duration DAY AS
  • 在 MySQL 中搜索多个单词

    我使用 HTML 表单来允许用户查找数据库表中的条目
  • 从多个选择列表中插入数据到mysql数据库(html形式)

    我制作了一个表格 其中有商店的 ID
  • 我的数据库有错误

    创建表时如下 create table Ticket ticket id integer not null primary key AirlineName varchar not null CustomerName varchar from

随机推荐

  • 找不到 com.google.android.gms:strict-version-matcher-plugin:1.1.0

    无法解析配置 类路径 的所有文件 找不到 com google android gms strict version matcher plugin 1 1 0 在以下位置进行了搜索 https jcenter bintray com com
  • 当新值与上一个值相同时 StateFlow 不会发出

    我有一个登录表格 我用StateFlow发送LoginResult 调用API后 来自ViewModel to Activity 在活动中 如果登录失败 我将显示错误对话框 第一次运行良好 但从第二次登录失败后 错误对话框将不再显示 我测试
  • Rails 3.1 间歇性“脚本头过早结束”

    所以我开始将我们的应用程序从 Rails 3 0 9 升级到 Rails 3 1 它在开发环境中运行良好 是时候将其放到临时服务器上了 这样我们就可以运行一些完整的验收测试 但是哦 不 我们正面临着可怕的 内部服务器错误 页面有一半的时间返
  • XML 漏洞

    xml 一直是面向服务的应用程序 SOA 的支柱 并且在未来它将变得非常有用 由于 xml 简单 灵活 因此很容易受到攻击 攻击者可以将其用于自己的目的 因此 一些攻击是强制解析攻击 XML外部实体 XEE 攻击 XML dos xdos
  • 从 PowerShell 调用 exe 并获取有关成功或失败的反馈

    如何在 PowerShell 中运行可执行文件并通过 if 语句确定它是成功还是失败 更具体地说 我试图让 devenv exe 从 PowerShell 脚本构建解决方案 我需要知道它是成功还是失败 失败是指构建失败 并且我假设 deve
  • Ruby 将数组合并为一个字符串

    在 Ruby 中 有没有一种方法可以将所有数组元素组合成一个字符串 数组示例 arr p Hello World p p This is a test p 示例输出 p Hello World p p This is a test p Us
  • 为什么 C++ 中元组的使用不常见?

    为什么似乎没有人在 C 中使用元组 或者Boost元组库 http www boost org doc libs 1 39 0 libs tuple doc tuple users guide html或者 TR1 的标准库 我读过很多 C
  • 将组件对齐到所需位置

    寻求帮助来设计如下所示的布局 我面临的主要挑战是将组件对齐到所需的位置 请参考三个按钮 图标 及其位置 从字面上看 就是发疯 思考如何将它们准确地放置在所需的位置 任何帮助深表感谢 问候 罗尼 由于您使用了 Android 类别 我假设您正
  • 如何使用 JavaScript 触发“isTrusted=true”点击事件?

    我正在尝试使用 Chrome 扩展来模拟用户点击和鼠标移动 例如 在我的内容脚本中 有一个按钮单击 document querySelector SOME SELECTOR click 该行触发具有以下属性的单击事件 MouseEvent
  • Maven原型:修改artifactId

    在进行项目时 我的要求是创建一个模块 该命令将类似于 mvn archetype generate DarchetypeCatalog local DartifactId test module 并且目标应该具有以下文件结构 test mo
  • PJSIP 库中的 TLSv1_2 (TLS1.2) 支持

    我正在使用最新的PJSIP http www pjsip org 我的 Android iOS 应用程序中的库 我想在我的项目中使用 TLSv1 2 连接 PJSIP 支持哪个 TLS 版本 从源代码来看它似乎支持TLSv1 0 有没有办法
  • 如何获取checkbox的值

    如何获取复选框的值 var tb new Ext Toolbar tb add xtype checkbox boxLabel Expand Groups by Default id GetChkBoxValue checked true
  • 应用程序终止自身最暴力的方式是什么(linux)

    我想模拟暴力系统关闭 即在应用程序级别尽可能接近断电 我们正在讨论 Linux 上的 c c 应用程序 我需要应用程序自行终止 目前我看到几个选项 call exit http linux die net man 3 exit call e
  • SortedSet - 存储类对象时的自定义顺序

    我正在考虑用 SortedSet 替换 HashSet 因为它更适合我存储的数据 然而 到目前为止我看到的所有示例都与存储简单对象有关 整数 字符串等 我想为具有多个属性的自定义类实现此功能 但是该类还包含一个我想用作 索引器 的日期 问题
  • 将长时间运行的任务分配到多个帧上的最佳方法是什么?

    我有多个长时间运行的任务 例如超过 10 毫秒 这会影响浏览器的响应能力 最糟糕的事情 例如从文件加载和解析 3D 模型 已经被卸载到 Web Workers 这样它们就不会影响渲染循环 然而 有些任务不容易移植到 Workers 因此必须
  • 警告:sprintf() [function.sprintf]:第 132 行 /home/inrunitc/public_html/chek/chek.php 中的参数太少

    Warning sprintf function sprintf Too few arguments in home inrunitc public html chek chek php on line 132 Query was empt
  • 在hive中向外部表添加分区需要花费大量时间

    我想知道向外部表添加分区的最佳方法是什么 我在 hive 的 S3 上有一个外部表 分区为 车辆 日期 小时 现在 可以在一天中的任何时间添加新车辆 并且有些车辆在一天中的几个小时或几天内没有数据 几种可能的解决方案 msck修复表 需 要
  • 如何解决 Apache-Beam 中的 Beam DeprecationWarning

    第一的 生成简单数据后将数据存储在谷歌云平台bigQuery表中的代码 导入 Apache Beam 库并使用它 跑步者使用了 Google Cloud Platform Dataflow 这里是代码 from apache beam op
  • numpy.dot -> MemoryError,my_dot -> 非常慢,但有效。为什么?

    我正在尝试计算两个大小分别为 162225 10000 和 10000 100 的 numpy 数组的点积 但是 如果我调用 numpy dot A B 则会发生 MemoryError 然后 我尝试编写我的实现 def slower do
  • MySQL 间隙锁定

    我有一张桌子叫tree nodes 在那里我存储了节点的 树表示 我的主题树是在持有者的上下文中创建的 所以 有一个专栏叫做holder id 我有一个事务方法 它会从此表和其他表中进行多次读取 以确定应从树中添加 删除哪些节点 我的应用程