atk*_*yla 6 postgresql configuration
我的数据库突然挂在一些连接许多表的查询上,我看到:
temporary file size exceeds temp_file_limit (1025563kB)
Run Code Online (Sandbox Code Playgroud)
可以在此处查看示例查询和查询计划:
http://www.sharecsv.com/s/a6333a7f610e049dd81ebcfc19a4c02f/temp_file_limit_exceeded.csv
此查询通常需要不到 100 毫秒,但在达到临时文件大小限制时会挂起。
当我跑步时:
SELECT temp_files AS "Temporary files", temp_bytes AS "Size of temporary files"
FROM pg_stat_database db;
Run Code Online (Sandbox Code Playgroud)
我懂了:
Temporary files Size of temporary files
---
22550 10651900248
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我能够解决更多问题。假设用户列出他们可以说 2 种语言 - 查询运行正常。然后他们编辑自己的个人资料,表示自己懂得 20 种语言。查询最终超出temp_file_limit
并挂起。
您将连接大约 40 个表来检索大约 200 列。我没有深入探讨,但通常情况下,这样的查询是一种误解。不管怎样,难怪你会积累大量临时文件。
另请注意,同一会话的所有临时文件都会计入限制。这样,绑定游标就会成为一个问题。或者同一事务中的多个大型查询。
默认情况下该参数temp_file_limit
设置为-1,表示“无限制”。因此,要么清理您的查询,要么删除或扩展限制。(只有超级用户才能做到这一点。)
如果您无法更改其中任何一个,设置更多work_mem
可能有助于在 RAM 中保留更多操作,因此需要更少的临时空间。
不要将此设置与 混淆temp_buffers
,后者大多不相关,并且设置可用于临时对象的 RAM 量(例如CREATE TEMP TABLE
......)
而且你也懒得提及你的 Postgres 版本。也许已经过时了?
归档时间: |
|
查看次数: |
23704 次 |
最近记录: |