Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 大量postgres删除后的可用空间_Database_Postgresql - Fatal编程技术网

Database 大量postgres删除后的可用空间

Database 大量postgres删除后的可用空间,database,postgresql,Database,Postgresql,我有一张900万行的桌子。我发现其中有很大一部分(大约90%)可以释放出来。清理后需要执行哪些操作?真空、重新索引等 提前感谢。您肯定希望运行真空吸尘器,以便为将来的插入腾出空间。如果您想实际回收磁盘上的空间,使其可供操作系统使用,则需要运行真空满。请记住,真空可以同时运行,但真空满需要表上的独占锁 您还需要重新编制索引,因为即使在真空运行之后,索引仍将保持膨胀状态。如果可能的话,一种更快的方法是删除索引并从头开始重新创建它 你还需要分析,你可以把它和真空结合起来 有关更多信息,请参见。我对博士

我有一张900万行的桌子。我发现其中有很大一部分(大约90%)可以释放出来。清理后需要执行哪些操作?真空、重新索引等


提前感谢。

您肯定希望运行真空吸尘器,以便为将来的插入腾出空间。如果您想实际回收磁盘上的空间,使其可供操作系统使用,则需要运行真空满。请记住,真空可以同时运行,但真空满需要表上的独占锁

您还需要重新编制索引,因为即使在真空运行之后,索引仍将保持膨胀状态。如果可能的话,一种更快的方法是删除索引并从头开始重新创建它

你还需要分析,你可以把它和真空结合起来


有关更多信息,请参见。

我对博士后的世界相对较新,但我知道建议进行真空分析。我认为还有一个子选项可以释放空间。我发现reindex在批量插入或删除时也很有用。是的,我一直在处理行数相似的表,速度的提高非常明显(UBuntu,Core 2 Quad)

如果您想释放文件系统上的空间,真空填充或集群都可以帮助您。您还需要在这些之后运行ANALYZE,以确保planner具有最新的统计信息。在此过程中,您的表将被完全锁定(此表上的读写操作将挂起),因此您可能希望在此期间使应用程序脱机

在PostgreSQL 8.2及更早版本中,真空完全可能是最好的选择

在PostgreSQL 8.3和8.4中,CLUSTER命令得到了显著改进,因此不建议使用VACUUM FULL——它速度慢,并且会使索引膨胀。集群将从头开始重新创建索引,而不会出现膨胀。根据我的经验,它通常也快得多。集群还将使用索引对整个物理表进行排序,因此您必须选择一个索引。如果不知道是哪个,主键可以正常工作

在PostgreSQL 9.0中,VACUUM FULL被更改为像集群一样工作,所以两者都很好

很难做出预测,但在一台经过适当调整的带有商品硬件的服务器上,900万行不应超过20分钟


创建一个包含10%所需记录的临时表不是更好吗。然后删除原始表并将临时重命名为原始…

什么PostgreSQL版本?另外,如果能解决您的问题,请接受答案。当可用空间较少时,我们可以这样做吗?假设10GB分区使用了9GB空间。可用可用空间不足1GB。我们可以简单地删除记录并运行真空完全吗?@YasiruG不幸的是,这些操作会创建表的完整新副本,因此,如果表(不包括已删除的行)大于1GB,则该操作将失败。您可以删除并重新创建索引以暂时释放空间。另一种选择是将该表的pg_转储到单独的机器或磁盘上,然后删除该表并将其恢复——这将释放空间,就像释放真空一样。