缓解红移锁?

问题描述 投票:0回答:2

您好,我正在通过 Python 运行 ETL。 我有一个简单的 sql 文件,可以从 Python 运行,比如

truncate table foo_stg;
insert into foo_stg
(
 select blah,blah .... from tables 
);

truncate table foo;
insert into foo 
(
select * from foo_stg
);

这个查询有时会锁定它不释放的表。 由于其他进程排队。

现在我检查哪个表有锁并终止导致锁的进程。

我想知道我可以在我的代码中做哪些更改来缓解此类问题?

提前致谢!!!

sql transactions amazon-redshift etl locks
2个回答
3
投票

TRUNCATE
可能会破坏您的交易逻辑。建议预先进行所有截断。我还建议添加一些处理逻辑,以确保 ETL 过程的每个实例:A)具有对暂存表的独占访问权B)使用一组单独的暂存表。

TRUNCATE
在 Redshift(和许多其他数据库)中做一个隐式的
COMMIT

…请注意,TRUNCATE 会提交运行它的事务。

Redshift 试图通过返回以下 INFO 消息以确认成功来明确这一点:

TRUNCATE TABLE and COMMIT TRANSACTION
。但是,SQL 客户端工具可能不会显示此 INFO 消息。运行
psql
中的SQL就可以看到了


0
投票

在我的例子中,我第一次创建了一个表,并尝试使用 insert into a table from select c1,c2,c3 from stage 从阶段表加载它;我正在使用 python 脚本运行它。 该表正在锁定并且未加载数据。另一个有趣的场景是当我从编辑器运行相同的插入 SQL 时,它正在加载,然后我的 python 脚本加载同一个表而没有任何锁。但是第一次只有表锁发生。不确定是什么问题。

© www.soinside.com 2019 - 2024. All rights reserved.