首页 > 数据库 >PostgreSQL 15 stats collector 在取消后是如何实现的原有功能的

PostgreSQL 15 stats collector 在取消后是如何实现的原有功能的

时间:2023-06-22 12:06:01浏览次数:94  
标签:stat stats pg DEBUG 15 pgstat collector


PostgreSQL 15 stats collector 在取消后是如何实现的原有功能的_UDP

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。

在POSTGRESQL 15 有一个重要的功能去掉了stats collector 在说为什么去掉这个stats collector 的问题前,我们先得弄清出stats collector 到底是一个什么功能。 

首先stats collector 并不是有些同学理解的对于表的 analyze,实际上这个功能统计了表和索引的访问情况,同时也跟踪每个表的行数以及表进行vacuum 和analyze的活动记录,另外在自己的进程中,还可以查看其他进程正在操作的情况,也是通过 stats collector来进行的。

统计信息的收集也有参数可以进行调整,如 track_counts, track_function, track_activities 等都可以打开会关闭,减少或增加统计信息收集的内容,增加或减少系统的负担。

那么与收集信息有关的部分存储在(部分VIEW 并不全)

pg_stat_activity

pg_stat_bgwriter

pg_stat_database

pg_stat_database_conflicts

pg_stat_replication

pg_stat_all_tables

pg_stat_sys_tables

pg_stat_user_tables

pg_stat_all_index

pg_stat_user_indexes

pg_statio_user_tables

pg_statio_sys_tables

pg_statio_all_indexes

pg_statio_user_indexes

通过下面的语句可以查看当前正在工作的
SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,
       pg_stat_get_backend_activity(s.backendid) AS current_query
    FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;

那么说了这么多,在PG15 中为什么要替换了这个功能,那么必然是有问题
才进行替换。
其中潜在的因素是
1 基于PG15 之前的需要收集的信息来自于每个backend 进程,而针对每
个进程的信息的收集不是一个容易完美实现的事情,
2 每个进程需要将信息发送给 stats collector 进程,发送的方式是通
过UDP的方式进行,但基于UDP的方式的路径并不是一个可靠的模式
其中会包含一些问题,如state statistics , stats collector 工作的情况,
autovacuum 工作捕捉的问题。
3  性能的消耗也是一个传统使用 stat statistics 的问题,如
我们可以从下图PG14中查看到,


DEBUG:   writing stats file "pg_stat_tmp/global.stat"
DEBUG:  writing stats file "pg_stat_tmp/db_0.stat"
DEBUG:  autovacuum: processing database "postgres"
DEBUG:  received inquiry for database 13881
DEBUG:  writing stats file "pg_stat_tmp/global.stat"
DEBUG:  writing stats file "pg_stat_tmp/db_13881.stat"
DEBUG:  writing stats file "pg_stat_tmp/db_0.stat"
相关的存储空间,来存储相关的数据的目录 (介于PG14)


基于这些问题,PG15 做出了绝大的改造,将原有在文件系统或者文件中
实现的state statistics 实现的方式转移到了 dynamic shared memory 中。
以前,统计数据收集器通过UDP接收统计数据更新,并通过定期将统计数
据写入临时文件来共享统计数据。这些文件可以达到几十兆字节,每秒
写入两次。
现在统计信息存储在共享内存中。变量编号对象的统计信息存储在dshash
散列表中(由动态共享内存支持)。固定编号的统计数据存储在普通共享内
存中。

* Each statistics kind is handled in a dedicated file:

  70  * - pgstat_archiver.c

  71  * - pgstat_bgwriter.c

  72  * - pgstat_checkpointer.c

  73  * - pgstat_database.c

  74  * - pgstat_function.c

  75  * - pgstat_io.c

  76  * - pgstat_relation.c

  77  * - pgstat_replslot.c

  78  * - pgstat_slru.c

  79  * - pgstat_subscription.c

  80  * - pgstat_wal.c

但是细心的读者可能发现,在POSTGRESQL15的环境中还存在pg_stat_tmp 目录的原因主要还是在于部分基于原有 POSTGRESQL 设计中的一些东西还需要使用这个目录,所以需要保留,而不是POSTGRESQL 本身还在需要这个目录。比如 pg_stat_statement 模块就还需要这个目录来存放文件。

但随着POSTGRESQL 的统计信息在内存中进行工作的情况,统计信息的及时性将被挑战,所以在POSTGRESQL 15 中新添加了一个新的参数,stats_fetch_consistency  这个参数主要的目的是在实现了新功能后,的数据被查询时的信息一致性,总体的值有 none , cache , snapshot, 我们建议使用默认值即可,如果性能有更高的要求,对于数据的准确性要求不高,则使用 none , 如果对于信息的要求性特别高,需要使用性能最差的snapshot

PostgreSQL 15 stats collector 在取消后是如何实现的原有功能的_数据库_02

但是在系统运作的过程中,难免会有系统异常,导致的系统崩溃,而在这样的情况下,统计信息在内存中并不能安全的全部刷新到我们的磁盘系统中,所以如果遇到系统的崩溃则内存中的统计信息会被抛弃掉。

PgStatsDSA Waiting for stats dynamic shared memory allocator access

PgStatsHash Waiting for stats shared memory hash table access

PgStatsData Waiting for shared memory stats data access

另外后续在POSTGRESQL 中出现的基于状态收集的部分的提示有以上三种,如果需要观察相关状态收集的部分,可以关注日志中相关的信息。

PostgreSQL 15 stats collector 在取消后是如何实现的原有功能的_共享内存_03

标签:stat,stats,pg,DEBUG,15,pgstat,collector
From: https://blog.51cto.com/u_14150796/6534548

相关文章

  • PostgreSQL 15 让多年被DISS的PG 安全画上圆满的句号
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。提起POSTGRESQL中的安全问题其中最容易被人Diss的最大BUG并不是autovacuum 之类的部分,排在首位的被DISS的最大的问题是安全的......
  • ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
    今天在批量伪造测试数据时,MySQL收到下面异常:ERROR1153(08S01):Gotapacketbiggerthan'max_allowed_packet'bytes。这是因为没有调整mysql的默认配置,默认最大只能处理16M的文件,而我要导入的伪造数据有50M的一个SQL。于是调整配置文件:/etc/my.cnf修改mysql的最大允许包大小......
  • 6轮面试辛苦拿到阿里Android开发offer,却从22k降到15k,在逗我?
    一小伙工作快3年了,拿到了阿里云Android开发岗位P6的offer,算HR面一起,加起来有6轮面试了,将近3个月的时间,1轮同级+1轮Android用人部门leader+1轮Android组leader+1轮项目CTO+1轮HR+1轮HRBP。一路上各种事件分发机制、自定义View、handler原理、多线程、hashmap、手写算法、......
  • 字节跳动总监封神之作《Android11.0最新Framework解析》,1595页,限时免费下载高清PDF文
    Framework始终穿插在App整个研发生命周期中,不管是从0到1的建立阶段,还是从1到N打磨阶段,都离不开Framework。成为一名AndroidFramework高手,就会成为招聘中非常稀缺的人才,可以成为你的敲门砖。很多同学都表示在面试时必问Framework相关问题。因为目前大公司的app开发都要基......
  • 字节总监用了半个月整理出的1595页《Android11.0 最新Framework解析》高清PDF开发下载
    作为过来人,发现很多学习者和实践者都在AndroidFramework上面临着很多的困扰,比如:工作场景中遇到难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、思路的指引以及工具支持;能力修炼中,缺乏互联网项目这一实践环境,对Fram......
  • 写给女*友的中级Android面试秘籍(含详细答案,15k级别)
    前言本篇文章,献给我家女朋友,祝她在杭州找一个965的好公司!因为Android面试考点众多,而网上各个知识点的博客文章又太多,看的眼花缭乱……所以便整理了一下常见考点的精华回答,尽量覆盖该知识点的下容易被面试到的所有内容。面试题都整理成了PDF文档,包含Java基础、Android基础、UI控件篇......
  • 配置AWStats的一些参考资料
    参考资料:AWStatslogfileanalyzer6.6Documentationhttp://www.aiview.com/cgi-bin/awstats/docs/awstats_faq.html#OLDLOG强大的日志分析工具AWStatshttp://yahoon.blog.51cto.com/13184/40392AWStats简介:Apache/WindowsIIS的日志分析工具的下载,安装,配置样例和使用(含......
  • 15-6 进程前后执行和并发执行
    一、信号发送killkill-1无需关闭进程而让其重新配置kill-2终止正在运行的进程kill-3相当与ctrl+\kill-9强制杀死正在运行的进程kill-15终止正在运行的进程,默认信号vim/etc/httpd/conf/httpd.conf配置文件echo'<h1>liujinxi</h1>'>/var/www/html/index.html......
  • 浅析GeoServer CVE-2023-25157 SQL注入
    简介GeoServer是一个开源的地图服务器,它是遵循OpenGISWeb服务器规范的J2EE实现,通过它可以方便的将地图数据发布为地图服务,实现地理空间数据在用户之间的共享。影响版本geoserver<2.18.72.19.0<=geoserver<2.19.72.20.0<=geoserver<2.20.72.21.0<=geoserver<2.21.42.22.0<=......
  • 1595. 连通两组点的最小成本 (Hard)
    问题描述1595.连通两组点的最小成本(Hard)给你两组点,其中第一组中有size₁个点,第二组中有size₂个点,且size₁>=size₂。任意两点间的连接成本cost由大小为size₁xsize₂矩阵给出,其中cost[i][j]是第一组中的点i和第二组中的点j的连接成本。如果两个组中......