gpt4 book ai didi

postgresql - 删除postgresql中的临时文件

转载 作者:行者123 更新时间:2023-11-29 11:28:49 25 4
gpt4 key购买 nike

我有一个大约 800GB 的巨大数据库。当我尝试运行一个对某些变量进行分组并汇总结果的查询时,它在运行了几个小时后停止了。 Postgres 抛出磁盘空间已满的消息。查看统计数据后,我意识到 dB 有大约 400GB 的临时文件。我相信这些临时文件是在我运行查询时创建的。我的问题是如何删除这些临时文件。另外,如何避免此类问题——使用游标或 for 循环来不一次处理所有数据?谢谢。

我正在使用 Postgres 9.2

最佳答案

查询执行期间在 base/pgsql_tmp 中创建的临时文件将在查询完成时被删除。你不应该手动删除它们。
这些文件与临时表无关,它们用于存储不适合 work_mem 的大型散列或排序操作的数据。

确保查询已完成或取消,尝试连续运行两次 CHECKPOINT 并查看文件是否仍然存在。如果是,那是一个错误; PostgreSQL 服务器在磁盘空间不足时崩溃了吗?

如果您在 base/pgsql_tmp 中确实有不会自动删除的旧文件,我认为手动删除它们是安全的。但在这种情况下,我会向 PostgreSQL 提交错误。

如果您的执行计划需要对大型结果集进行排序或需要创建大型散列,则无法避免大型临时文件。游标不会在那里帮助你。我猜想对于 for-loops,您的意思是将处理从数据库转移到应用程序代码——这样做通常是错误的,只会将问题从数据库转移到处理效率较低的另一个地方。

更改您的查询,使其不必对大型结果集进行排序或散列(检查 EXPLAIN)。我知道这听起来不是很有帮助,但没有更好的方法。您可能无论如何都必须这样做,或者几个小时的运行时间对您来说是否可以接受?

关于postgresql - 删除postgresql中的临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com