Memory management 红移查询:错误xx000磁盘已满红移

Memory management 红移查询:错误xx000磁盘已满红移,memory-management,out-of-memory,amazon-redshift,Memory Management,Out Of Memory,Amazon Redshift,我执行了下面的查询 select employee_name, max(employee_dept) as dept from employeeDB where employee_name is not null and employee_name != '' group by employee_name order by employee_name asc limit 1000 并收到错误错误:XX000:磁盘已满 通过执行下面的查询进行调查,我发现我有941 GB的可用空间和5000 G

我执行了下面的查询

select employee_name, max(employee_dept) as dept
from employeeDB 
where employee_name is not null and employee_name != ''
group by employee_name
order by employee_name asc
limit 1000
并收到错误
错误:XX000:磁盘已满

通过执行下面的查询进行调查,我发现我有941 GB的可用空间和5000 GB的已用空间

select
  sum(capacity)/1024 as capacity_gbytes, 
  sum(used)/1024 as used_gbytes, 
  (sum(capacity) - sum(used))/1024 as free_gbytes 
from 
  stv_partitions where part_begin=0;

有谁能建议如何减轻这一挑战,以便我能够获得所需的结果吗?

可用磁盘空间对于红移上的查询执行非常重要。这就是为什么真空过程很重要,并且应该定期执行,特别是对于经常发生删除的表

你最近用吸尘器打扫过桌子吗

检查并查看有关StackOverflow的问题

+-------+              +-------+
|-------|              |-------|
||10 kb||              ||25 kb||
+-------+              +-------+
|xxxxxxx|              |xxxxxxx|
|xxxxxxx|              |xxxxxxx|
|xxxxxxx+------------->+xxxxxxx|
+-------+              |xxxxxxx|
||10 kb||              |xxxxxxx|
+-------+              |xxxxxxx|
|xxxxxxx|              |xxxxxxx|
|xxxxxxx|              |xxxxxxx|
+-------+              |xxxxxxx|
||05 kb||              |xxxxxxx|
+-------+              +-------+
请看上面的图示。假设
xxxxxxx
表示磁盘上已占用的空间,而数字表示可用的空白空间

这两种方案都表示25 kb的空白空间。但是在情况1中,如果必须插入(或执行操作)需要连续内存分配,例如
15kb
,则无法执行该操作。虽然25 kb的空间是可用的,但由于该空间不是连续的,因此可能会出现
内存/磁盘已满错误
,从而导致空间浪费或分配给内存需求非常低的任务

情况2中,连续内存块可用。需要
~25kb
内存的任务可以轻松执行

这不仅适用于红移或DBMS;它适用于任何远程涉及内存管理的东西,包括操作系统

是什么导致了这样的内存分区(称为碎片化

碎片是由不断创建和删除(修改)磁盘上的文件引起的。当一个占用空间的文件被删除时,它会在那里创建一个巨大的内存孔。小于内存孔大小的文件可能会占用该空间,否则该空间将被浪费

应该怎么做


碎片整理在您的特定情况下,Amazon Redshift提供了表和/或模式的配置。您可能有足够的磁盘空间,但没有足够的连续内存,引擎无法分配给您执行的任务。

employeeDB表的大小是多少?您可以从svv_table_info检查表格大小。您在上述专栏中使用的压缩编码是什么?我的假设是,它和压缩有关。您的数据无法在磁盘上解压缩。我只是查询数据,稍后将结果导出为csv。您能建议如何解决此问题,以便我能够高效地查询数据吗?@familier:只需尝试在不同的计算机上执行上述查询,最好配置比您当前使用的计算机更好。@familier:如果您正在寻找的正是上述答案,请将其标记为已接受。如果不完全是,但在某种程度上帮助了你,那就投票吧。这样,它就不会丢失,并将帮助那些有类似问题的人。