PostgreSQL – 恢复的数据库比原始数据库小
发布时间:2020-12-13 18:03:59 所属栏目:百科 来源:网络整理
导读:我使用pg_dump到“.sql”文件备份了我的PostgreSQL数据库. 当我恢复数据库时,其大小为2.8GB,而源(原始)数据库为3.7GB.访问数据库的应用程序似乎工作正常. 减少恢复数据库的大小的原因是什么? 简而言之,数据库存储的速度比空间更优化. 例如,如果您在表中插入
我使用pg_dump到“.sql”文件备份了我的PostgreSQL数据库.
当我恢复数据库时,其大小为2.8GB,而源(原始)数据库为3.7GB.访问数据库的应用程序似乎工作正常. 减少恢复数据库的大小的原因是什么?
简而言之,数据库存储的速度比空间更优化.
例如,如果您在表中插入100行,然后删除每个具有奇数编号ID的行,则DBMS可以写出仅包含50行的新表,但是将删除的行标记为可用空间会更有效并在下次插入行时重用它们.因此,该表占用的空间是目前所需的两倍. Postgres使用“MVCC”,而不是锁定,用于事务管理使得这更有可能,因为UPDATE通常涉及将新行写入存储,然后在没有事务查看它时将旧行标记为删除. 通过转储和还原数据库,您将重新创建没有所有可用空间的数据库.这基本上是VACUUM FULL命令的作用 – 它将当前数据重写为新文件,然后删除旧文件. 有一个extension distributed with Postgres called Select oid::regclass::varchar as table,pg_size_pretty(pg_relation_size(oid)/1024 * 1024) As size,pg_size_pretty(sum(free)) As free From ( Select c.oid,(pg_freespace(c.oid)).avail As free From pg_class c Join pg_namespace n on n.oid = c.relnamespace Where c.relkind = 'r' And n.nspname Not In ('information_schema','pg_catalog') ) tbl Group By oid Order By pg_relation_size(oid) Desc,sum(free) Desc; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- postgresql – pgAdmin显示类型[]但不是类型
- SSI开发:applicationContext-common.xml标准配置模板
- 《Cocos2d-x之Lua核心编程》读书笔记:Lua基础
- 创建helloWorld app,报错workspace\appcompat_v7\r
- c – typedef并在相同范围内使用同名的声明
- flex – LoaderContext和ApplicationDomain是否随Adobe AIR
- 【Android开发】使用adb命令发现手机中sqlite3 not found的
- MM 平台报错信息 org.xml.sax.SAXParseException
- LINQ之路18:LINQ to XML之导航和查询
- 在C#中,闭包不是不可变的有什么好的理由吗?