chapter 8. 日常数据库维护工作
table of contents
8.1. 一般性讨论
8.2. 日常清理
8.2.1. 恢复磁盘空间
8.2.2. 更新规划器统计
8.2.3. 避免事务 id 重叠造成的问题
8.3. 经常重建索引
8.4. 日志文件维护
8.1. 一般性讨论
为了保持所安装的 postgresql 平稳运行, 我们必须做一些日常性的维护工作.我们在这里讨论的这些工作都是 经常重复的事情,可以很容易地使用标准的 unix 工具,比如 cron 脚本来实现.不过,设置合适的脚本 以及检查它们是否成功执行则是数据库管理员的责任,
一件很明显的维护工作就是经常性地创建数据的备份拷贝. 如果没有最近的备份,那么你就没有从灾难中恢复的机会 (比如磁盘坏了,失火,误删了表等等).可以在 postgresql 里面使用的备份和 恢复机制在 chapter 9 里面有比较详细的讨论.
其它主要的维护范畴的工作包括周期性的 "vacuuming" (清理)数据库.这个工作我们在 section 8.2 里讨论.
其它需要周期性注意的东西是日志文件的管理. 我们在 section 8.4 里讨论了这个问题.
postgresql 和其它数据库产品比较起来 是低维护量的.但是,适当在这些任务上放一些注意将更加能够 确保我们的愉快工作和获取对这个系统富有成效的经验.
8.2. 日常清理
由于以下几个原因,postgresql 的 vacuum 命令必须周期性地运行∶
1.
恢复那些由已更新的或已删除的行占据的磁盘空间.
2.
更新 postgresql 查询规划器 使用的数据统计信息.
3.
避免因为事务 id 重叠造成的 老旧数据的丢失.
对上面每个条件进行 vacuum 操作的频率和范围因 不同的安装而不同.因此,数据库管理员必须理解这些问题并且 开发出合适的维护策略.本节的重点就放在解释这些高级别的问题; 至于命令语法的细节,请参阅 vacuum 命令手册页.
从 postgresql 7.2 开始, vacuum 的标准形式可以和普通的数据库操作 (selects, inserts, updates, deletes, 但不包括表大纲的修改). 因此日常的清理也不再象以前的版本那样具有干扰性, 也不再那么特别要求安排在每天的低使用的时间里进行.
8.2.1. 恢复磁盘空间
在正常的 postgresql 操作里, 对一行的update或delete并未立即删除旧的 元组 (行的版本).这个方法对于获取多版本并行控制的好处是必要的 (参阅 postgresql 7.3 用户手册)∶ 如果一条元组仍有可能被其它事务看到,那么你就 不能删除它.但到了最后,不会有任何事务对过期的或者已经删除的元组 感兴趣.而它占据的空间必须为那些新的元组使用而回收, 以避免对磁盘空间增长的无休止的需求.这件事是通过运行 vacuum 实现的.
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器