Postgres数据库大小比文件系统上的表空间大得多

时间:2011-09-14 07:27:56

标签: postgresql size tablespace

我有一个Postgres 8.3实例,表空间总共大约74G。这可以。

但是如果我问postgres我的数据库有多大,我得到一个(意外的)大答案:595 GB。

这似乎很奇怪。系统上的磁盘I / O测试处于“正常”范围,但查询速度比以前慢。

这是数据库的损坏吗?或者有没有办法'修复'这种奇怪的东西?

[编辑] 我通过os检查表空间大小:

/usr/local/pgsql/data/tblspaces/du -c -h
74G total 

所有表空间都在那里

我检查数据库大小如下:

select pg_size_pretty(pg_database_size('database')) 

[EDIT2]

我还检查了整个/ usr / local / pgsql / dir。它是76 G

我运行了这个查询:

select
  tablename
, pg_relation_size(tablename)
, pg_size_pretty(pg_relation_size(tablename) ) as relsize
, pg_size_pretty(pg_total_relation_size(tablename) ) as disksize
, pg_total_relation_size(tablename)
from pg_tables where schemaname <> 'information_schema'
order by 2 desc

返回'正常'关系,其中没有一个超过了磁盘大小。

4 个答案:

答案 0 :(得分:2)

原来是腐败问题。完全恢复备份修复了问题

答案 1 :(得分:1)

可以使用以下方法检查表空间的大小:

SELECT pg_size_pretty(pg_tablespace_size('name of tablespace'));

看起来你的数据库没有在你的特定表空间中存储它的所有对象(表,索引等),而是另一个(默认的?)表空间。检查pg_class和pg_tablespace,如下所示:

SELECT 
    *
FROM pg_class 
    JOIN pg_tablespace ON reltablespace = pg_tablespace.oid
WHERE
    spcname <> 'name of tablespace';

答案 2 :(得分:0)

听起来很奇怪!你是如何检查数据库大小和表空间大小的? 可能是您的数据库位于不同的表空间中。

- 获取数据库大小 MYDB =&GT;选择pg_size_pretty(pg_database_size('mydb'));

pg_size_pretty

214 MB (1排)

- 显示所有表空间 连接您的数据库,并键入以下commond \分贝

答案 3 :(得分:0)

您最近是否对数据库进行了清理?这可能会产生戏剧性的影响,特别是如果在较大的桌子上有大量的流失。

此外,pg_dump的结果有多大?