首页 > 解决方案 > Redshift - 强制执行自动提交

问题描述

是否有 Redshift 集群选项可以对所有连接强制执行 autocommit=True?即不允许建立连接/运行查询,除非设置已设置。

我们遇到了很多锁定问题,因为一些 SQL 工具默认设置为 autocommit=False。

标签: lockingdatabase-connectionamazon-redshift

解决方案


我知道没有这样的选择,你可能不想要一个。自动提交的缺点是所有语句都是它们自己的事务,必须通过提交队列处理。提交队列是集群中的单一资源,如果提交过多,可能会过载。ETL 流通常需要在一个事务中执行多个语句以保持数据库的一致性。

话虽如此,我感到你的痛苦。训练有素的大型数据库用户可能会导致各种锁定问题。标准化工作台及其配置会有所帮助,但总会有一些必须使用自己的。创建寻找空闲连接并关闭它们的守护进程也有帮助。教育也是关键。最重要的行动是使您的 ETL 流合理化,以免被读锁阻塞。只要表上有读锁,某些语句(如 drop)就会被阻塞,但 truncate 可以继续处理此类锁。因此,对于一般用户用于查询的表,drop-and-swap 并不是一个好的选择。

有时我也希望有一种方法可以让某些用户进入自动提交和只读状态。


推荐阅读