跳至内容

为什么 Amazon Redshift 会在我的集群上创建临时表,这些表是否会占用节点内存空间?

1 分钟阅读
0

Amazon Redshift 在我的集群上创建了临时表,我想知道原因。此外,我想知道这些表是否会占用节点上的可用内存空间

解决方法

Amazon Redshift 创建临时表来存储数据定义语言 (DDL) 和数据操作语言 (DML) 操作的中间查询处理结果。Amazon Redshift 会将这些表存储在一个单独的、特定于会话的架构中,该架构采用 pg_temp_1 命名规范。您无法为该架构指定名称。实体化视图刷新也会使用临时表来存储中间查询结果。

用户也可以在 CREATE TABLE 语句中使用 TEMPORARYTEMP 关键字来创建临时表。

**重要事项:**如果您指定的表名称以 # 开头,则 Amazon Redshift 会将该表创建为临时表。命令示例:

create table #newtable (id) as select * from oldtable;

临时表仅在当前会话中可见。会话结束后,Amazon Redshift 会自动从该会话中删除临时表。

当您在集群上激活数据共享时,可以将该集群设置为使用者。在这种情况下,Amazon Redshift 会创建临时对象来存储最终用户从生产者集群检索的数据块。

默认情况下,数据库用户凭借其在 PUBLIC 组中的自动成员身份,拥有创建临时表的权限。要阻止此权限,请运行以下查询,从 PUBLIC 组中撤销 TEMP 权限:

Revoke TEMPORARY | TEMP on DATABASE db_name from GROUP PUBLIC;

**注意:**请将 db_name 替换为您的数据库名称。

然后,向想要允许创建临时表的用户或用户组显式授予 TEMP 权限。

了解临时表存储

临时表使用计算节点上的本地存储。当会话结束且 Amazon Redshift 删除临时表后,Amazon Redshift 会将存储空间释放回节点。临时表遵循以下存储要求:

  • 尽管临时表会占用集群的总体存储分配,但该存储是临时性的,不会计入您的永久数据存储成本。
  • 临时表使用的存储量取决于数据大小和查询的复杂性。
  • 当运行需要大型临时表的大型复杂查询时,集群存储空间可能会暂时激增。

**注意:**默认情况下,Amazon Redshift 会对临时表应用与对永久表相同的自动压缩。临时表旨在实现高效的查询处理,通过存储中间结果来提高查询性能。

相关信息

STV_TBL_PERM

STL_SAVE

AWS 官方已更新 1 年前