暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8c 锁机制

原创 薛定谔的比干 2022-10-24
675

锁机制

GBase 8c锁分为三种:自旋锁(spinlock)、轻量级锁(Light Weight Lock/LWLock)和常规锁。
锁的流程:加锁 -> 临界区操作 -> 放锁

一般情况下,锁的使用和争抢会成为制约性能的重要因素。

自旋锁

自旋锁主要用于加锁时间非常短的场合,比如修改标志或读取标志字段,在几十个指令(CPU原子指令)之内。自旋锁只有两种状态:锁定和解锁。
自旋锁由编码保证不会产生死锁,没有死锁检测,并且没有等待队列。

轻量级锁

轻量级锁主要用于内部临界区操作比较久的场合,加锁和解锁的操作可以跨越函数,但使用后要立即释放。
轻量级锁一共有两种类型:

  1. 共享锁:多个进程可以同时获取共享锁;
  2. 排它锁:排它锁只能被一个进程拥有。
    当进程无法获取资源时,轻量级锁会使进程处于休眠阻塞状态。
    轻量级锁应由编码保证不会产生死锁,但由于代码复杂度及各类异常情况,GBase 8c提供了轻量级锁的死锁检测机制,来避免各类异常场景产生的轻量级死锁问题。

常规锁

常规锁主要用于业务访问的数据库对象加锁。常规锁的加锁遵守数据库的两阶段加锁协议,即访问过程中加锁,事务提交时释放锁。
GBase 8c提供了8个锁级别分别用于不同的语句并发:
● 1级锁一般用于SELECT查询操作;
● 3级锁一般用于基本的INSERT、UPDATE、DELETE操作;
● 4级锁用于VACUUM、ANALYZE等操作;
● 8级锁一般用于各类DDL语句。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论