数据库上的 SELECT 查询(带表 JOIN)是否会在运行时影响磁盘空间?
背景:我有一个带有 Postgresql 后端(9.3.10)的 Django 应用程序。我的数据库驻留在磁盘空间极低的 VM 中(大约还剩约 400MB)。
我查询了几个表来评估要弃用哪些数据以释放磁盘空间(这些包括跨表连接)。这些分析类型的查询被捆绑在一个 url 后面,并统一运行。当我点击 url 时,包含我的数据库的虚拟机在大约半分钟后空间不足。
我是一名偶然的 DBA,但仍在学习中。谁能解释为什么我在这种情况下空间不足?在此类操作中是否创建了某种临时文件?如果需要,我将分享我的配置详细信息。
当然,a
SELECT
占用磁盘空间的方法其实有很多种。只需查看文档work_mem
即使使用高
work_mem
aSELECT
也可以消耗掉磁盘空间。例如,您可以拥有一个直接写入磁盘的函数。您可能有兴趣通过使用来减轻这种情况
temp_file_limit
(埃文的回答是正确的,请接受他不是我的。我正在添加补充信息。)
是的,某些排序和连接操作可以将磁盘存储用于临时文件。
使用启用
log_temp_files
或运行查询EXPLAIN (VERBOSE, BUFFERS, ANALYZE)
。