greenplum-锁表查问题看处理

锁表排查

方式一

1、查询当前锁表的相关信息

Greenplum提供了一个视图(gp_toolkit.gp_locks_on_relation)用来查看当前的锁信息情况,执行查询如下:

select * from gp_toolkit.gp_locks_on_relation ;

通过活动查询视图来看一下所有查询目前的状态:(状态可能是active–正在执行,状态也可能是idle–执行完成 )

select * from pg_stat_activity;

2、通过活动查询视图来看一下该查询目前的状态:

(pg_stat_activity表的pid字段关联gp_locks_on_relation 表的字段lorpid )

select pid,a.* from pg_stat_activity a where a.pid in (select lorpid from gp_toolkit.gp_locks_on_relation );

3、关闭导致死锁的事务

注意:系统表存在一个事务进程,会一直锁着部分系统表,关闭时请注意pid是不是属于自己启动的事务

如果是查询,使用:select pg_cancel_backend(pid);

如果是其他:使用:select pg_terminate_backend(pid);

方式二

查询因为锁表而等待的语句

----因为锁表而等待的语句
select
	*
from
	pg_stat_activity
where
	waiting_reason = 'lock'
	--and datname='apldb'
;

锁表查询

--锁表查询
select
	distinct b.pid
from
	pg_class a,
	pg_locks b
where
	a.oid = b.relation
	--and a.relname='table_name'
;
--此处查询结果中的pid包含系统表,杀会话的时候请注意,查询是最好添加表名称
--如果查询所有,请使用下面的sql
select
	a.relname, b.pid
from
	pg_class a,
	pg_locks b
where
	a.oid = b.relation
	--and a.relname='table_name'
;

锁表处理

--如果是查询,使用:
select pg_cancel_backend(pid);

--如果是其他:使用
select pg_terminate_backend(pid);

杀掉所有其他无用会话

--杀掉hxods下gpadmin用户所有不活跃的无效的会话
select pg_terminate_backend(pid) from pg_stat_activity WHERE datname='hxods' and usename = 'gpadmin' and state = 'idle';
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值