GBase 8a
性能调优
文章

Gbase 8a 锁分析

发表于2024-07-22 20:37:25244次浏览1个评论

GBase 8a日常运维中,经常会有一个场景,一个业务执行完成后或长时间无法执行完成,导致没有释放,且没有关闭连接,导致后续该库的其它DDL业务卡住,本文介绍长时间处于checking permissions阶段的SQL的排查和处理方法。

1. 通过show processlist语句查询处于checking permissions阶段的sql

上图可以看到一个会话id是56305的会话,正在执行一个DDL,并且处于checking permissions状态,即未拿到锁的状态。

###通过此语句也可直接定位处于checking permissions状态的语句。
select id,user,host,command,start_time,time,state,wait,info from information_schema.processlist where command <> 'Sleep' and state  like '%checking permissions%'; 

2. 通过语句过滤上述查询得到的id ,确认哪一把锁未获得(即状态为False的锁)

gcadmin showlock | grep 56305

上图可以看到红框中的这一行状态显示未false,即该会话目前正在等待获取该锁

3. 再通过语句过滤等待锁的锁名,确认未获得的锁被哪一个会话正在获取中

gcadmin showlock | grep vc00001.awp.t41_t_fact_loan.meta_lock

通过上图可知,锁正在被会话id 55451获取中。

4. 获得的正在持有锁(True)的信息,得到对应ip和sql id,确认正在执行的语句。

select id,user,host,command,start_time,time,state,wait,info from information_schema.processlist where id='55451' and host = '100.6.14.76' ;

由上图可知占据锁的会话已执行了24130秒,在确认可以停止的情况下,在当前节点执行下面的语句杀死会话,终结查询。

gccli -uroot -e "kill 55451"

5. 在会话被杀死后,再次执行show processlit 可看到被阻塞的DDL已经正在执行了

评论

登录后才可以发表评论
崔哥发表于 7个月前
辛卯岁,沈尧道同余北归,各处杭、越。逾岁,尧道来问寂寞,语笑数日。又复别去。赋此曲,并寄赵学舟。记玉关踏雪事清游,寒气脆貂裘。傍枯林古道,长河饮马,此意悠悠。短梦依然江表,老泪洒西州。一字无题处,落叶都愁。载取白云归去,问谁留楚佩,弄影中洲?折芦花赠远,零落一身秋。向寻常、野桥流水,待招来,不是旧沙鸥。空怀感,有斜阳处,却怕登楼。