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

南大通用 GBase 8s 锁 讲解

1.锁机制

  • 在多用户数据库系统中,用户可以锁定一个对象,可以防止其他用户修改锁定的对象
  • 多个并发用户访问数据库数据的情况下,为了保证数据的完整性,锁是必需的
  • 锁作为关联到数据项的对象,程序可以显示对数据加锁,数据库系统也可以隐式的对对象进行加锁

2.锁的分类

  • Shared locks: 共享锁,多个用户可以同时读取相同的记录
  • Exclusive locks: 排他锁,同一时间仅仅有一个用户可以读取相同的记录
  • Promotable (Update) lock: 提升锁,可以升级 (从共享锁提升为排他锁) 或者降级
  • Intent lock: 专一锁,是一种表级锁,标识在该表上有一个游标在读取数据

3.锁的类型介绍

(1)共享锁(lock-S)
  • 如果一个对象上没有排他锁,则共享锁可以加在该对象上
  • 防止其他事务更新数据
  • 但同时,其他事务可以读取该数据 (其他事务可以加共享锁)
  • 多个事务可以在同一个对象上加多个共享锁
(2)排他锁 (lock-X)
  • 如果记录上没有任何锁,排他锁才可以加在该对象上
  • 一旦在记录上加了排他锁,则不能在该记录上增加任何锁了,直至锁释放
  • 防止其他事务读取和更修数据
(3)更新锁 (lock-U)
  • 在更新Cursor中使用
  • 更新锁由cursors 含有 ‘for update’ 选项执行时产生的 ,只能在没有排他锁或者更新锁的记录上加更新锁
  • 当锁定的记录真正执行的时候,更新锁将提升为排他锁
(4)专一锁 (lock-IX or IS)
  • 由IDS自动分配
  • 如果一条记录上的记录被更新,一个排他锁将分配在该记录上,同时将该记录的表上自动加上专一锁
  • 这能保证没有session可以在该表上增加排他锁,只要该表中有记录被增加了排他锁


4.锁的兼容矩阵

SX
STRUEFALSE
XFALSEFALSE

5.锁的有效期

  • 程序控制数据库锁的有效期,当数据库关闭后,数据库锁将被释放
  • 根据数据库是否使用了事务的情况,表锁的有效期不同【如果数据没有使用事务(没有事务日志,也不使用commit work语句),显示对一个表lock,当执行unload table时,锁将被释放;】
  • 当数据库使用了事务,事务结束时,将释放事务所有的锁 table, row, page, and index locks


6.锁的粒度及应用

(1)锁的粒度介绍

锁粒度 说明
数据库锁 针对整个数据库的锁
表锁 针对整个表的锁
页锁 针对整页数据的锁
行锁 针对一个数据行的锁
字节锁 在包含varchar的行上的锁
键锁 在索引中的一个键值上的锁

(2)不同锁粒度的应用

一般来讲,锁的粒度越大,并发性就越低,程序控制将越简单。

  • 数据库锁

    应用数据库管理活动,比如: imports 和 exports

  • 表锁应用

    当整个表或者表的大部分数据需要更新,加表级锁效率高

  • 页级锁应用

    当按数据物理顺序进行访问和更新时,页级锁效率高

  • 行级锁应用

    OLTP 事务采用行级锁,效率高

  • 以下语句将隐式的对表加锁,直到事务结束后释放:
    ALTER FRAGMENT
    ALTER INDEX
    ALTER TABLE
    CREATE INDEX (if not using ONLINE keyword)
    DROP INDEX (if not using ONLINE keyword)
    RENAME COLUMN
    RENAME TABLE

(3)哪种锁粒度是最优的?取决于事务本身的特点

  • 当更新表中相对较小一部分数据的时候,采用行级锁将获取最好的性能
  • 如果一个事务只访问表中一小部分数据,那就采用行级锁
  • 如果一个事务频繁的访问整个表的数据,设置更粗的粒度,比如表级锁
  • 如果更新数据库中大部分表的大部分数据的情况下, 采用数据库级别的锁


(4)关于查看锁及事务情况的指令

  • 查看表锁模式:

    oncheck –pt dbname:tablename

    dbschema –d dbname –t tablename -ss

  • 查看用户进程锁等待情况使用: onstat –u
  • 查看锁使用和等待情况使用: onstat -k
  • 监控数据库事务及其状态使用: onstat -x

http://www.jsqmd.com/news/1334072/

相关文章:

  • DVWA 漏洞靶场实战项目(一)
  • 视频超分辨率与帧插值框架架构设计与性能优化实战
  • 3分钟掌握QtScrcpy:免费开源Android投屏控制终极指南
  • Macmini 2018安装ArchLinux全攻略:突破T2芯片限制,打造极致开发环境
  • 3分钟学会用Pixelle-Video:AI全自动短视频生成工具完全指南
  • Unity6 IK系统实战:五大应用场景与性能优化指南
  • 频谱泄露与窗函数选择:从DFT原理到工程实战指南
  • 从录播到知识库:构建本地化非结构化内容处理工作流
  • 终极内存映射指南:如何用mio库在C++11中实现高性能文件IO
  • Zigbee与基于Thread的Matter对比:物联网协议性能谁更优?
  • mlir 编译器学习笔记之三 -- 测试
  • 三菱PLC通信实战:基于SLMP协议与Python实现高效数据采集与控制
  • 企业文化AI生成全流程拆解(从Prompt工程到价值观对齐验证)
  • MOS管关不断?从驱动电路到PCB布局的五大原因与解决方案
  • WuWa-Mod终极指南:三步解锁《鸣潮》无限游戏乐趣
  • WatchSpringboard-Prototype开发指南:从环境搭建到图标拖拽功能实现
  • 终极Vite HTML插件:vite-plugin-html让多页面应用开发效率提升3倍
  • libfido2未来展望:新功能路线图与社区贡献指南
  • flat-server日志系统构建:从API监控到错误追踪的全链路方案
  • 2026乌鲁木齐开业庆典策划|舞台搭建一站式服务实测 - LYL仔仔
  • KouriChat——AI微信聊天助手部署教程
  • CPPM考试难不难?零基础和平时工作忙能考过吗 - 众智汇科教育
  • MyBatis-Plus动态SQL与Wrapper实战解析
  • Atom Agent:革命性自托管AI自动化平台,让你的工作流智能运行
  • Godot引擎径向菜单插件开发:从原理到实战应用
  • 2026投入回报比最优5大EMBA商学院测评|圈层、课程、资源长期收益测算 - 产品推荐官
  • ROI复盘该怎么算:把BI投入拆成三层账,向CFO讲清楚
  • Zotero CitationCounts插件:一键搞定学术文献引用统计的终极指南
  • 深度解析DownKyi技术架构:揭秘跨平台B站视频下载工具的设计哲学
  • 平潭财税代办机构推荐|平潭代理记账、平潭工商注册、平潭代办营业执照、平潭代账、平潭记账报税,合规靠谱 本土深耕 全程省心代办 - 海棠依旧大