当前位置: 首页 > news >正文

什么是 supremum pseudo-record?

它是MySQL InnoDB 存储引擎在索引页中定义的一条虚拟伪记录,是索引逻辑上的 “最大值边界”,并非真实存在的用户数据记录。

  • 作用:标记索引页中所有记录的 “上界”,用于处理索引范围的间隙锁与 Next-Key Lock,防止幻读。
  • 位置:每个索引页的末尾,和开头的infimum pseudo-record(下界虚拟记录)对应。

🔍 为什么会出现supremum pseudo-record锁?

可重复读(RR)隔离级别下,InnoDB 使用Next-Key Lock(记录锁 + 间隙锁)来防止幻读。当事务执行范围查询(如WHERE id > 18)或无匹配条件的查询并加锁时:

  1. InnoDB 会扫描索引,直到遇到supremum pseudo-record才停止。
  2. 对这条虚拟记录加锁,本质是锁住了(当前最大索引值, +∞)这个间隙。
  3. 这样其他事务就无法插入大于当前索引最大值的数据,避免幻读。

🧩 关键特性与影响

  1. 锁的本质:对supremum pseudo-record加锁,本质是锁住索引末尾的间隙,而不是某条真实记录。
  2. 典型场景
    • 范围查询(如WHERE id > ?),且查询条件包含大于表中所有记录的值;
    • 空表执行SELECT ... FOR UPDATE/LOCK IN SHARE MODE,会直接锁住整个(-∞, +∞)区间;
    • 唯一索引冲突时的加锁流程,也会对它加锁。
  3. 并发影响
    • supremum pseudo-record加锁后,所有插入大于当前最大值的记录操作都会被阻塞,这也是很多 “新数据插入莫名被锁” 的常见原因。
    • 尤其是使用自增主键时,新数据总是插入索引末尾,此时锁会直接阻塞所有新的INSERT

💡 如何排查与优化

  1. 定位场景:通过performance_schema.data_locks表查看锁信息,若出现supremum pseudo-record,通常和范围查询加锁、空表加锁或唯一键冲突有关。
  2. 优化方案
    • 尽量使用等值查询代替范围查询(如WHERE id = ?而非WHERE id > ?),避免触发大范围 Next-Key Lock;
    • 调整事务隔离级别为读已提交(RC),此时 InnoDB 会退化为仅记录锁,不再加间隙锁;
    • 避免在空表上执行带锁的范围查询,或在事务中提前插入边界数据。
http://www.cnnetsun.cn/news/2907766.html

相关文章:

  • FLEXPART模式实战:如何用后向轨迹分析锁定污染源(附Python后处理脚本)
  • 别再手动PS了!用Python+OpenCV给论文配图加局部放大镜,5分钟搞定
  • 第1章:架构基础
  • 如何免费获取抖音无水印高清视频:douyin-downloader完整指南
  • 生产级机器学习系统:防御性设计与系统性风险治理
  • 从零样本到思维分支:LLM推理增强的工业级落地路径
  • Docker分层构建缓存原理详解:零基础快速吃透镜像加速机制
  • MCU模拟比较器与DAC实战:低功耗监控与自动波形生成
  • SPI驱动非标准字长外设:硬件打包与软件模拟方案详解
  • BERTScore深度解析:为什么这个文本评估指标能碾压传统方法?
  • 小红书无水印下载终极指南:3分钟掌握批量采集技巧
  • 嵌入式定时器与DAC实战:从抗噪滤波到自动波形生成
  • 别再只用qemu-img了!QEMU快照的两种玩法(磁盘/检查点)与实战避坑指南
  • 终极指南:在Linux上安装Realtek 8922AE WiFi 7网卡驱动的完整教程
  • 抖音下载器开源项目实战教程:从零搭建24小时自动采集系统完整指南
  • 深入解析MC56F81xxxL中断与eDMA:从原理到实战配置指南
  • i.MX21 SSI接口AC97模式详解:寄存器配置与多通道音频驱动开发
  • 深入解析NXP LS1046A SEC队列接口与错误处理寄存器
  • 3步精通:开源工具高效下载MOOC课程
  • SAP UI5 没有 NgModule,但有自己的装配秩序
  • MC68SZ328 UART与Memory Stick主机控制器深度解析与实战配置
  • MC68377 QADC64模块详解:队列式ADC原理、寄存器配置与嵌入式数据采集实战
  • Windows本地实时语音转文字终极指南:5分钟搭建你的隐私安全助手
  • Linux jbd2_journal_recover日志恢复与superblock标记
  • Linux jbd2_journal_commit_transaction日志提交与forget链表
  • 【毕业设计】基于 SpringBoot 的数据资产备案与登记管理系统研究 适配企业数字化转型的数据资产登记系统开发与实践(源码+文档+远程调试,全bao定制等)
  • 深入解析MC68377 CTM9 DASM:输出比较与PWM模式实战指南
  • 终极Laravel项目搭建工具:Laravel Installer核心功能详解
  • 告别手动配置!用Advanced Installer 15.7把SpringBoot Jar包一键打包成Windows服务(附Java环境自动检测)
  • 从零到实战:用Kalibr和ROS Melodic标定你的RealSense D435i(附标定板生成与数据录制技巧)