Sql 缓解红移锁?

Sql 缓解红移锁?,sql,transactions,amazon-redshift,etl,locks,Sql,Transactions,Amazon Redshift,Etl,Locks,嗨,我正在通过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 ); 此查询有时会锁定它未释放的表。 其他进程排队的原因 现在我检查哪个表有锁,并终止导致锁的进程 我想知道我可

嗨,我正在通过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
);
此查询有时会锁定它未释放的表。 其他进程排队的原因

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

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


提前感谢

截断可能会破坏您的事务逻辑。建议提前执行所有截断操作。我还建议添加一些处理逻辑,以确保ETL流程的每个实例:A)以独占方式访问临时表,或B)使用一组单独的临时表

红移(和许多其他数据库)中的
TRUNCATE
执行隐式
COMMIT


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

截断可能会破坏您的事务逻辑。建议提前执行所有截断操作。我还建议添加一些处理逻辑,以确保ETL流程的每个实例:A)以独占方式访问临时表,或B)使用一组单独的临时表

红移(和许多其他数据库)中的
TRUNCATE
执行隐式
COMMIT



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

如果锁没有释放,您将缺少一个
commit
,我在每个事务之后都放了一个commit语句,所以这种情况发生的几率是50次中的1次。如果您100%确定始终提交每个事务,您应该联系亚马逊的支持部门。令人遗憾的是,我的公司没有这样做没有AWS支持:(如果锁没有释放,你就会缺少一个
commit
,我在每次交易后都会放一个commit语句,所以这种情况有50次之1。如果你100%确定每次交易都是提交的,你应该联系亚马逊的支持部门。遗憾的是,我的公司没有AWS支持:(这与Postgres有很大的不同,
truncate
不执行隐式提交。因此我这里有一个暂存表foo_stg是一个暂存表,foo是报告中使用的最后一个表,因此所有操作都在暂存表中进行,数据在最后一次插入操作中移动到最后一个表中。不确定这有何帮助。)我应该用其他语句替换truncate语句吗?您不能在事务中使用truncate。因此您可以:a)首先运行
truncate
语句,然后在事务中执行其余的工作,或者B)在事务中使用
DELETE FROM staging_table;
代替truncate。如果选择选项B,则在提交事务后需要运行
VACUUM DELETE ONLY staging_table;
。这与Postgres有很大区别,其中
truncate
不执行隐式提交。因此我这里有一个staging tablefoo_stg是一个暂存表,foo是报告中使用的最终表,因此所有操作都在暂存表中进行,数据在最后一次插入操作中移动到最终表不确定此帮助应如何用其他语句替换truncate语句?您不能在事务中使用truncate。因此您可以:a)首先运行
TRUNCATE
语句,然后在事务中完成其余工作,或者B)使用
DELETE FROM staging_表在事务中代替truncate。如果选择选项B,则需要运行
VACUUM DELETE ONLY staging_table提交事务后。