管理查询生成的溢出文件

管理查询生成的溢出文件

如果没有足够的内存让一个SQL查询在内存中运行,Greenplum数据库会在磁盘上创建溢出文件(也被称为工作文件)。 默认的100,000个溢出文件对于大部分查询来说够用了。但是,如果一个查询创建的溢出文件超过指定个数,Greenplum数据库会返回这个错误:
ERROR: number of workfiles per query limit exceeded
导致生成大量溢出文件的原因包括:
  • 在被查询的数据中存在数据倾斜。
  • 为该查询分配的内存量太小。

通过更改该查询、更改数据分布或者更改系统内存配置可能可以让查询成功运行。可以使用 gp_workfile_*gp_workfile_*视图查看溢出文件使用信息。用Greenplum数据库的服务器配置参数max_statement_mem, statement_mem,或者资源队列可以控制查询所使用的最大内存量。

监控Greenplum系统 包含下列信息:
  • 有关倾斜的信息以及如何检查数据倾斜
  • 有关使用 gp_workfile_* views视图的信息

有关服务器配置参数的信息,请见 Greenplum数据库参考指南。有关资源队列的信息, 请见 Using Resource Queues.

如果已经确定查询必须创建比服务器配置参数gp_workfile_limit_files_per_query所允许的更多的溢出文件,可以增加该参数的值。