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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 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_

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
29天前
|
关系型数据库 分布式数据库 数据库
PolarDB常见问题之加了索引但是查询没有使用如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
2月前
|
SQL 算法 关系型数据库
PolarDB-X的XPlan索引选择
对于数据库来说,正确的选择索引是基本的要求,选错索引轻则导致查询缓慢,重则导致数据库整体不可用。PolarDB-X存在多种不同的索引,局部索引、全局索引、列存索引、归档表索引。本文主要介绍一种CN上的局部索引算法:XPlan索引选择。
125754 13
PolarDB-X的XPlan索引选择
|
3月前
|
关系型数据库 定位技术 索引
在关系型数据库中,常见的索引种类包括哪些
在关系型数据库中,常见的索引种类包括哪些
486 0
|
6月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版重磅推出的列存索引(
PolarDB MySQL版重磅推出的列存索引(
338 1
|
6月前
|
关系型数据库 Go 数据库
《提高查询速度:PostgreSQL索引实用指南》
《提高查询速度:PostgreSQL索引实用指南》
355 0
|
6月前
|
SQL 缓存 关系型数据库
PolarDB-X 混沌测试实践:如何衡量数据库索引选择能力
随着PolarDB分布式版的不断演进,功能不断完善,新的特性不断增多,整体架构扩大的同时带来了测试链路长,出现问题前难发现,出现问题后难排查等等问题。原有的测试框架已经难以支撑实际场景的复杂模拟测试。因此,我们实现了一个基于业务场景面向优化器索引选择的混沌查询实验室,本文之后简称为CEST(complex environment simulation test)。
|
7月前
|
关系型数据库 分布式数据库 数据库
PolarDB for PostgreSQL 14:全局索引
PolarDB for PostgreSQL 14 相较于 PostgreSQL 14,提供了更多企业级数据库的特性。本实验将体验其中的全局索引功能。
754 0
|
7月前
|
弹性计算 关系型数据库 OLAP
AnalyticDB PostgreSQL版向量索引查询
本案例对比了传统查询和使用向量索引执行查询的执行时间,助您体验使用向量索引查询带来的高效和快捷。
778 0
|
7月前
|
弹性计算 监控 测试技术
基于Prometheus+Grafana的PolarDB-X监控体系
《PolarDB-X 动手实践》系列第十期,体验如何监控PolarDB-X集群。
421 1
|
7月前
|
存储 关系型数据库 数据库
PostgreSQL技术大讲堂 - 第28讲:索引内部结构
从零开始学PostgreSQL技术大讲堂 - 第28讲:索引内部结构
397 2