首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgreSQL vacuum临时文件?

postgreSQL vacuum临时文件?
EN

Stack Overflow用户
提问于 2009-09-04 11:33:49
回答 2查看 12K关注 0票数 2

我有个“小”问题。一周前,我的数据库达到了满磁盘容量。我删除了不同表中的许多行,以释放磁盘空间。在此之后,我尝试运行一个完整的真空,但没有完成。

我想知道的是。当我停止吸尘器完全完成时,是否在磁盘上留下了我必须手动删除的临时文件?我现在有一个数据库,它有100%的磁盘容量,这是一个大问题。

有什么释放磁盘空间的小贴士吗?

我正在使用postgres 8.1.4数据库运行SUSE。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-04 11:48:08

首先:

升级

即使你不能升级到8.2,8.3或8.4 -至少升级到最新的8.1 (目前是8.1.17,但1-2天后将是8.1.18 )。

第二:诊断问题所在。

使用du工具诊断空间的确切位置。哪个目录占用了太多空间?

df查询总的已用空间,然后检查其中有多少是PostgreSQL目录。

最好的选择是:

代码语言:javascript
复制
cd YOUR_PGDATA_DIR
du -sk *
cd base
du -sk *
cd LARGEST DIR FROM PREVIOUS COMMAND
du -sk * | sort -nr | head

现在,您知道PGDATA中的哪个目录正在使用空间,您可以对其执行一些操作。

如果是日志或pg_temp -重新启动pg或删除日志(pg_clog和pg_xlog不是通常意义上的日志,永远不要从那里删除任何东西!)。

如果它在你的基目录中,那么:

基本目录中的数字目录与数据库相关。您可以使用以下命令进行检查:

代码语言:javascript
复制
select oid, datname from pg_database;

当您知道正在使用大部分空间的数据库时,请连接到该数据库,并检查哪些文件正在使用大部分空间。

文件名将是带有可选".digits“后缀的数字-这个后缀(目前)是不相关的,您可以通过执行以下命令来检查该文件到底代表什么:

代码语言:javascript
复制
select relname from pg_class  where relfilenode = <NUMBER_FROM_FILE_NAME>;

一旦知道哪些表/索引占用了大部分空间,就可以将其真空填满,或者(更好的)对它们发出CLUSTER命令。

票数 5
EN

Stack Overflow用户

发布于 2009-09-04 23:08:52

在您的问题的新切入点上,您可以使用query找出数据库中的哪些内容占用了大量空间。这可以帮助您找到要截断的候选人,以回收足够的工作空间,以清理那些删除了信息的候选人。

请注意,删除大量行,但VACUUMing的频率不足以控制磁盘空间,这通常会导致名为索引膨胀的情况,VACUUM FULL对此毫无帮助。当我建议的查询显示您的大部分空间被索引而不是常规表占用时,您就会知道您已经成功了。您将需要集群,它需要与表本身一样多的空闲磁盘空间来重新构建所有内容,以从该问题中恢复。

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

https://stackoverflow.com/questions/1378713

复制
相关文章

相似问题

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