我有个“小”问题。一周前,我的数据库达到了满磁盘容量。我删除了不同表中的许多行,以释放磁盘空间。在此之后,我尝试运行一个完整的真空,但没有完成。
我想知道的是。当我停止吸尘器完全完成时,是否在磁盘上留下了我必须手动删除的临时文件?我现在有一个数据库,它有100%的磁盘容量,这是一个大问题。
有什么释放磁盘空间的小贴士吗?
我正在使用postgres 8.1.4数据库运行SUSE。
发布于 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目录。
最好的选择是:
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不是通常意义上的日志,永远不要从那里删除任何东西!)。
如果它在你的基目录中,那么:
基本目录中的数字目录与数据库相关。您可以使用以下命令进行检查:
select oid, datname from pg_database;当您知道正在使用大部分空间的数据库时,请连接到该数据库,并检查哪些文件正在使用大部分空间。
文件名将是带有可选".digits“后缀的数字-这个后缀(目前)是不相关的,您可以通过执行以下命令来检查该文件到底代表什么:
select relname from pg_class where relfilenode = <NUMBER_FROM_FILE_NAME>;一旦知道哪些表/索引占用了大部分空间,就可以将其真空填满,或者(更好的)对它们发出CLUSTER命令。
发布于 2009-09-04 23:08:52
在您的问题的新切入点上,您可以使用query找出数据库中的哪些内容占用了大量空间。这可以帮助您找到要截断的候选人,以回收足够的工作空间,以清理那些删除了信息的候选人。
请注意,删除大量行,但VACUUMing的频率不足以控制磁盘空间,这通常会导致名为索引膨胀的情况,VACUUM FULL对此毫无帮助。当我建议的查询显示您的大部分空间被索引而不是常规表占用时,您就会知道您已经成功了。您将需要集群,它需要与表本身一样多的空闲磁盘空间来重新构建所有内容,以从该问题中恢复。
https://stackoverflow.com/questions/1378713
复制相似问题