zoukankan      html  css  js  c++  java
  • PostgreSQL 日常数据库维护工作

    经常重建索引

    有时候我们值得用 REINDEX 命令周期性重建索引。

    在 PostgreSQL 版本 7.4 之前,我们经常有必要避免"索引膨胀",因为缺乏在 B-tree 索引内部的空间恢复机制。

    一个情况就是索引健字的范围随着时间而变化。

    比如,一个在时间戳上的索引随着时间的推移,旧的记录会最终被删除,因为那些用于不再使用的键字范围的索引页面不能得到重复使用,就会导致膨胀。

    随着时间的推移,索引的尺寸可能会变得比里面有用的数据大得多。

    从 PostgreSQL 7.4开始,那些已经完全清空的索引页会得到重复使用。

    不过这样仍然会有不充分使用空间的可能:如果一个页面中大多数索引键字被删除,只留下很少的部分,那么该页仍然将被分配。

    所以,如果使用模式是这样的:每个范围里除了少数键字之外,其它大部分键字最终都被删除;

    那么这样也会导致空间的低效使用。

    膨胀的可能性不是无穷的,最差的情况是每个页面至少还有一个键字,但是对这样的使用模式,我们可能仍然值得安排周期性的重建索引。

    对于非 B-tree 索引的膨胀可能还没有很好地定量分析。在使用非 B-tree 索引的时候保持对索引的物理尺寸的监控是个很好的主意。

    还有,对于 B-tree 索引,一个新建立的索引从某种意义上比更新了多次的访问起来要快,因为在新建立的索引上,逻辑上连接的页面通常物理上也连接在一起(这样的考虑目前并不适用于非 B-tree 索引)。

    仅仅从提高访问速度角度出发,可能我们也值得周期性的重建索引。

    重建索引实际上是重新组织B-树空间。在下面情况下需要重建索引: 

      (1)、数据和使用模式大幅度变化。 

      (2)、排序的顺序发生改变。 

      (3)、要进行大量插入操作或已经完成。 

      (4)、使用大块I/O的查询的磁盘读次数比预料的要多。 

  • 相关阅读:
    单调队列——POJ
    寒假ACM集训复习总结Day4-helman
    寒假ACM集训复习总结Day3-helman
    寒假ACM集训复习总结Day2-helman
    寒假ACM集训复习总结Day1-helman
    kettle 常用组件
    kettle实现sqlserver与mysql的连接并写入mysql
    kettle实现简单的增量同步
    Kettle入门
    spark快速大数据分析
  • 原文地址:https://www.cnblogs.com/ryanzheng/p/9827246.html
Copyright © 2011-2022 走看看