我有一个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
返回'正常'关系,其中没有一个超过了磁盘大小。
答案 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'));
214 MB (1排)
- 显示所有表空间 连接您的数据库,并键入以下commond \分贝
答案 3 :(得分:0)
您最近是否对数据库进行了清理?这可能会产生戏剧性的影响,特别是如果在较大的桌子上有大量的流失。
此外,pg_dump的结果有多大?