G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)

南大通用GBase 8s数据库(gbase database)解决事务并发问题,锁机制用于协调并发访问,防止多个事务同时操作数据导致的数据不一致。

锁粒度的操作

  • 行级锁:
    ALTER TABLE tab1 LOCK MODE (ROW);
    CREATE TABLE tab1 (...) LOCK MODE ROW;
  • 页面锁:
    ALTER TABLE tab1 LOCK MODE (PAGE);
    CREATE TABLE tab1 (...) LOCK MODE PAGE;
  • 表级锁:
    • 自动上锁:访问表内数据的时候,数据库会默认的为这张表上锁,比如说读取数据时可能上的是读锁,也可能不对表上锁,但是它会防止其他的事务对表的结构进行修改
    • 手动上锁:
      BEGIN WORK;
      LOCK TABLE tab1 IN EXCLUSIVE MODE;
      LOCK TABLE tab2 IN SHARE MODE;
      UNLOCK TABLE tab1;
  • 索引键锁:
    自动上锁,没办法主动使用,必须要有条件就是查询的表中必须要有索引,并且我们查询语句生成的执行计划必须要用到索引

锁粒度的选择

  • 库锁:独占式,数据库维护锁,适用于需要独占数据库的维护场景。
  • 表级锁:批量操作的并发控制手段,适用于批量更新和 DDL 操作等,可以有效避免并发冲突。
  • 页级锁:兼顾并发与管理的选择,适用于顺序访问等场景。
  • 行级锁:OLTP 系统高并发利器,适合 OLTP 系统,通过仅锁定修改行来提升并发能力。
  • 索引键锁:确保索引操作的完整性,Index-Key 锁是数据库在索引层面施加的锁,用于保护索引键值及其区间,防止并发事务插入或修改导致的幻读和一致性问题。

异常的锁等待情况

  • 活锁:事务长时间等待,锁总是被其他事务抢先获取
    解决:先来先服务(FIFO)排队机制。
  • 死锁:T1: LOCK R1 → 等待 R2;T2: LOCK R2 → 等待 R1
    产生条件:互斥、持有并等待、不可剥夺、循环等待。
    解决:预防和避免:破坏四个条件之一,资源分配图算法;检测与恢复:定期检测,选择牺牲者回滚。
相关推荐
TDengine (老段)9 小时前
TDengine 常见问题 TOP7
大数据·数据库·时序数据库·常见问题·tdengine·涛思数据
+VX:Fegn08959 小时前
计算机毕业设计|基于java+ vue共享单车信息系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
mysqloffice10 小时前
数智时代,核心系统数据库架构往哪走
数据库·人工智能
l1t10 小时前
DeepSeek总结的 pgColumnar 1.0-alpha4 发布说明
数据库·postgresql
DBA_G10 小时前
南大通用GBase 8s数据库助力某农商行核心系统投产
数据库
工业涂料百问10 小时前
【环保合规】系列(四)工业涂料碳足迹怎么算?边界定义、因子选择与减排优先级拆解
数据库
wuyk55511 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
文人sec11 小时前
grant 之后要跟着 flush privileges 吗?要不要使用分区表?
数据库·mysql·adb·数据分析
Omics Pro12 小时前
上海AI Lab孙思琦×高张阳:虚拟细胞代码库智能体
数据库·人工智能·算法·机器学习·自然语言处理
旺仔不是程序员12 小时前
相关子查询与性能优化:PostgreSQL 逐行执行的代价与 JOIN 重写
数据库·后端·sql