首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在查询postgres数据库过程中离开磁盘空间

在查询postgres数据库过程中离开磁盘空间
EN

Database Administration用户
提问于 2017-03-18 21:09:03
回答 2查看 6.5K关注 0票数 8

数据库上的选择查询(w/ table联接)是否会在运行时影响磁盘空间?

背景:我有一个Django应用程序,带有Postgresql后端(9.3.10)。我的DB驻留在一个VM中,它在磁盘空间上运行得非常低(大约400 DB左右)。

我查询了几个表,以评估为了释放磁盘空间而放弃哪些数据(包括跨表的联接)。这些分析性类型的查询被捆绑在一个url后面,并以统一方式运行。当我访问url时,包含我DB的VM在大约半分钟后就离开了空间。

我是个意外的DBA,还在学习诀窍。有人能解释我为什么在这种情况下离开太空吗?在这些操作中是否创建了某种临时文件?我将分享我的配置细节,以防需要它们。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-03-18 22:50:11

当然,对于SELECT来说,占用磁盘空间的方法其实有很多种。只需查看work_mem的文档

work_mem (整数)指定内部排序操作和哈希表在写入临时磁盘文件之前使用的内存量。该值默认为4兆字节(4MB)。注意,对于一个复杂的查询,几个排序或散列操作可能并行运行;每个操作在开始将数据写入临时文件之前将允许使用此值指定的内存。另外,几个正在运行的会话可以同时执行这样的操作。因此,使用的总内存可能是work_mem值的许多倍;在选择值时必须牢记这一事实。排序操作用于ORDER、DISTINCT和merge联接。散列表用于散列联接、基于哈希的聚合和基于散列的in子查询处理.

即使使用高work_memSELECT也可以占用磁盘空间。例如,您可以有一个直接写入磁盘所需的函数。

您可能有兴趣通过使用temp_file_limit来减轻这种情况。

temp_file_limit (整数)指定进程可用于临时文件(如排序和散列临时文件)或保存游标的存储文件的最大磁盘空间。试图超过此限制的事务将被取消。该值以千字节为单位指定,-1 (默认值)表示无限制。只有超级用户才能更改此设置。

票数 10
EN

Database Administration用户

发布于 2017-03-18 23:33:25

(埃文的回答是正确的,请接受他不是我的。我正在添加补充信息。)

是的,某些类型和联接操作可以将磁盘存储用于临时文件。

启用log_temp_files或使用EXPLAIN (VERBOSE, BUFFERS, ANALYZE)运行查询。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/167531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档