Postgresql Postgres数据库的大小比文件系统上的表空间大得多
我有一个Postgres 8.3实例,表空间总计约74G。这很好 但如果我问postgres我的数据库有多大,我会得到一个(出乎意料的)大答案:595GB 这似乎很奇怪。系统上的磁盘I/O测试处于“正常”范围,但查询速度比以前慢 这是数据库的损坏吗?或者有没有办法“修复”这种奇怪现象 [编辑] 我通过操作系统检查表空间大小: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
/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。完全备份和恢复完全修复了它。我仍然不知道发生了什么但这完全有效