文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>PostgreSQL数据库日常维护两个要点

PostgreSQL数据库日常维护两个要点

时间:2011-02-21  来源:Dufe王彬

一、注重日常清理(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 回收已删除元组占据的存储空间。 在一般的 PostgreSQL 操作里, 那些已经 DELETE 的元组或者被 UPDATE 过后过时的元组是没有从它们所属的表中物理删除的; 在完成 VACUUM 之前它们仍然存在。 因此我们有必须周期地运行 VACUUM, 特别是在常更新的表上,如果没有参数,VACUUM 处理当前数据库里每个表, 如果有参数,VACUUM 只处理那个表,简单的 VACUUM (没有FULL) 只是简单地回收空间并且令其可以再次使用;

VACUUM命令的含义为:垃圾收集以及可选地分析一个数据库。VACUUM回收已删除元组占据的存储空间。在一般的 PostgreSQL 操作里, 那些已经 DELETE 的元组或者被 UPDATE 过后过时的元组是没有从它们所属的表中物理删除的; 在完成 VACUUM 之前它们仍然存在。 由于以下几个原因,我们必须周期性运行 PostgreSQL 的 VACUUM 命令∶ 1.恢复那些由已更新的或已删除的行占据的磁盘空间。

例子:

#psql -U pgsql dbname
dbname#VACUUM;

搞定!

二、重建索引(REINDEX)

语法
REINDEX { INDEX | TABLE | DATABASE | SYSTEM } 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;

#psql -U pgsql dbname
dbname#REINDEX DATABASE dbname;

通过这两个维护,可以及时释放废弃的资源,让数据库轻装运行,速度更快

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载