GBase 8a集群锁介绍
查看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阶段进行读操作,(可能各节点数据版本不一致);
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526