【PostgreSQL17新特性之-新增系统视图】

news2025/5/18 1:15:07

PostgreSQL-17-beta1版本目前已经发布了,每个版本随着功能的增加和一些相关优化,会对部分视图进行调整,以及增加新的视图。

postgres<17beta1>(ConnAs[postgres]:PID[21362] 2024-05-28/13:19:58)=# select version();
+------------------------------------------------------------------------------------------------------------+
|                                                  version                                                   |
+------------------------------------------------------------------------------------------------------------+
| PostgreSQL 17beta1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit |
+------------------------------------------------------------------------------------------------------------+
(1 row)

postgres<17beta1>(ConnAs[postgres]:PID[21362] 2024-05-28/13:20:02)=# select * from pg_control_system();
+--------------------+--------------------+---------------------+--------------------------+
| pg_control_version | catalog_version_no |  system_identifier  | pg_control_last_modified |
+--------------------+--------------------+---------------------+--------------------------+
|               1300 |          202405161 | 7373892286583727603 | 2024-05-28 11:57:26+08   |
+--------------------+--------------------+---------------------+--------------------------+
(1 row)

目前的PostgreSQL-17-beta1新版本新增了两个视图,分别为pg_wait_events和pg_stat_checkpointer。pg_stat_checkpointer视图包含检查点信息,pg_wait_events 主要包含等待事件的描述。

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/13:37:39)=# \d pg_stat_checkpointer
                      View "pg_catalog.pg_stat_checkpointer"
+---------------------+--------------------------+-----------+----------+---------+
|       Column        |           Type           | Collation | Nullable | Default |
+---------------------+--------------------------+-----------+----------+---------+
| num_timed           | bigint                   |           |          |         |
| num_requested       | bigint                   |           |          |         |
| restartpoints_timed | bigint                   |           |          |         |
| restartpoints_req   | bigint                   |           |          |         |
| restartpoints_done  | bigint                   |           |          |         |
| write_time          | double precision         |           |          |         |
| sync_time           | double precision         |           |          |         |
| buffers_written     | bigint                   |           |          |         |
| stats_reset         | timestamp with time zone |           |          |         |
+---------------------+--------------------------+-----------+----------+---------+

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/13:37:42)=# \d pg_wait_events
           View "pg_catalog.pg_wait_events"
+-------------+------+-----------+----------+---------+
|   Column    | Type | Collation | Nullable | Default |
+-------------+------+-----------+----------+---------+
| type        | text |           |          |         |
| name        | text |           |          |         |
| description | text |           |          |         |
+-------------+------+-----------+----------+---------+

image.png

一、pg_stat_checkpointer视图

1.pg_stat_checkpointer视图解析

在之前的版本,检查点的统计信息通常在pg_stat_bgwriter里查看,但是PostgreSQL-17-beta1新版本把pg_stat_bgwriter的一些列删除掉了,并用pg_stat_checkpointer中的列做了对应取代。

具体的替代关系如下:
pg_stat_bgwriter.checkpoints_timed -> pg_stat_checkpointer.num_timed
pg_stat_bgwriter.checkpoints_req -> pg_stat_checkpointer.num_requested
pg_stat_bgwriter.checkpoint_write_time -> pg_stat_checkpointer.write_time
pg_stat_bgwriter.checkpoint_sync_time -> pg_stat_checkpointer.sync_time
pg_stat_bgwriter.buffers_checkpoint -> pg_stat_checkpointer.buffers_written

postgres<16.1>(ConnAs[postgres]:PID[4639] 2024-05-29/11:03:33)=# \d pg_stat_bgwriter 
                         View "pg_catalog.pg_stat_bgwriter"
+-----------------------+--------------------------+-----------+----------+---------+
|        Column         |           Type           | Collation | Nullable | Default |
+-----------------------+--------------------------+-----------+----------+---------+
| checkpoints_timed     | bigint                   |           |          |         |
| checkpoints_req       | bigint                   |           |          |         |
| checkpoint_write_time | double precision         |           |          |         |
| checkpoint_sync_time  | double precision         |           |          |         |
| buffers_checkpoint    | bigint                   |           |          |         |
| buffers_clean         | bigint                   |           |          |         |
| maxwritten_clean      | bigint                   |           |          |         |
| buffers_backend       | bigint                   |           |          |         |
| buffers_backend_fsync | bigint                   |           |          |         |
| buffers_alloc         | bigint                   |           |          |         |
| stats_reset           | timestamp with time zone |           |          |         |
+-----------------------+--------------------------+-----------+----------+---------+

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/13:37:47)=# \d pg_stat_bgwriter
                       View "pg_catalog.pg_stat_bgwriter"
+------------------+--------------------------+-----------+----------+---------+
|      Column      |           Type           | Collation | Nullable | Default |
+------------------+--------------------------+-----------+----------+---------+
| buffers_clean    | bigint                   |           |          |         |
| maxwritten_clean | bigint                   |           |          |         |
| buffers_alloc    | bigint                   |           |          |         |
| stats_reset      | timestamp with time zone |           |          |         |
+------------------+--------------------------+-----------+----------+---------+

新的视图 pg_stat_checkpointer最主要需要关注的是restartpoints_timed、restartpoints_req和restartpoints_done三列,最后一列显示实际进行了多少次restartpoint。需要注意的是备库的restartpoint不能比主库上的restartpoint更频繁。

postgres<17beta1>(ConnAs[postgres]:PID[21362] 2024-05-28/13:20:11)=# select * from pg_stat_checkpointer;
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
| num_timed | num_requested | restartpoints_timed | restartpoints_req | restartpoints_done | write_time | sync_time | buffers_written |          stats_reset          |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
|        18 |             1 |                   0 |                 0 |                  0 |          4 |         2 |              45 | 2024-05-28 11:48:07.339976+08 |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
(1 row)

postgres<17beta1>(ConnAs[postgres]:PID[21362] 2024-05-28/13:24:14)=# checkpoint;
CHECKPOINT
postgres<17beta1>(ConnAs[postgres]:PID[21362] 2024-05-28/13:24:17)=# select * from pg_stat_checkpointer;
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
| num_timed | num_requested | restartpoints_timed | restartpoints_req | restartpoints_done | write_time | sync_time | buffers_written |          stats_reset          |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
|        18 |             2 |                   0 |                 0 |                  0 |          6 |         3 |              45 | 2024-05-28 11:48:07.339976+08 |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
(1 row)

image.png

各列的具体含义如下所示

列类型描述
num_timed bigint已执行的计划检查点数量
num_requested bigint已执行的请求检查点的数量
restartpoints_timed bigint由于超时或尝试执行失败而计划的重新启动点数
restartpoints_req bigint请求的重启点数
restartpoints_done bigint已执行的重启点数
write_time double precision处理检查点和重启点(将文件写入磁盘)部分所花费的总时间(以毫秒为单位)
sync_time double precision处理检查点和重启点(文件同步到磁盘)部分所花费的总时间(以毫秒为单位)
buffers_written bigint检查点和重启点期间写入的缓冲区数
stats_reset timestamp with time zone这些统计数据上次重置的时间

如果想重置pg_stat_checkpointer视图里记录的统计数据,可以使用pg_stat_reset_shared()函数执行如下操作,

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/15:03:14)=# select * from pg_stat_checkpointer;
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
| num_timed | num_requested | restartpoints_timed | restartpoints_req | restartpoints_done | write_time | sync_time | buffers_written |          stats_reset          |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
|        37 |             2 |                   0 |                 0 |                  0 |          6 |         3 |              45 | 2024-05-28 11:48:07.339976+08 |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
(1 row)

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/15:03:22)=# SELECT pg_stat_reset_shared('checkpointer');
+----------------------+
| pg_stat_reset_shared |
+----------------------+
|                      |
+----------------------+
(1 row)

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/15:03:30)=# select * from pg_stat_checkpointer;
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
| num_timed | num_requested | restartpoints_timed | restartpoints_req | restartpoints_done | write_time | sync_time | buffers_written |          stats_reset          |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
|         0 |             0 |                   0 |                 0 |                  0 |          0 |         0 |               0 | 2024-05-28 15:03:30.770561+08 |
+-----------+---------------+---------------------+-------------------+--------------------+------------+-----------+-----------------+-------------------------------+
(1 row)

2.关于重启点(restartpoint)

restartpoint(重启点):重启点其实就是在recovery恢复期间执行的类似checkpoint的操作,此时它执行的是重启点,并不是一个新的检查点。主要做的工作是:服务器将其所有状态强制刷到磁盘,更新pg_control文件以指示已处理的WAL数据无需再次扫描,然后回收pg_wal目录中的任何旧WAL段文件。

一般备库使用的"checkpoint"就是和主库的checkpoint功能类似的restartpoint,备库的 checkpointer 进程会定期的做 restartpoint 进行刷脏,并记录一些位点,如果 crash 了直接从对应的位点开始向后进行 redo。

主库做了一个 checkpoint(非shutdown时的checkpoint)时,CreateCheckPoint()函数下的XLogInsert()函数会写一条 XLOG_CHECKPOINT_ONLINE类型日志记录。

void
CreateCheckPoint(int flags)
{
...
	/*
	 * Now insert the checkpoint record into XLOG.
	 */
	XLogBeginInsert();
	XLogRegisterData((char *) (&checkPoint), sizeof(checkPoint));
	recptr = XLogInsert(RM_XLOG_ID,
			    shutdown ? XLOG_CHECKPOINT_SHUTDOWN :
			    XLOG_CHECKPOINT_ONLINE);
	XLogFlush(recptr);
...
}

image.png

备机的startup进程在xlog_redo(XLogReaderState *record)函数中,会针对这种类型日志做日志回放,并在 RecoveryRestartPoint()函数中复制主库该 checkpoint 的相关位点信息到共享内存中,例如checkpoint 位点、redo point 位点等,这样检查指针就可以在下次执行重新启动点(restartpoint)时计算出来。

	/*
	 * Copy the checkpoint record to shared memory, so that checkpointer can
	 * work out the next time it wants to perform a restartpoint.
	 */
	SpinLockAcquire(&XLogCtl->info_lck);
	XLogCtl->lastCheckPointRecPtr = record->ReadRecPtr;
	XLogCtl->lastCheckPointEndPtr = record->EndRecPtr;
	XLogCtl->lastCheckPoint = *checkPoint;
	SpinLockRelease(&XLogCtl->info_lck);

image.png

restartpoint(重启点)的官方文档的相关描述如下:PostgreSQL: Documentation: 16: 30.5. WAL Configuration

image.png

意思是:在归档恢复或备机模式下,服务器定期执行重启点,这类似于正常操作中的检查点:服务器将其所有状态强制到磁盘,更新pg_control文件以指示已处理的WAL数据无需再次扫描,然后回收pg_wal目录中的任何旧WAL段文件。重新启动点的执行频率不能高于主检查点,因为重新启动点只能在检查点记录上执行。 如果自上次重新启动点以来至少经过了checkpoint_timeout秒,或者WAL大小即将超过max_wal_size,则当达到检查点记录时,将触发重新启动点。然而,由于对何时可以执行重新启动点的限制,在恢复过程中,通常会超过max_wal_size,最多超过一个检查点周期的wal。(无论如何,max_wal_size从来都不是一个硬性限制,所以应该始终留出足够的空间以避免磁盘空间不足。)

二、pg_wait_events视图

在之前的版本里,pg_stat_actvity里的wait_event_type和wait_event的列在官方文档里有解释,描述等待事件的相关工作,想获取详细的等待事件解释需要查官方文档,比较麻烦。
PostgreSQL: Documentation: devel: 27.2. The Cumulative Statistics System

PostgreSQL-17-beta1新版本增加了pg_wait_events视图,把等待事件的描述记录在视图里。

image.png

pg_wait_events包含三列,type,name以及description。分别是等待事件种类,等待事件名和解释。通过和pg_stat_activity关联,可以快速了解当前进程正在等待什么。进程现在在做什么。

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/14:52:09)=# SELECT a.pid, a.state, a.wait_event_type, a.wait_event, w.description
FROM pg_stat_activity a JOIN pg_wait_events w
     ON (a.wait_event_type = w.type AND a.wait_event = w.name)
WHERE a.backend_type = 'checkpointer' ;
+-------+-------+-----------------+------------------+----------------------------------------------+
|  pid  | state | wait_event_type |    wait_event    |                 description                  |
+-------+-------+-----------------+------------------+----------------------------------------------+
| 13893 |       | Activity        | CheckpointerMain | Waiting in main loop of checkpointer process |
+-------+-------+-----------------+------------------+----------------------------------------------+

image.png

目前这pg_wait_events这个视图里包含的等待事件种类和对应的等待事件数量如下图所示,总共有264种,使用下来比查文档方便了许多。

postgres<17beta1>(ConnAs[postgres]:PID[21590] 2024-05-28/14:47:02)=# select type, count(1) from pg_wait_events group by type order by count(1) desc;
+-----------+-------+
|   type    | count |
+-----------+-------+
| LWLock    |    81 |
| IO        |    77 |
| IPC       |    57 |
| Activity  |    16 |
| Lock      |    12 |
| Timeout   |    10 |
| Client    |     9 |
| BufferPin |     1 |
| Extension |     1 |
+-----------+-------+
(9 rows)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1716347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python之生成xmind

今天为啥要说这个呢&#xff0c;因为前几天做接口测试&#xff0c;还要写测试用例&#xff0c;我觉得麻烦&#xff0c;所以我就用了python里面xmind的插件。自动生成了测试用例&#xff0c;数据来源是json。 &#x1f366; 第一步安装 pip install xmind &#x1f366; 第二…

html+CSS部分基础运用9

项目1 参会注册表 1.设计参会注册表页面&#xff0c;效果如图9-1所示。 图9-1 参会注册表页面 项目2 设计《大学生暑期社会实践调查问卷》 1.设计“大学生暑期社会实践调查问卷”页面&#xff0c;如图9-2所示。 图9-2 大学生暑期社会调查表页面 2&#xff0e;调查表前导语的…

ECP5701 做为PD受电端取电sink芯片,可广泛应用在带锂电的终端设备上,例如电动工具,照明灯具,音箱设备,摄影设备,筋膜枪小家电等

随着科技的发展&#xff0c;USB-C接口逐渐成为手机、平板电脑、小型家电等新型电子设备的主流接口&#xff0c;相较于过去繁杂的传统接口&#xff0c;USB-C不仅简化了消费者的使用体验&#xff0c;也降低了制造商的生产成本。特别是随着PD协议的普及&#xff0c;Type-C接口因其…

yolov10 瑞芯微RKNN、地平线Horizon芯片部署、TensorRT部署,部署工程难度小、模型推理速度快

特别说明&#xff1a;参考官方开源的yolov10代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 yolov8、v9还没玩热乎&#xff0c;这不yolov10又来了&#xff0c;那么…

数据分析必备:一步步教你如何用Pandas做数据分析(11)

1、Pandas 自定义选项 Pandas 自定义选项操作实例 Pandas因为提供了API来自定义行为&#xff0c;所以被广泛使用。 自定义API中有五个相关功如下&#xff1a; get_option() set_option() reset_option() describe_option() option_context() 下面我们一起了解下这些方法。 1.…

5个免费下载音乐的网站,喜欢听什么就搜什么

以下5个音乐下载网站&#xff0c;中国人不骗中国人&#xff0c;全部免费。个个曲库丰富&#xff0c;喜欢听什么就搜什么&#xff0c;还能下载mp3格式&#xff0c;点赞收藏即刻拥有&#xff01; 1、MyFreeMP3 tools.liumingye.cn/music/ MyFreeMP3是一个提供音乐播放和下载服…

如何衡量安全阀检测的价格与价值?一文揭晓答案

安全阀作为工业设备中的重要组件&#xff0c;其性能的稳定性和可靠性直接影响着整个系统的安全运行。因此&#xff0c;对安全阀进行定期检测和维护显得尤为重要。 那么&#xff0c;安全阀检测一个需要多少钱呢&#xff1f; 在这篇文章中&#xff0c;佰德将从检测费用构成、市…

BPTT算法详解:深入探究循环神经网络(RNN)中的梯度计算【原理理解】

引言 在深度学习领域中&#xff0c;我们经常处理的是独立同分布&#xff08;i.i.d&#xff09;的数据&#xff0c;比如图像分类、文本生成等任务&#xff0c;其中每个样本之间相互独立。然而&#xff0c;在现实生活中&#xff0c;许多数据具有时序结构&#xff0c;例如语言模型…

jquery---ajax方法示例

ajax方法 $.ajax({name:value, name:value, ... }) ajax方法有一个参数&#xff0c;一定长度的对象&#xff0c;内部指定了ajax的请求地址和格式&#xff0c;方式等等&#xff0c;它可以有以下的属性和值 示例 这里展示了一个简单的get请求图片url的实例 let data; let url…

了解运维基础

一、运维概述 1、运维岗位的收入情况 2、运维的职位定义 什么是运维&#xff1f; 在技术人员之间&#xff0c;一致对运维有一个开玩笑的认知&#xff1a;运维就是修电脑的、装网线的、背锅的岗位。 其实不然&#xff0c;运维是一个非常广泛的定义&#xff0c;在不同的公司不同…

宏基因组分析流程(Metagenomic workflow)202405|持续更新

Logs 增加R包pctax内的一些帮助上游分析的小脚本&#xff08;2024.03.03&#xff09;增加Mmseqs2用于去冗余&#xff0c;基因聚类的速度非常快&#xff0c;且随序列量线性增长&#xff08;2024.03.12&#xff09;更新全文细节&#xff08;2024.05.29&#xff09; 注意&#x…

Altium Designer软件下载安装「专业PCB设计软件」Altium Designer安装包获取!

Altium Designer&#xff0c;这款软件凭借其全面的设计流程覆盖&#xff0c;从概念到实现&#xff0c;都能为电子工程师提供强大的支持。 在硬件设计方面&#xff0c;Altium Designer提供了丰富的元件库和灵活的布局选项&#xff0c;使得工程师能够轻松地进行电路设计&#xff…

万亿国债消防救援——北斗应急通讯设备类目推荐

近期&#xff0c;云贵川地区山火肆虐&#xff0c;山火大范围、远距离、独立密集地发生&#xff0c;给消防救援带来了巨大挑战。 消防应急工作是保障人民生命财产安全的重要环节&#xff0c;它涉及到预防火灾、及时应对火灾事故以及灾后恢复等多个方面。在应对火灾、事故和其他…

【旧文更新】【优秀课设】基于FPGA的Verilog HDL自动售货机

【旧文更新】基于FPGA的Verilog HDL自动售货机 文章目录 关于旧文新发FPGACortex-M架构SysTick系统定时器阻塞和非阻塞延时 附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换函…

数字化学校渠道的建造内容

数字化学校渠道的建造内容可以用阶段来区分&#xff1a; 1.网络硬件为主的建造 这一阶段首要重视的是学校网络的硬件基础建造&#xff0c;一起供给部分网络根本服务&#xff0c;与此一起&#xff0c;也进行部分信息使用内容的建造&#xff0c;如电子阅览室、归纳管理信息体系等…

CompletableFuture 异步与最佳实践

文章目录 CompletableFuture 异步-前言背景主要特性1. 异步任务执行2. 任务组合3. 异常处理4. 回调机制 最佳实践并行调用多个接口处理异常超时设置使用 Executor 自定义线程池总结 总结 CompletableFuture 异步-前言 在现代Java开发中&#xff0c;处理并发任务和异步编程已成…

Nginx配置及优化

Nginx配置及优化 前言nginx.conf拆分理解上线 最近在配置Nginx的时候&#xff0c;偶尔一些细致的理论有些模糊&#xff0c;配置起来费了点功夫&#xff0c;今天来详细写一下我个人的理解&#xff0c;文章参考了一些官网和其他优秀博主的文章http://t.csdnimg.cn/GbID9。 前言 …

[leetcode hot150]第二百三十六题,二叉树的最近公共祖先

题目&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个…

测试基础07:测试工作流程规范、进度同步与把控

课程大纲 1、迭代测试流程 2、测试流程 2.1、测试用例评审 目的&#xff1a;对齐产品需求理解&#xff0c;完善、优化测试场景。 参与方&#xff1a;项目、产品、开发、测试。 用例内容&#xff1a;冒烟用例&#xff08;主流程&#xff09; 功能用例。 2.2、冒烟测试 提测…

ADF: 获取Data Lake Storage上的文件列表并根据文件名删除文件

假设 Data Lake 上有个test的文件夹&#xff0c;有如下文件 目标&#xff1a;使用Azure Data Factory的Pipeline获取这个目录下的文件名列表&#xff0c;并删除掉以"ETC"开头的文件。 步骤&#xff1a; 1. 需要在Linked services中新建一个能连接到Data Lake的连接…