不要手动删除临时文件。作为第一步,我将检查哪些操作正在使用临时文件。您可以使用一些选项来启用写入临时文件的查询日志: 1.启用log_tmp_files 或 1.使用pgbadger 1.查询表Pg_stat_statements,如下所示: SELECT interval '1 milliseconds' * total_time AS total_exec_time,total_time / calls AS avg_exec_time_ms,temp_blks_written,query AS query FROM pg_stat_statements WHERE temp_blks_written > 0 ORDER BY temp_blks_written DESC LIMIT 20; 1.查询pg_stat_database以给予数据库级别的统计信息,如下所示: 选择datname,temp_files,pg_size_pretty(temp_bytes)作为temp_file_size FROM pg_stat_database order by temp_bytes desc; 1.运行EXPLAIN ANALYZE并将work_mem size与explain analyze打印的值进行比较。 一般建议将temp_file_limit设置为不同于-1(默认值)的值。确保使用正确的索引来优化查询。(小心地)调优work_mem。将statement_timeout设置为最佳值。
2条答案
按热度按时间cwdobuhd1#
只需重新启动PostgreSQL,它就会删除所有留下的临时文件。
通常,临时文件的存在时间不会超过查询的持续时间。检查长时间运行的查询。
wztqucjr2#
不要手动删除临时文件。作为第一步,我将检查哪些操作正在使用临时文件。您可以使用一些选项来启用写入临时文件的查询日志:
1.启用log_tmp_files
或
1.使用pgbadger
1.查询表Pg_stat_statements,如下所示:
SELECT interval '1 milliseconds' * total_time AS total_exec_time,total_time / calls AS avg_exec_time_ms,temp_blks_written,query AS query FROM pg_stat_statements WHERE temp_blks_written > 0 ORDER BY temp_blks_written DESC LIMIT 20;
1.查询pg_stat_database以给予数据库级别的统计信息,如下所示:
选择datname,temp_files,pg_size_pretty(temp_bytes)作为temp_file_size FROM pg_stat_database order by temp_bytes desc;
1.运行EXPLAIN ANALYZE并将work_mem size与explain analyze打印的值进行比较。
一般建议将temp_file_limit设置为不同于-1(默认值)的值。确保使用正确的索引来优化查询。(小心地)调优work_mem。将statement_timeout设置为最佳值。
**请注意:**临时文件是在内存不足时创建的。