在Coordinator上执行删表操作
postgres=# drop table graph.r_credit_info;
过程一直卡着,查看Coordinator上的锁,发现这个语句已经拿到这个对象的AccessExclusiveLock锁
postgres=# select locktype,pid,relation,virtualtransaction,mode,granted from pg_locks where relation='16420';
locktype | pid | relation | virtualtransaction | mode | granted |
---|---|---|---|---|---|
relation | 64075 | 16420 | 97/766 | AccessExclusiveLock | t |
(1 row)
但是在多个datanode上都发现有个没有pid的行级排它锁阻塞了这个ddl语句
postgres=# select locktype,pid,relation,virtualtransaction,mode,granted from pg_locks where relation='16420';
locktype | pid | relation | virtualtransaction | mode | granted |
---|---|---|---|---|---|
relation | 60435 | 16420 | 141/27963 | AccessExclusiveLock | f |
relation | 16420 | -1/31739584 | RowExclusiveLock | t |
(2 rows)
尝试过重启集群,这个没有pid的行级排他锁一直存在。
现在这个表只能进行dml操作,但是无法进行ddl操作,各路大神有没有解决的思路?在线等!
是虚拟事务造成的,需要登陆每个DATANODE, 执行COMMIT PREPARED ‘’ 引号里填写gid,gid是根据
SELECT distinct gid
FROM (select a.* from pg_locks a left join pg_class b on a.relation = b.oid where b.relname='表名') pl
LEFT JOIN pg_prepared_xacts ppx ON pl.virtualtransaction = '-1/' || ppx.transaction where pid is null 查出来的
每个datanode都 COMMIT PREPARED ‘’后 就能删除了 亲测有效
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。