PostgreSQL 10.0 preview 功能增强 - 新增数十个IO等待事件监控

简介:

标签

PostgreSQL , 10.0 , 等待事件 , IO


背景

PostgreSQL 10.0新增了数十个IO等待事件,描述系统调用的等待。

Hi All,  

Attached is the patch, which extend the existing wait event infrastructure  
to  
implement the wait events for the disk I/O. Basically pg_stat_activity's  
wait  
event information to show data about disk I/O as well as IPC primitives.  

Implementation details:  

- Added PG_WAIT_IO to pgstat.h and a new enum WaitEventIO  
- Added a wait_event_info argument to FileRead, FileWrite, FilePrefetch,  
FileWriteback, FileSync, and FileTruncate. Set this wait event just before  
performing the file system operation and clear it just after.  
- Pass down an appropriate wait event from  caller of any of those  
functions.  
- Also set and clear a wait event around standalone calls to read(),  
write(), fsync() in other parts of the system.  
- Added documentation for all newly added wait event.  

Open issue:  
- Might missed few standalone calls to read(), write(), etc which need  
to pass the wait_event_info.  

Thanks to my colleague Robert Haas for his help in design.  

Please let me know your thought, and thanks for reading.  

Thanks,  
Rushabh Lathia  
www.EnterpriseDB.com  

IO等待事件如下

 /* ----------  
+ * Wait Events - IO  
+ *  
+ * Use this category when a process is waiting for a IO.  
+ * ----------  
+ */  
+typedef enum  
+{  
+   WAIT_EVENT_READ_DATA_BLOCK,  
+   WAIT_EVENT_WRITE_DATA_BLOCK,  
+   WAIT_EVENT_SYNC_DATA_BLOCK,  
+   WAIT_EVENT_EXTEND_DATA_BLOCK,  
+   WAIT_EVENT_FLUSH_DATA_BLOCK,  
+   WAIT_EVENT_PREFETCH_DATA_BLOCK,  
+   WAIT_EVENT_WRITE_REWRITE_DATA_BLOCK,  
+   WAIT_EVENT_SYNC_REWRITE_DATA_BLOCK,  
+   WAIT_EVENT_TRUNCATE_RELATION_DATA_BLOCKS,  
+   WAIT_EVENT_SYNC_RELATION,  
+   WAIT_EVENT_SYNC_IMMED_RELATION,  
+   WAIT_EVENT_READ_BUFFILE,  
+   WAIT_EVENT_WRITE_BUFFILE,  
+   /* Wait event for XLOG */  
+   WAIT_EVENT_READ_XLOG,  
+   WAIT_EVENT_READ_COPY_XLOG,  
+   WAIT_EVENT_WRITE_XLOG,  
+   WAIT_EVENT_WRITE_INIT_XLOG_FILE,  
+   WAIT_EVENT_WRITE_COPY_XLOG_FILE,  
+   WAIT_EVENT_WRITE_BOOTSTRAP_XLOG,  
+   WAIT_EVENT_SYNC_INIT_XLOG_FILE,  
+   WAIT_EVENT_SYNC_COPY_XLOG_FILE,  
+   WAIT_EVENT_SYNC_BOOTSTRAP_XLOG,  
+   WAIT_EVENT_SYNC_ASSIGN_XLOG_SYNC_METHOD,  
+   /* Wait event for CONTROL_FILE */  
+   WAIT_EVENT_WRITE_CONTROL_FILE,  
+   WAIT_EVENT_WRITE_UPDATE_CONTROL_FILE,  
+   WAIT_EVENT_SYNC_WRITE_CONTROL_FILE,  
+   WAIT_EVENT_SYNC_UPDATE_CONTROL_FILE,  
+   WAIT_EVENT_READ_CONTROL_FILE,  
+   /* Wait event for REORDER BUFFER */  
+   WAIT_EVENT_READ_REORDER_BUFFER,  
+   WAIT_EVENT_WRITE_REORDER_BUFFER,  
+   /* Wait event for LOGICAL MAPPING */  
+   WAIT_EVENT_READ_APPLY_LOGICAL_MAPPING,  
+   WAIT_EVENT_WRITE_LOGICAL_MAPPING_REWRITE,  
+   WAIT_EVENT_SYNC_LOGICAL_MAPPING_REWRITE,  
+   WAIT_EVENT_SYNC_LOGICAL_MAPPING_REWRITE_HEAP,  
+   WAIT_EVENT_TRUNCATE_LOGICAL_MAPPING_REWRITE,  
+   /* Wait event for SNAPBUILD */  
+   WAIT_EVENT_WRITE_SNAPBUILD_SERIALIZE,  
+   WAIT_EVENT_READ_SNAPBUILD_RESTORE,  
+   WAIT_EVENT_SYNC_SNAPBUILD_SERIALIZE,  
+   /* Wait event for SNRU */  
+   WAIT_EVENT_READ_SLRU_PAGE,  
+   WAIT_EVENT_WRITE_SLRU_PAGE,  
+   WAIT_EVENT_SYNC_SLRU_FLUSH,  
+   WAIT_EVENT_SYNC_SLRU_WRITE_PAGE,  
+   /* Wait event for TIMELINE HISTORY */  
+   WAIT_EVENT_READ_TIMELINE_HISTORY_WALSENDER,  
+   WAIT_EVENT_READ_TIMELINE_HISTORY_WRITE,  
+   WAIT_EVENT_WRITE_TIMELINE_HISTORY,  
+   WAIT_EVENT_WRITE_TIMELINE_HISTORY_FILE,  
+   WAIT_EVENT_SYNC_TIMELINE_HISTORY_WRITE,  
+   WAIT_EVENT_SYNC_TIMELINE_HISTORY_FILE,  
+   /* Wait event for TWOPHASE FILE */  
+   WAIT_EVENT_READ_TWOPHASE_FILE,  
+   WAIT_EVENT_WRITE_RECREATE_TWOPHASE_FILE,  
+   WAIT_EVENT_SYNC_RECREATE_TWOPHASE_FILE,  
+   /* Wait event for SYSLOGGER */  
+   WAIT_EVENT_READ_SYSLOGGER_FILE,  
+   WAIT_EVENT_WRITE_SYSLOGGER_FILE,  
+   /* Wait event for REPLSLOT */  
+   WAIT_EVENT_READ_RESTORE_REPLSLOT,  
+   WAIT_EVENT_WRITE_REPLSLOT,  
+   WAIT_EVENT_SYNC_RESTORE_REPLSLOT,  
+   WAIT_EVENT_SYNC_SAVE_REPLSLOT,  
+   /* Wait event for copydir */  
+   WAIT_EVENT_READ_COPY_FILE,  
+   WAIT_EVENT_WRITE_COPY_FILE,  
+   /* Wait event RELMAP FILE */  
+   WAIT_EVENT_READ_LOAD_RELMAP_FILE,  
+   WAIT_EVENT_WRITE_RELMAP_FILE,  
+   WAIT_EVENT_SYNC_WRITE_RELMAP_FILE,  
+   /* Wait event for LOCK FILE */  
+   WAIT_EVENT_READ_CREATE_LOCK_FILE,  
+   WAIT_EVENT_READ_ADDTODATEDIR_LOCK_FILE,  
+   WAIT_EVENT_READ_RECHECKDATADIR_LOCK_FILE,  
+   WAIT_EVENT_WRITE_CREATE_LOCK_FILE,  
+   WAIT_EVENT_WRITE_ADDTODATEDIR_LOCK_FILE,  
+   WAIT_EVENT_SYNC_ADDTODATEDIR_LOCK_FILE,  
+   WAIT_EVENT_SYNC_CREATE_LOCK_FILE  
+} WaitEventIO;  

对于判断系统瓶颈,又多了一个有力信息。

这个patch的讨论,详见邮件组,本文末尾URL。

PostgreSQL社区的作风非常严谨,一个patch可能在邮件组中讨论几个月甚至几年,根据大家的意见反复的修正,patch合并到master已经非常成熟,所以PostgreSQL的稳定性也是远近闻名的。

参考

https://commitfest.postgresql.org/13/975/

https://www.postgresql.org/message-id/flat/CAGPqQf0LsYHXREPAZqYGVkDqHSyjf=KsD=k0GTVPAuzyThh-VQ@mail.gmail.com#CAGPqQf0LsYHXREPAZqYGVkDqHSyjf=KsD=k0GTVPAuzyThh-VQ@mail.gmail.com

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
存储 传感器 数据可视化
【软件设计师备考 专题 】IO接口的功能、类型和特性
【软件设计师备考 专题 】IO接口的功能、类型和特性
677 1
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
存储 监控 关系型数据库
监控 PostgreSQL 的性能指标
监控 PostgreSQL 的性能指标
685 3
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
Ubuntu Linux
内核实验(九):添加IO驱动的阻塞读写功能
本文通过修改内核模块代码,介绍了如何在Linux内核中为IO驱动添加阻塞读写功能,使用等待队列和条件唤醒机制来实现读写操作的阻塞和非阻塞模式,并在Qemu虚拟机上进行了编译、部署和测试。
164 0
|
移动开发 前端开发 JavaScript
uniapp中IO模块(管理本地文件系统)的常用功能封装
uniapp中IO模块(管理本地文件系统)的常用功能封装
1953 1
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
221 7
|
前端开发
t-io websocket的聊天功能学习记录(二)
t-io websocket的聊天功能学习记录(二)
249 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版
  • 推荐镜像

    更多