3

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

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

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

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

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

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

所有的表空间都在那里

我像这样检查数据库大小:

select pg_size_pretty(pg_database_size('database')) 

[编辑2]

我还检查了整个 /usr/local/pgsql/ 目录。76G

我运行了这个查询:

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

4 回答 4

2

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

于 2013-01-17T12:07:24.273 回答
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';
于 2011-09-14T10:14:39.683 回答
0

Have you vacuumed the DB recently? That can potentially have dramatic effects, particularly if there's a lot of churn on larger tables.

Also, how big is the result of a pg_dump?

于 2011-09-15T03:36:43.167 回答
0

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

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

pg_size_pretty

214 MB(1 行)

-- 显示所有连接你的数据库的表空间,然后输入以下命令 \db

于 2011-09-14T08:36:57.910 回答