12.PG数据库-重建索引

1.重建索引

(1)Postgresql重建索引是通过REINDEX命令来实现的
语法结构 
REINDEX [ ( option [, ...] ) ] { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM } [ CONCURRENTLY ] name
注释说明:
INDEX        重新创建指定的索引。
TABLE        重新创建指定表的所有索引。
SCHEMA       重新创建指定 SCHEMA 的所有索引。
DATABASE     重新创建指定 DATABASE 的所有索引。
SYSTEM       重新创建当前数据库中在系统目录上的所有索引。
CONCURRENTLY 并发重新创建索引,不阻止对该表的并发插入、更新或删除。

(2)重建索引的原因
当由于软件bug或者硬件原因导致的索引不可用;
当索引包含许多空的或者近似于空的页,这个在b-tree索引会发生;
检查索引膨胀情况,如果索引膨胀太大, 会影响性能, 建议重建索引,
数据库系统修改了存储参数,需要重建不然就会失效(如修改fillfactor参数);
创建并发索引时失败,遗留了失效的索引

(3)重建索引注意事项
重建索引不同的级别的重构需要不同的权限,比如table那么就需要有这个表的权限即需要有操作索引的权限,如超级用户postgres拥有这个权限。
重构索引的目的是为了当索引的数据不可信时,即对于成本的计算会出现偏差较大,无益于优化器得到最优的执行计划以至于性能优化失败。
重构索引类似于先删除所有再创建一个索引,但是索引的条目是重新开始的。重构时当前索引是不能写的,因为此时有排他锁。
在8.1版本之前REINDEX DATABASE 只包含系统索引,并不是期望的所有指定数据库的索引。7.4版本之前REINDEX TABLE不会自动执行下级TOAST tables。
如果索引在用CONCURRENTLY选项创建失败,该索引保留为一个“invalid”。 
这类索引是无用的,可以方便的用REINDEX来重建它们。注意,只有REINDEX INDEX可以在无效的索引上执行并发创建。 

表和索引使用查看 
PostgreSQL的contrib模块提供了额外的硬盘使用信息查看方式
pgstattuple:
这个模块包含可获得常规行元组数据和索引页面的详细分析的功能
提供了pgstatetuple()和pgstatindex()两个统计表和索引的方法
比较系统表pg_class的表统计信息,这个模块还统计了表中的dead tuples
表未分析前,使用pgstatetuple()函数就能精确查询表的 page 数据,
而此时 pg_class 还没数据,说明 pg_relpages 查询了表的 page 物理文件信息。 

2.重建索引的基本语法如下

REINDEX INDEX [CONCURRENTLY] IDX_ID; 

REINDEX TABLE [CONCURRENTLY]  T_TAB1;

REINDEX SCHEMA USER1;

REINDEX DATABASE MYDATABASE; 

REINDEX SYSTEM MYDATABASE2;

3.总结

使用REINDEX命令可以非常方便的重建索引,但是需要注意重建索引会消耗性能,一般放在非业务时间段操作为宜。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle迁移到PostgreSQL是很常见的数据库迁移场景之一,它主要涉及到数据结构的转换和数据的迁移。在进行迁移时,需要进行一些准备工作和注意事项,例如: 1. 首先需要评估源数据库的数据结构和应用程序,了解哪些功能需要在PostgreSQL重建或者是重新实现。 2. 为了确保数据的完整性,需要在迁移之前创建PostgreSQL目标数据库,并确保它具有与源数据库相同的结构。 3. 在进行数据迁移之前,需要将Oracle数据库中的数据转换为PostgreSQL支持的格式。 4. 在执行迁移之前,需要对源数据库进行备份,并在迁移期间保持源数据库的可用性。 5. 在完成迁移后,需要对PostgreSQL目标数据库进行测试,以确保所有应用程序都能够正常工作。 在进行Oracle到PostgreSQL的迁移时,也需要考虑一些技术上的差异。例如: 1. Oracle和PostgreSQLSQL语法和功能方面存在一些差异,需要在迁移过程中进行修改。 2. Oracle和PostgreSQL使用不同的索引类型和查询优化技术,需要进行调整以提高性能。 3. Oracle和PostgreSQL使用不同的事务管理机制,需要进行调整以确保数据的一致性。 总体来说,在进行Oracle到PostgreSQL的迁移时,需要进行详细的计划和准备工作,并且需要仔细评估不同数据库之间的差异和要求。这样才能确保顺利地完成迁移,并且保证数据的完整性和可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值