GBase 8s 锁的分类

        锁的对象是数据库中的数据对象,如关系型数据库中的表、记录、属性、索引等, 对数据对象加锁的时机是在事务对其进行操作之前,向系统发出加锁请求。加锁后事务就取得了对该数据对象的控制,在事务释放它的锁之前,其他事务不能对此数据对象进 行任何操作。封锁是一种排队机制,将并行任务按锁的先后顺序排队,把并行任务变成串 行任务。 GBase8s 采用全局管理的封锁机制,在共享内存中分配一块内存集中标记锁的使用情况,在每个锁结构中保存锁的拥有者、锁定的对象(是表、记录、还是行)、锁的类型等。 在GBase8s中每个锁占用 128 Byte。

1.数据库级锁(Database-Ievel Locks)

        在我们通过 CONNECT DATABASE 或者 CREATE DATABASE 语句访问数据库时, 系统都将自动在该数据库上加上一个共享(S)锁,这样可以防止其他用户删除数据库或 者在该数据库上加排它(X)锁。

2.表级锁(Table-Ievel Locks) 表级锁就是指锁定的对象是一个表,可以通过如下语句显式地对表加锁和释放锁:

BEGIN WORK;

LOCK TABLE tab1 IN EXCLUSIVE MODE;

LOCK TABLE tab2 IN SHARE MODE;

UNLOCK TABLE tab1;

        在执行如下一些 DDL 语句时,GBase8t 会自动对表进行加锁,如 ALTER FRAGMENT、 ALTER INDEX、ALTER TABLE、CREATE INDEX (如果没有使用 ONLINE 模式)、DROP INDEX(如果没有使用 ONLINE 模式)、RENAME COLUMN、RENAME TABLE。

        在整个表或者表中的大部分数据需要更新时,使用表级锁的效率高。

3.页级锁(Page Locks)

        GBase8t 物理上把多行记录存放在数据页(Page)上,页级锁指锁的对象是一个数据 页,当采用页级锁访问记录时,GBase8t 会自动对访问的数据页进行加锁。当按物理顺序 访问和更新多条记录时,使用页级锁的效率较高。

  可以通过如下方式指定页级锁模式:

ALTER TABLE tab1 LOCK MODE (PAGE);

CREATE TABLE tab1 (…) LOCK MODE PAGE ;

       CREATE TABLE 时若不指定锁模式,则将采用 ONCONFIG 参数 DEF_TABLE_ LOCKMODE 来指定表的锁模式。

4.行级锁(Row Locks)

        关系型数据库的数据是按行来管理的,所以行级锁很容易理解。在 OLTP 系统中行级 锁的使用很广泛,只需要锁定所访问的少数记录情况,使用行级锁的效率较高。

  可以通过如下方式指定行级锁模式:

ALTER TABLE tab1 LOCK MODE (ROW);

CREATE TABLE tab1 (…) LOCK MODE ROW ;

       CREATE TABLE 时若不指定锁模式,则将采用 ONCONFIG 参数 DEF_TABLE_ LOCKMODE 来指定表的锁模式。

5.索引锁(Index key)

        索引采用 B+树的存储结构,所以对索引的锁管理就是管理索引的 Key 值。数据库采 用开、闭区域的方式进行索引的锁管理,示例如下:

Create table tab1 (c1 int,c2 int) lock mode row;

Create unique index idx_tab1 on tab1(c1);

Insert into tab1 values(1,2);

Insert into tab1 values(2,2);

Insert into tab1 values(3,2);

        假设表中只有如上 3 行记录,当执行 update tab1 set c1=0 where c1>=3;语句时,GBase8t 将对索引 key 值为 3 的记录进行闭区间加锁,意味着此时不能新增 key 值大于 3 的记录。 若此时执行 insert into tab1 values(4,2),则会提示 Index 锁冲突错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八珍豆腐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值