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已经正在执行了

热门帖子
- 12025-12-01浏览数:182762
- 22023-05-09浏览数:25056
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528