PostgreSQL 12: 新增 pg_stat_progress_create_index 视图监控索引创建进度-阿里云开发者社区

开发者社区> francs.tan> 正文

PostgreSQL 12: 新增 pg_stat_progress_create_index 视图监控索引创建进度

简介: PostgreSQL 12 版本之前,对PostgreSQL大表创建索引时是一个比较痛苦的过程,创建索引过程中无法得知索引创建进度,PostgreSQL 12 在运维监控功能方面得到增强,新增 pg_stat_progress_create_index 视图可以监控索引的创建进度,本文简单演示。
+关注继续查看

PostgreSQL 12 版本之前,对PostgreSQL大表创建索引时是一个比较痛苦的过程,创建索引过程中无法得知索引创建进度,PostgreSQL 12 在运维监控功能方面得到增强,新增 pg_stat_progress_create_index 视图可以监控索引的创建进度,本文简单演示。

CREATE INDEXREINDEX 创建索引都可以通过 pg_stat_progress_create_index 视图监控。

发行说明

Report progress of CREATE INDEX and REINDEX operations (álvaro Herrera, Peter Eisentraut)

Progress is reported in the pg_stat_progress_create_index system view

环境准备

创建测试表并插入 1000 万数据 ,如下:

mydb=> CREATE TABLE t1 (id int4,name text,ctime timestamp without time zone default clock_timestamp());
CREATE TABLE

mydb=> INSERT INTO t1 (id,name ) SELECT n, n || '_CREATE_INDEX' FROM generate_series(1,10000000) n;
INSERT 0 10000000

监控索引创建进度

开启会话1,创建索引,如下:

mydb=> CREATE INDEX idx_t1_ctime ON t1 USING BTREE(ctime);
命令未结束

注意: 会话1未结束,在创建索引过程中。

开启会话2,查询 pg_stat_progress_create_index 视图,监控索引创建进度,如下:

mydb=> SELECT * FROM pg_stat_progress_create_index ;
-[ RECORD 1 ]------+-------------------------------
pid                | 20539
datid              | 16387
datname            | mydb
relid              | 16527
index_relid        | 0
command            | CREATE INDEX
phase              | building index: scanning table
lockers_total      | 0
lockers_done       | 0
current_locker_pid | 0
blocks_total       | 82353
blocks_done        | 52293
tuples_total       | 0
tuples_done        | 0
partitions_total   | 0
partitions_done    | 0

mydb=> SELECT * FROM pg_stat_progress_create_index ;
-[ RECORD 1 ]------+---------------------------------------
pid                | 20539
datid              | 16387
datname            | mydb
relid              | 16527
index_relid        | 0
command            | CREATE INDEX
phase              | building index: loading tuples in tree
lockers_total      | 0
lockers_done       | 0
current_locker_pid | 0
blocks_total       | 0
blocks_done        | 0
tuples_total       | 10000000
tuples_done        | 1173763
partitions_total   | 0
partitions_done    | 0

每条索引创建进程在 pg_stat_progress_create_index 视图中对应一条记录,几个主要的字段解释如下:

  • pid: 索引创建进程号
  • relid: 表的OID
  • index_relid: 索引的OID
  • phase: 索引创建的当前处理阶段
  • current_locker_pid: 阻塞索引创建的进程号
  • blocks_total: 当前处理阶段需要处理的数据块
  • lockers_done: 当前处理阶段已完成的数据块
  • tuples_total: 当前处理阶段需要处理的记录数
  • tuples_done: 当前处理阶段已完成的记录数
  • partitions_total: 当在分区表上创建索引,当前处理阶段需要处理的总分区数
  • partitions_done: 当在分区表上创建索引,当前处理阶段已处理的总分区数。

索引创建的时间主要花在 'building index: scanning table' 和'building index: loading tuples in tree' 阶段,因此,根据 blocks_total、blocks_done、tuples_total、blocks_done 很容易判断索引创建进度。

总结

本文演示了 CREATE INDEX 命令执行过程中,通过查询 pg_stat_progress_create_index 视图监控索引创建进度,对于大表创建索引场景非常有用,这个功能太棒了!

参考

本文转自 https://postgres.fun/20190716163500.html

新书推荐

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

链接:https://item.jd.com/12405774.html
_5_PostgreSQL_

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 28 章 监控数据库活动_28.3. 查看锁
28.3. 查看锁 监控数据库活动的另外一个有用的工具是pg_locks系统表。这样就允许数据库管理员查看在锁管理器里面未解决的锁的信息。例如,这个功能可以被用于: 查看当前所有未解决的锁、在一个特定数据库中的关系上所有的锁、在一个特定关系上所有的锁,或者由一个特定PostgreSQL会话持有的所有的锁。
962 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 28 章 监控数据库活动_28.1. 标准 Unix 工具
28.1. 标准 Unix 工具 在大部分 Unix 平台上,PostgreSQL会修改由ps报告的命令标题,这样个体服务器进程可以被标识。一个显示样例是 $ ps auxww | grep ^postgres postgres 15551 0.
1142 0
ArcGIS Pro体验02——启动、创建工程
所有的猜测都是眼睛看到的,自己想到的,可能不一定正确哈。 任务界面十分简洁,左上是创建新工程,右上是账户名称,左上是关于。 可以直接创建一个工程,Blank应该是无类型,最后保存再选择;Global Scene.aptx,应该与ArcGlobal相关;Local Scene.aptx,应该与Arc Scene相关;Map.aptx,应该与ArcMap相关。
845 0
sql创建临时表或视图增加 自增列
select row_number()over(order by [createtime] asc) ida,* from [Opro].[dbo].[DailyReport2010])
745 0
PostgreSQL 12: 新增 pg_stat_progress_create_index 视图监控索引创建进度
PostgreSQL 12 版本之前,对PostgreSQL大表创建索引时是一个比较痛苦的过程,创建索引过程中无法得知索引创建进度,PostgreSQL 12 在运维监控功能方面得到增强,新增 pg_stat_progress_create_index 视图可以监控索引的创建进度,本文简单演示。
1341 0
+关注
francs.tan
致力于 PostgreSQL 中文技术分享,博客 https://postgres.fun
23
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载