数据库服务器,应对是高并发的访问,每天都有大量的读写
删除操作。因此,时间一长服务器的内存就耗尽,
数据库的占的空间也很大。为了应对这个情况,我制定两个常用的维护操作。 一、注重日常清理(VACUUM;)。因为有大量的更新(update)"
删除(delete)操作,会有大量的空间需要释放。 每日执行一次VACUUM,每周访问量低的时候执行VACUUM FULL; 语法结构; VACUUM [ FULL | FREEZE ] [ VERBOSE ] [ table ] VACUUM [ FULL | FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [,...] ) ] ] FULL ------选择"完全"清理,这样可以恢复更多的空间, 但是花的时间更多并且在表上施加了
排它锁。 FREEZE ---------选择激进的
元组"冻结"。 VERBOSE --------- 为每个表打印一份详细的清理工作报告。 ANALYZE --------- 更新用于优化器的
统计信息,以决定执行
查询的最有效
方法。 table ------- 要清理的表的
名称(可以有模式修饰)。缺省时是当前
数据库中的所有表。 column ---------要分析的具体的列/字段
名称。缺省是所有列/字段。 VACUUM 回收已
删除元组占据的存储空间。 在一般的 Postgre
sql 操作里, 那些已经 DELETE 的
元组或者被 UPDATE 过后过时的
元组是没有从它们所属的表中物理
删除的; 在完成 VACUUM 之前它们仍然存在。 因此我们有必须周期地运行 VACUUM, 特别是在常更新的表上,如果没有参数,VACUUM 处理当前
数据库里每个表, 如果有参数,VACUUM 只处理那个表,简单的 VACUUM (没有FULL) 只是简单地回收空间并且令其可以再次使用; VACUUM命令的含义为:
垃圾收集以及可选地分析
一个数据库。VACUUM回收已
删除元组占据的存储空间。在一般的 Postgre
sql 操作里, 那些已经 DELETE 的
元组或者被 UPDATE 过后过时的
元组是没有从它们所属的表中物理
删除的; 在完成 VACUUM 之前它们仍然存在。 由于以下几个原因,我们必须周期性运行 Postgre
sql 的 VACUUM 命令∶ 1.恢复那些由已更新的或已
删除的行占据的磁盘空间。 例子: #p
sql -U pg
sql dbname
dbname#VACUUM; 搞定! 二、重建索引(REINDEX) 语法 REINDEX { INDEX | TABLE | DATABASE | SY
stem } name [ FORCE ] 描述 REINDEX命令用来重建索引。旧的索引将被
删除,重新读取索引的父表中的数据来重建索引。REINDEX命令
不支持并发创建索引的
功能。在下面的情况下,应该重建索引: ·
一个索引中的数据已被破坏,包含非法的数据。软件
错误和硬件问题都会导致索引被损坏。 · 索引中包含许多空的或者几乎是空的数据页。应该重建索引,回收物理存储空间。 · 该变了索引的存储参数fillfactor的值,只有重建索引,新的参数值才能完全生效。 · 使用CREATE INDEX CONCURRENTLY命令创建索引时遇到
错误,留下
一个非法的索引。 例子 (1)重建索引my_index:REINDEX INDEX my_index; (2)重建表my_table 上的所有索引:REINDEX TABLE my_table; (3)重建
数据库中的所有索引:REINDEX DATABASE
broken_db; #p
sql -U pg
sql dbname
dbname#REINDEX DATABASE
dbname; 通过这两个维护,可以及时释放废弃的资源,让
数据库轻装运行,速度更快
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。