news 2026/9/28 20:59:08

GaussDB 事务与锁机制:MVCC 可见性、八级表锁与死锁检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GaussDB 事务与锁机制:MVCC 可见性、八级表锁与死锁检测

事务与锁是关系型数据库的核心机制,也是理解并发控制的基础。本文整理 GaussDB 中事务管理、MVCC 元组可见性、表级锁分级以及死锁检测相关的知识点。

一、事务基础

GaussDB 支持显式事务和隐式事务:

  • 隐式事务:单条语句自动提交,不需要手工COMMIT。
  • 显式事务:通过BEGIN/START TRANSACTION开启,COMMIT/END提交。

关于嵌套事务有一个常见的错误认知:所谓"嵌套事务可以独立于外部事务进行提交或回滚"是错误的。实际上,在正常事务块中再次执行开启事务的命令时,系统会提示已有事务正在进行,并忽略新的开启命令。

需要区分的是:SAVEPOINT建立的子事务机制,并不等于一个能脱离外部事务独立提交的顶层事务。子事务的回滚只回退事务内的修改,不会倒退存储过程的执行流程或局部变量。

二、MVCC 与元组可见性

MVCC(多版本并发控制)的核心思想是:写事务不立即修改元组,而是创建新版本并保留旧版本,UPDATE本质上等价于DELETE + INSERT。

一个元组版本的可见性由两个字段决定:

  • xmin:创建该元组版本的事务 ID。
  • xmax:删除或更新该元组版本的事务 ID。

当前查询能否看到某条记录,取决于这两个字段的组合:

xminxmax记录是否可见
可见不可见可见
可见可见不可见(已删除或被更新)
不可见可见不可见
不可见不可见不可能组合

最核心的一条结论:xmin 可见、xmax 不可见时,记录对当前查询可见。直观理解就是——插入已经生效,而删除或更新尚未对当前快照生效。

三、八级表锁

GaussDB 的表级锁分为 8 个级别,从轻到重依次是:

级别锁模式典型语句或用途
1ACCESS SHARESELECT
2ROW SHARESELECT FOR UPDATE/SHARE
3ROW EXCLUSIVEINSERT/UPDATE/DELETE
4SHARE UPDATE EXCLUSIVEVACUUM、ANALYZE、CREATE INDEX CONCURRENTLY
5SHARECREATE INDEX
6SHARE ROW EXCLUSIVE类似 7 级锁,但允许 2 级锁并发
7EXCLUSIVE事务锁、扩展锁;仅允许普通查询并发
8ACCESS EXCLUSIVEDDL、VACUUM FULL、LOCK TABLE默认锁

冲突判断的常用规则:两个锁的级别之和大于等于 8 时,通常会发生冲突。

一个重要的特例是:5 级锁与 5 级锁不冲突(即两个CREATE INDEX可以并发执行)。

另外,ROW SHARE(2 级)与EXCLUSIVE(7 级)、ACCESS EXCLUSIVE(8 级)是冲突的。

四、死锁检测

deadlock_timeout参数用于控制死锁检测的启动时机:

  • 单位为毫秒,默认值为1 秒。
  • 只有当锁等待达到这个时间后,数据库才会启动死锁检查。

也就是说,数据库不会在每次发生锁等待时立即执行死锁检查,而是要等锁等待持续一段时间后才开始检测,这是为了避免频繁的无效检查。

调大这个参数可以减少无效的死锁检查,但代价是真正的死锁会被报告得更慢;配合log_lock_waits调查锁等待时,可以临时把它设得比正常值小。

五、分布式事务

在分布式架构下,跨分片的事务需要全局协调:

  • GTM(全局事务管理器)负责分配全局事务 ID、全局快照、时间戳和 sequence。
  • 两阶段提交(2PC):
    • 阶段一prepare:所有提交所需的信息和资源持久化到磁盘,DN 置为 commit-in-progress。
    • 阶段二commit:CN 通知 GTM 提交并获取全局唯一 CSN,再向所有 DN 发 commit。

2PC 的原子性关键在于:prepare 成功后信息已经持久化,因此提交阶段即使部分节点出错,也可以补偿重试直至最终完成提交。

在一致性模型上,需要区分两种模式:

  • GTM-Lite:仍保证强一致性,不等同于最终一致。
  • GTM-Free:减少对 GTM 的依赖,偏向最终一致和高性能,适合互联网完美 sharding 场景。

小结

  • 嵌套事务不能独立于外部事务提交/回滚。
  • MVCC 可见性看xmin 可见 + xmax 不可见。
  • 八级表锁按"查、锁定查、增删改、维护、索引、强共享行、排他、DDL"记忆,级别之和 ≥8 冲突,特例 5+5 不冲突。
  • deadlock_timeout默认 1 秒,控制死锁检测启动时机。
  • 分布式用 2PC 保证原子性,GTM-Lite 强一致、GTM-Free 偏最终一致。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 20:57:35

OpenClaw 实战:复杂网页嵌套表格的精准提取与自动校验

1. 引言在数据采集、金融分析、电商监控和企业信息整合等场景中,网页表格是最常见也最令人头疼的数据来源之一。简单的表格或许只需要几行解析代码就能完成提取,但当网页中出现行内嵌套表格、跨列合并单元格、动态加载分页以及多层标题结构时&#xff0c…

作者头像 李华
网站建设 2026/9/28 20:57:14

测试INA118输入偏置电压以及噪声

简 介: 本文基于INA118精密仪表放大器,通过自制单面PCB板进行测试,验证其输入偏置电压与偏置电流。实验采用高增益(5000倍)配置,测得输入偏置电压约77.8 μV,略高于数据手册标称值(5…

作者头像 李华