Amazon web services 红移中可能出现的死锁

Amazon web services 红移中可能出现的死锁,amazon-web-services,amazon-redshift,deadlock,Amazon Web Services,Amazon Redshift,Deadlock,我有两个红移查询,它们似乎互相阻塞,所以我怀疑可能存在死锁 query1是ETL管道中的查询 DROP TABLE IF EXISTS temp_table; CREATE TABLE temp_table AS SELECT * FROM sometable; BEGIN; ALTER TABLE table_a RENAME TO temp_old_table; ALTER TABLE temp_table RENAME TO table_a; END; DROP TABLE IF EXIS

我有两个红移查询,它们似乎互相阻塞,所以我怀疑可能存在死锁

query1是ETL管道中的查询

DROP TABLE IF EXISTS temp_table;
CREATE TABLE temp_table AS SELECT * FROM sometable;
BEGIN;
ALTER TABLE table_a RENAME TO temp_old_table;
ALTER TABLE temp_table RENAME TO table_a;
END;
DROP TABLE IF EXISTS temp_old_table;
查询2是临时查询

select * from table_a;
query1和query2同时运行。不确定先运行哪个查询。但不管出于什么原因,这两个查询都被卡住了。 以下是pg_锁中的锁情况: query2在表_a上具有AccessShareLock,已授予true query1正在等待表_a上的AccessExclusiveLock,已授予false

由于query2已经拥有AccessShareLock,它应该能够向前移动,query1也应该完成

看起来可疑的地方是query1不是一笔交易。它可能会多次尝试获取锁,query2可能会在这两次之间获取锁。这两个查询之间是否存在可能发生死锁的情况?

来自:

AccessShareLock:在卸载、选择、更新或删除操作期间获取。AccessShareLock仅阻止AccessExclusiveLock尝试。AccessShareLock不会阻止尝试读取或写入表的其他会话

当表获得锁时,锁将一直保留,直到您使用提交或回滚完成事务。等待锁的事务可以阻止也在等待获取相同锁的后续事务。这可能导致集群上的锁排队

奇怪的是,
SELECT
会导致阻塞


如果您使用的是SQL客户机,请启用“自动提交”。

奇怪的是,纯
SELECT
查询会得到一个锁。Query2是如何运行的,是通过SQL客户机运行的吗?它有自动提交选项吗?这是aws支持部门的响应。所以你的猜测是对的。谢谢<代码>因此,在我看来,您的一个用户通过其SQL客户端(可能是SQL workbench/j)启动与AUTOCOMMIT off的连接,这会导致所有查询以手动提交模式执行,并且除非事务关闭,否则不会释放资源上的锁。