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

Postgresql Postgres数据库的大小比文件系统上的表空间大得多,postgresql,size,tablespace,Postgresql,Size,Tablespace,我有一个Postgres 8.3实例,表空间总计约74G。这很好 但如果我问postgres我的数据库有多大,我会得到一个(出乎意料的)大答案:595GB 这似乎很奇怪。系统上的磁盘I/O测试处于“正常”范围,但查询速度比以前慢 这是数据库的损坏吗?或者有没有办法“修复”这种奇怪现象 [编辑] 我通过操作系统检查表空间大小: /usr/local/pgsql/data/tblspaces/du -c -h 74G total 所有表空间都在那里 我检查te数据库大小,如下所示: select

我有一个Postgres 8.3实例,表空间总计约74G。这很好

但如果我问postgres我的数据库有多大,我会得到一个(出乎意料的)大答案:595GB

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

这是数据库的损坏吗?或者有没有办法“修复”这种奇怪现象

[编辑] 我通过操作系统检查表空间大小:

/usr/local/pgsql/data/tblspaces/du -c -h
74G total 
所有表空间都在那里

我检查te数据库大小,如下所示:

select pg_size_pretty(pg_database_size('database')) 
SELECT 
    *
FROM pg_class 
    JOIN pg_tablespace ON reltablespace = pg_tablespace.oid
WHERE
    spcname <> 'name of tablespace';
[编辑二]

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

我运行了这个查询:

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
选择
数据表名
,pg_关系_大小(表名)
,pg_size_pretty(pg_关系_size(tablename))作为relsize
,pg_size_pretty(pg_total_relation_size(tablename))作为磁盘大小
,pg_总关系_大小(表名)
来自pg_表,其中schemaname“information_schema”
按2描述订购

返回“正常”关系大小,没有一个超过disksize。

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

--获取数据库大小的步骤 mydb=>选择pg_size_pretty(pg_database_size('mydb'))

pg_尺寸_漂亮 214MB (1排)

--显示所有表空间 连接数据库,然后键入以下commond
\db

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

SELECT pg_size_pretty(pg_tablespace_size('name of tablespace'));
看起来您的数据库并没有将其所有对象(表、索引等)存储在特定的表空间中,而是存储在另一个(默认?)表空间中。检查pg_类和pg_表空间,如下所示:

select pg_size_pretty(pg_database_size('database')) 
SELECT 
    *
FROM pg_class 
    JOIN pg_tablespace ON reltablespace = pg_tablespace.oid
WHERE
    spcname <> 'name of tablespace';
选择
*
来自PGU班
在reltablespace=pg_tablespace.oid上连接pg_表空间
哪里
spcname“表空间名称”;

您最近用吸尘器清理过数据库吗?这可能会产生巨大的影响,特别是如果大型桌子上有大量的搅动


此外,pg_转储的结果有多大?

被证明是一个腐败问题。完全恢复备份修复了问题

您是如何检查数据库大小的?表空间呢?真奇怪。我将\db中的表空间与操作系统上的表空间进行了验证,它们与上面帖子中所说的相同,数据库中的所有表空间都存储在操作系统的一个目录中,并且该目录的内容比数据库大小小得多。您是否确实检查了是否所有数据库对象都存储在这些表空间中?某些对象可能位于默认表空间上,如TOAST表和索引。不同卷上的表空间在该文件夹中实现为符号链接,因此不计入sizeI刚才遇到的问题。在3台计算机上,一个db是12gb。另一个是96gb。完全备份和恢复完全修复了它。我仍然不知道发生了什么但这完全有效