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

GBase 8s在锁方面是如何实现

原创 kevin爸 2022-06-28
226

a.共享锁;

b.排他锁;

c.更新锁 (lock-U)在更新Cursor中使用更新锁由cursors 含有‘for update’ 选项执行时产生的,只能在没有排他锁或者更新锁的记录上加更新锁当锁定的记录真正执行的时候,更新锁将提升为排他锁;

d.专一锁 (lock-IX or IS) 自动分配, 如果一条记录上的记录被更新,一个排他锁将分配在该记录上,同时将该记录的表上自动加上专一锁,这能保证没有session可以在该表上增加排他锁,只要该表中有记录被增加了排他锁。

锁的粒度有entire databases 数据库锁、entire tables 表锁、disk pages 数据页锁和single rows, or index-key values 行锁四种。锁是与隔离级别相互配合的。GBase 8t事务隔离级别分为下面几种: Dirty Read 、Committed Read 、Cursor Stability、 Repeatable Read 、Last Committed Read;

a.对于Dirty Read隔离级别,数据库服务器不会分配任何锁,查询过程中,可以查询到任何数据row, 甚至那些被修改但尚未提交的记录,因此会产生读取脏数据的情况。该隔离级别的并发访问程度最高。

b.对于Committed Read隔离级别,是数据库默认的隔离级别,能避免读到脏数据,读到的所有的记录都是已提交的。

c.对于Cursor Stability隔离级别,不仅可以看到提交的记录,也可以保证看到的记录不会被更新,其他进程不能更新 (UPDATE or DELETE) 你所看到的记录,当移动到下一行时,锁才会释放,记录就可以进行修改。这种隔离级别可以解决幻影读的问题。

d.对于Repeatable Read隔离级别,数据库在读取的记录上加共享锁,验证是否可以读取数据直到事务提交,锁才能释放其他用户可以读取数据,但是不能修改。这种隔离级别是隔离程度最高的,能够解决不可重复读和幻影读的问题。

e.对于Last Committed Read隔离级别,当所读的记录被锁,读取的是记录最后一次提交的数据;这种隔离级别类似oracle的读一致性。

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

评论