PostgreSQL支持在不锁定写入的情况下建立索引。通过指定的concurrently选项来调用此方法create index。使用 此选项时,PostgreSQL必须对表进行两次扫描,此外,它还必须等待所有可能修改或使用索引终止的现有事务。 因此,此方法比标准索引构建需要更多的总工作量,并且需要花费更长的时间才能完成。但是,由于它允许在建立索引的同时 继续进行正常操作,因此该方法对于在生产环境中添加新索引很有用。当然,索引创建所带来的 额外CPU和I / O负载可能会减慢其他操作的速度。 在并发索引构建中,实际上是通过一个事务将索引输入到系统目录中,然后在另外两个事务中进行两次表扫描。在每个表扫描 之前,索引构建必须等待修改该表的现有事务终止。在第二次扫描之后,索引构建必须等待在第二次 扫描之前终止具有快照的所有事务,如果涉及的索引是部分索引或其他索引,则包括在其他表上的并发索引构建的任何阶段 使用的事务。具有不是简单列引用的列。然后,最后可以将索引标记为可以使用了, 并且CREATE INDEX命令终止。但是,即使那样,索引也可能无法立即用于查询:在最坏的情况下,只要存在早于索引构建 开始的事务,就不能使用该索引。 使用create index concurrently创建索引,主要分为三个阶段,扫描两次TABLE。 create index concurrently idx_b_2 on b (id); 阶段如下: 1、开启事务1,拿到当前snapshot1。 2、扫描B表前,等待所有修改过B表(写入、删除、更新)的事务结束。 3、扫描B表,并建立索引。 4、结束事务1。 5、开启事务2,拿到当前snapshot2。 6、再次扫描B表前,等待所有修改过B表(写入、删除、更新)的事务结束。 7、在snapshot2之后启动的事务对B表执行的DML,会修改这个idx_b_2的索引。 8、再次扫描B表,更新索引。(从TUPLE中可以拿到版本号,在snapshot1到snapshot2之间变更的记录,将其合并到索引) 9、上一步更新索引结束后,等待事务2之前开启的持有snapshot的事务结束。 10、结束索引创建。索引可见。
postgresql create index concurrently过程描述
来源:这里教程网
时间:2026-03-14 20:15:14
作者:
编辑推荐:
- postgresql create index concurrently过程描述03-14
- 获取表的ddl03-14
- PostgreSQL PSQL tips03-14
- PostGreSql12.6的备份恢复03-14
- 初识PostGresql03-14
- PostGreSql 12.6 的流复制(CentOS)03-14
- PostgreSQL插件汇总03-14
- PostgreSql数据库的备份和恢复03-14
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- TBase-开源版本安装部署(超详细)
TBase-开源版本安装部署(超详细)
26-03-14 - PostgreSQL高可用:多主复制解决方案
PostgreSQL高可用:多主复制解决方案
26-03-14 - PG和MySQL详细的一些特性对比
PG和MySQL详细的一些特性对比
26-03-14 - Redash中文版以PostgreSQL为例设置用户权限
Redash中文版以PostgreSQL为例设置用户权限
26-03-14 - postgresql:pgbench基准性能测试
postgresql:pgbench基准性能测试
26-03-14 - PostgreSQL email list:nvm wal buffer
PostgreSQL email list:nvm wal buffer
26-03-14 - RockyLinux sg命令详解(以其他组身份安全执行命令的完整教程)
RockyLinux sg命令详解(以其他组身份安全执行命令的完整教程)
26-03-14 - PostgreSQL:表
PostgreSQL:表
26-03-14 - PostgreSQL:锁
PostgreSQL:锁
26-03-14 - PostgreSQL TPROC-C基准测试:PostgreSQL 12与PostgreSQL 13性能对比
