减轻Redshift锁?

时间:2018-08-31 06:57:12

标签: sql transactions amazon-redshift etl locks

嗨,我正在通过Python运行ETL。 我有一个从Python运行的简单sql文件,例如

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

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

此查询有时会锁定未释放的表。 由于其他进程会排队。

现在,我检查哪个表具有锁,并杀死导致该锁的进程。

我想知道我可以对代码进行哪些更改以减轻此类问题?

预先感谢!

1 个答案:

答案 0 :(得分:2)

TRUNCATE可能破坏了您的交易逻辑。建议先将所有内容截断。我还建议添加一些处理逻辑,以确保ETL流程的每个实例之一:A)对登台表具有独占访问权B)使用单独的登台表集。

Redshift(和许多其他DB)中的

TRUNCATE执行隐式COMMIT

  

…be aware that TRUNCATE commits the transaction in which it is run.

Redshift尝试通过返回以下INFO消息以确认成功来弄清楚这一点:TRUNCATE TABLE and COMMIT TRANSACTION。但是,SQL客户端工具可能不会显示此INFO消息。在psql中运行SQL以查看它。