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

GaussDB 八种常规锁介绍

1 锁产生背景

并发与一致性的矛盾,在多用户的数据库系统中,并发访问和数据一致性是两核需求,但它们天然存在矛盾。

  1. 无锁数据问题:若多个事务同时修改同一数据,可能导致数据混乱(如银行转账时余额计算错误)
  2. 串行低效问题:若强制所有事务串行执行,数据库吞吐量将大幅下降。

通过控制对共享资源的访问顺序,在保证数据一致性的前提下,尽可能提高并发度。

2 常规锁作用

用于确保SQL操作的数据一致性,即:ACID特性。

3 八种常规锁产生场景

编号

锁模式

产生场景

1

AccessShareLock

当对一个对象进行查询SELECT操作时,会申请该类型的锁,AccessShareLock是最低级别的锁,相当于读写中的共享锁。

2

RowShareLock

当查询命令指定了FOR update/share时,会申请该类型的锁

3

RowExclusiveLock

当对数据对象做增删改操作时,会申请该类型的锁,例如对某个表做插入,删除,更新操作时,需要申请该类型的锁。

4

ShareUpdateExclusiveLock

当执行vacuum(non-full)、analyze、create index concurrently时,需要申请该类型的锁

5

Sharelock

主要用于创建索引时申请该类型的锁

6

ShareRowExclusiveLock

和exclusive相似,但和RowShareLock兼容

7

ExclusiveLock

和AccessExclusivelock类似,但和最低别的读锁AccessSharelock兼容

8

AcsessExclusiveLock

在对元数据(系统表)做DDL操作时,会申请该类型的锁,AccessExclusiveLock与其他所有的锁模式都不相容。

4 解决经典问题

  1. 写冲突问题
  2. 事务隔离问题
  • 脏读:事务A读取到事务B未提交的数据
  • 不可重复读:事务A两次读取的同一数据结果不同
  • 幻读:事务A两次查询同一数据范围,结果集行数不同

 

     3. 数据完整性问题

  • 外键约束:锁定关联表记录,确保引用完整性
  • 唯一约束:锁定唯一索引,防止重复插入。

     加意向排他锁(intention Exclusive lock): 锁定索引条目,防止其他事务同时插入相同值

并发场景下保证数据一致性,既要保证一定性能,又要数据安全。

 

http://www.dtcms.com/a/339146.html

相关文章:

  • Redis的使用(初阶)
  • 命令行如何更改参数?
  • 化学反应中的贝叶斯优化
  • Spring RestTemplate的postForObject()方法详解与实践指南
  • 从一个ctf题中学到的多种php disable_functions bypass 姿势
  • 网络聚合链路与软件网桥配置指南
  • 效果图只是起点:深挖3D可视化在家装建筑中的隐藏金矿
  • Unity进阶--C#补充知识点--【C#各版本的新功能新语法】C#1~4与C#5
  • mycat分库分表实验
  • 安全设计-防止非法移机
  • Java多线程:线程创建、安全、同步与线程池
  • C++语法学习笔记之六 --- 生命周期、作用域
  • 私有化部署全攻略:开源大模型本地化改造的性能与安全深度评测
  • https如何保证传递参数的安全
  • 从零开始的云计算生活——第四十六天,铁杵成针,kubernetes模块之Configmap资源与Secret资源对象
  • 【Java】Spring Boot 3.0 微服务架构:高效开发与部署的最佳实践指南
  • CETOL 6σ 解决一次性支架输送器精度与法规验证难题
  • 算法——快速幂
  • 教程:用XiaothinkT6语言模型快速实现文本情感分类,附轻量模型推荐
  • 全链路自主构建智慧科研写作系统——融合LLM语义理解、多智能体任务协同与n8n自动化工作流构建
  • TDengine IDMP 运维指南(3. 使用 Ansible 部署)
  • 决策树算法全景解析:从 ID3、C4.5 到 CART
  • 响应式爬虫系统设计:Scala异步任务编排与弹性容错机制
  • 工业级蓝光三维扫描仪:助力汽车零部件高精度检测与质量提升
  • C++11 lambda表达式使用讲解
  • string 题目练习 过程分析 具体代码
  • leetcode_239 滑动窗口最大值
  • 本地部署消息中间件 Weblogic 并实现外部访问
  • 2025年9月计算机二级MySQL题库及wampserver2.2e下载安装教程
  • 解决linux中磁盘爆满(准确说是文件系统爆满)导致mysql启动失败的问题——对文件系统进行扩容