管理查询生成的溢写文件
如果内存不足以在内存中执行 SQL 查询,Apache Cloudberry 会在磁盘上创建溢写文件(也叫 workfile)。
单个查询最多允许创建的溢写文件数量由服务器配置参数 gp_workfile_limit_files_per_query
控制。默认值是 100000 个溢写文件,对于大多数查询来说已经足够。
如果某个查询创建的溢写文件数 量超过了配置的限制,Apache Cloudberry 会报错:
ERROR: number of workfiles per query limit exceeded
以下情况可能会导致生成大量溢写文件:
- 查询的数据存在倾斜。
- 分配给查询的内存太少。你可以通过服务器配置参数
max_statement_mem
和statement_mem
,或者通过资源组或资源队列配置,来控制单个查询可用的最大内存。
你可以尝试修改查询语句、调整数据分布,或者更改系统内存配置,来让查询顺利执行。系统视图 gp_toolkit.gp_workfile_*
提供了溢写文件的使用信息,你可以用这些信息来排查问题和优化查询。这些 gp_workfile_**
视图在文档查看查询溢写空间使用情况 中有详细说明。
更多参考资料:
- 使用资源组 介绍了在启用资源组管理时,关于内存和溢写的注意事项。