GBase 8a
运维管理
文章

GBase 8a集群锁介绍

发表于2025-07-25 09:29:07219次浏览1个评论

查看GBase8a集群锁方式, gcadmin showlock

说明:

lockname:锁名称

vc[.db][.tb].locktype的命名方式

owner:申请锁的SQL所在节点IP

content:锁信息描述,持有锁的session id和线程号(LWP)

create time:锁创建时间

type:锁类型,互斥锁(E),共享锁(S)

 查看锁等待

SQL在被阻塞(checking permision)无法下发执行

  1.执行SQL: show detail processlist;  Wait字段显示等待的锁名称;

  2.从锁信息中过滤持有该锁的SQL的IP和所在SessionID

集群层锁冲突

集群SQL操作是一个复杂过程,GBase 8a集群将不同的操作所涉及的资源需求,都简化为锁控制。

一个SQL执行过程中,对vc.db.tb三级锁中的不同资源,如果是读操作就加S共享锁,如果是写操作就加E独占锁。

如insert into vc1.db1.t1 select from vc2.db2.t2操作需要加的锁如下:

vc1和vc2的VC.LOCK_HASHMAP、

vc1.db1和vc2.db2的VC.DB.LOCK_DB、VC.DB.LOCK_TABLE_SAPCE

源表vc2.db2.t2的VC.DB.TB.LOCK_META的S锁

目标表vc1.db1.t1的VC.DB.TB.LOCK_EXECUTE的E锁,提交阶段加VC.DB.TB.LOCK_COMMIT的E锁。

当持有对E锁的vc1.db1.t1表发起写并发时,则阻塞。(INSERT VALUES可并发,只有提交阶段加LOCK_COMMIT的E锁)。

GBase 8a v9集群锁重要特性

  • 支持死锁自动检测,避免死锁发生;

  • 排队锁,针对同表的并发DML按照加锁顺序排队执行;

  • 支持insert values并发;gcluster_insertselect_use_values_optimize=1将insert select并发转为insert values并发;

  • 将不同的资源抽象为不同的锁类型,且锁类型都有Read(S锁)、Write(E锁)两个状态;

  • 将DML的执行和提交拆分开,使用LOCK_EXECUTE、LOCK_COMMIT分别控制,尽量做到执行阶段不阻塞,提交阶段阻塞的目的。

  • 除insert外,update、delete、load等为表锁串行执行;都不阻塞查询;

  • 提供锁级别控制参数gcluster_lock_level,控制是否允许在commit阶段进行读操作,(可能各节点数据版本不一致);

评论

登录后才可以发表评论
用户头像
levvel发表于 2个月前
评论是对发帖人的一种尊重