一文读懂数仓中的pg_stat
摘要:GaussDB(DWS)在SQL执行过程中,会记录表增删改查相关的运行时统计信息,并在事务提交或回滚后记录到共享的内存中。这些信息可以通过 “pg_stat_all_tables视图” 查询,也可以通过下面函数进行查询。
本文分享自华为云社区《一文读懂pgstat》,作者: leapdb 。
GaussDB(DWS)在SQL执行过程中,会记录表增删改查相关的运行时统计信息,并在事务提交或回滚后记录到共享的内存中。
这些信息可以通过 “pg_stat_all_tables视图” 查询,也可以通过下面函数进行查询。
pg_stat_get_tuples_inserted --表累积insert条数
pg_stat_get_tuples_updated --表累积update条数
pg_stat_get_tuples_deleted --表累积delete条数
pg_stat_get_tuples_changed --表自上次analyze以来,修改的条数
pg_stat_get_last_analyze_time --查询最近一次analyze时间
因此,根据共享内存中 "表自上次analyze以来修改过的条数" 是否超过一定阈值,就可以判定是否需要做analyze了。
1. 事务中如何记录统计信息
每个session有一个PgStat_TableStatus内存结构,当前事务访问过的每个表占用一个。
其中包含每一层子事务的统计信息,用结构体PgStat_TableXactStatus描述。这里记录了当前子事务增删改查的各种信息。
pg_stat_get_xact_numscans --当前事务在当前表上,启动顺序扫描的次数
pg_stat_get_xact_tuples_returned --当前事务在当前表上,顺序扫描抓取的可见元组条数。
pg_stat_get_xact_tuples_fetched --当前事务在当前表上,抓取的可见元组条数。
pg_stat_get_xact_tuples_inserted --当前事务在当前表上,插入条数
pg_stat_get_xact_tuples_deleted --当前事务在当前表上,删除条数
pg_stat_get_xact_tuples_updated --当前事务在当前表上,更新条数
pg_stat_get_xact_tuples_hot_updated --当前事务在当前表上,HOT更新条数
pg_stat_get_xact_blocks_fetched --当前事务在当前表上,选中的页面数
pg_stat_get_xact_blocks_hit --当前事务在当前表上,扫描过的页面数
pg_stat_get_xact_function_calls --当前事务在当前函数上,调用次数
pg_stat_get_xact_function_total_time --当前事务在当前函数上,所有调用的总执行时间
pg_stat_get_xact_function_self_time --当前事务在当前函数上,上次调用一次的执行时间
pg_stat_get_xact_partition_tuples_inserted --当前事务在当前表分区上,插入条数
pg_stat_get_xact_partition_tuples_deleted --当前事务在当前表分区上,删除条数
pg_stat_get_xact_partition_tuples_updated --当前事务在当前表分区上,更新条数
pg_stat_get_xact_partition_tuples_hot_updated --当前事务在当前表分区上,HOT更新条数
事务提交时会把当前表,所有子事务中的信息汇总,并转储到pgstat中。
2. 事务外如何记录统计信息
事务提交时将事务中的执行信息通过UDP报文发送给PgCollector后台线程,由其记录到统一的内存中,并在集群正常停止时转储到物理文件pg_stat_tmp/pgstat.stat中。
- 实例级信息,PgStat_GlobalStats
- 库级信息,PgStat_StatDBEntry
- 表级信息,其内存结构PgStat_StatTabEntry
--实例级信息
pg_stat_get_bgwriter_timed_checkpoints --后台写进程开启定时检查点的次数
pg_stat_get_bgwriter_requested_checkpoints --后台写进程开启基于后端请求的检查点的次数
pg_stat_get_checkpoint_write_time --最近一次checkpoint写页面的时间
pg_stat_get_checkpoint_sync_time --最近一次checkpoint同步页面的时间
pg_stat_get_bgwriter_buf_written_checkpoints --在检查点期间后台写进程写入的缓冲区数目。
pg_stat_get_bgwriter_buf_written_clean --为日常清理脏块,后台写进程写入的缓冲区数目。
pg_stat_get_bgwriter_maxwritten_clean --后台写进程停止清理扫描的时间,因为已经写入了更多的缓冲区(相比bgwriter_lru_maxpages参数声明的缓冲区数)。
pg_stat_get_buf_written_backend --后端进程写入的缓冲区数,因为它们需要分配一个新的缓冲区。
pg_stat_get_buf_fsync_backend --后台进程执行fsync的次数
pg_stat_get_buf_alloc --分配的总缓冲区数。
pg_stat_get_bgwriter_stat_reset_time --后台bgwriter线程的重置时间 --当前CN记录的库级信息
pg_stat_get_db_xact_commit --当前实例上指定数据库中已提交事务的数量。
pg_stat_get_db_xact_rollback --当前实例上指定数据库中回滚事务的数量。
pg_stat_get_db_blocks_fetched --当前实例上指定数据库中磁盘块抓取请求的数量。
pg_stat_get_db_blocks_hit --当前实例上指定数据库在缓冲区中找到的请求磁盘块的数量。
pg_stat_get_db_tuples_returned --当前实例上指定数据库返回的元祖数量。
pg_stat_get_db_tuples_fetched --当前实例上指定数据库中读取的元组数量。
pg_stat_get_db_tuples_inserted --当前实例上指定数据库中插入的元组数量。
pg_stat_get_db_tuples_updated --当前实例上指定数据库中更新的元组数量。
pg_stat_get_db_tuples_deleted --当前实例上指定数据库中删除的元组数量。
pg_stat_get_db_conflict_all --当前实例上指定数据库中发生冲突恢复的次数。
pg_stat_get_db_conflict_lock --集群中所有CN和DN上指定数据库锁冲突的总数。在DN上执行该函数,返回当前实例上指定数据库中锁冲突数量。
pg_stat_get_db_deadlocks --当前实例上指定数据库中死锁的数量。
pg_stat_get_db_temp_files --当前实例上指定数据库中创建临时文件的个数。
pg_stat_get_db_temp_bytes --当前实例上指定数据库中创建临时文件的字节数。
pg_stat_get_db_blk_read_time --当前实例上指定数据库中读数据块所用的时间。
pg_stat_get_db_blk_write_time --当前实例上指定数据库中写数据块所用的时间。 --整个集群记录的库级信息
pg_stat_get_db_total_xact_commit --在CN上执行该函数,返回集群中所有CN上指定数据库中已提交事务的总数。在DN上执行该函数,返回当前实例上指定数据库中已提交事务的数量。
pg_stat_get_db_total_xact_rollback --在CN上执行该函数,返回集群中所有CN上指定数据库中回滚事务的总数。在DN上执行该函数,返回当前实例上指定数据库中回滚事务的数量。
pg_stat_get_db_total_blocks_fetched --在CN上执行该函数,返回集群中所有DN上指定数据库中磁盘块抓取请求的总数。在DN上执行该函数,返回当前实例上指定数据库中磁盘块抓取请求的数量。
pg_stat_get_db_total_blocks_hit --在CN上执行该函数,返回集群中所有DN上指定数据库在缓冲区中找到的请求磁盘块的总数。在DN上执行该函数,返回当前实例上指定数据库在缓冲区中找到的请求磁盘块的数量。
pg_stat_get_db_total_tuples_returned --在CN上执行该函数,返回集群中所有DN上指定数据库返回的元组总数。在DN上执行该函数,返回当前实例上指定数据库返回的元组数量。
pg_stat_get_db_total_tuples_fetched --在CN上执行该函数,返回集群中所有DN上指定数据库读取的元组总数。在DN上执行该函数,返回当前实例上指定数据库读取的元组数量。
pg_stat_get_db_total_tuples_inserted --在CN上执行该函数,返回集群中所有DN上指定数据库插入的元组总数。在DN上执行该函数,返回当前实例上指定数据库插入的元组数量。
pg_stat_get_db_total_tuples_updated --在CN上执行该函数,返回集群中所有DN上指定数据库更新的元组总数。在DN上执行该函数,返回当前实例上指定数据库更新的元组数量。
pg_stat_get_db_total_tuples_deleted --在CN上执行该函数,返回集群中所有DN上指定数据库删除的元组总数。在DN上执行该函数,返回当前实例上指定数据库删除的元组数量。
pg_stat_get_db_total_conflict_all --在CN上执行该函数,返回集群中所有CN和DN上指定数据库发生冲突恢复的总次数。在DN上执行该函数,返回当前实例上指定数据库中发生冲突恢复的次数。
pg_stat_get_db_total_temp_files --在CN上执行该函数,返回集群中所有DN上指定数据库中创建临时文件的总个数。在DN上执行该函数,返回当前实例上指定数据库中创建临时文件的个数。
pg_stat_get_db_total_temp_bytes --在CN上执行该函数,返回集群中所有DN上指定数据库中创建临时文件的总字节数。在DN上执行该函数,返回当前实例上指定数据库中创建临时文件的字节数。
pg_stat_get_db_total_deadlocks --集群中所有CN和DN上指定数据库死锁的总数。在DN上执行该函数,返回当前实例上指定数据库中死锁的数量。
pg_stat_get_db_total_blk_read_time --在CN上执行该函数,返回集群中所有DN上指定数据库中读数据块所用的总时间。在DN上执行该函数,返回当前实例上指定数据库中读数据块所用的时间。
pg_stat_get_db_total_blk_write_time --在CN上执行该函数,返回集群中所有DN上指定数据库中写数据块所用的总时间。在DN上执行该函数,返回当前实例上指定数据库中写数据块所用的时间。 --表级信息
pg_stat_get_numscans --当前表上,启动顺序扫描的次数
pg_stat_get_tuples_returned --当前表上,顺序扫描抓取的可见元组条数。
pg_stat_get_tuples_fetched --当前表上,抓取的可见元组条数。
pg_stat_get_tuples_inserted --当前表上,插入条数
pg_stat_get_tuples_deleted --当前表上,删除条数
pg_stat_get_tuples_updated --当前表上,更新条数
pg_stat_get_tuples_hot_updated --当前表上,HOT更新条数
pg_stat_get_blocks_fetched --当前表上,选中的页面数
pg_stat_get_blocks_hit --当前表上,扫描过的页面数
pg_stat_get_function_calls --当前函数上,调用次数
pg_stat_get_function_total_time --当前函数上,所有调用的总执行时间
pg_stat_get_function_self_time --当前函数上,上次调用一次的执行时间
pg_stat_get_partition_tuples_inserted --当前表分区上,插入条数
pg_stat_get_partition_tuples_deleted --当前表分区上,删除条数
pg_stat_get_partition_tuples_updated --当前表分区上,更新条数
pg_stat_get_partition_tuples_hot_updated --当前表分区上,HOT更新条数
pg_stat_get_tuples_changed --当前表上自上一次analyze的历史累积变化量
pg_stat_get_partition_tuples_changed --当前表分区上自上一次analyze的历史累积变化量
pg_stat_get_partition_live_tuples --当前表分区上可见元组数
pg_stat_get_partition_dead_tuples --当前表分区上删除元组数
pg_stat_get_live_tuples --当前表上可见元组数
pg_stat_get_last_vacuum_time --当前表上最近一次vacuum的时间
pg_stat_get_last_data_changed_time --当前表上最近一次数据修改时间
pg_stat_get_last_autovacuum_time --当前表上最近一次autovacuum时间
pg_stat_get_last_autoanalyze_time --当前表上最近一次autoanalyze时间
pg_stat_get_last_analyze_time --当前表上最近一次手动analyze时间 --local表示当前节点的信息
pg_stat_get_local_tuples_updated
pg_stat_get_local_tuples_inserted
pg_stat_get_local_tuples_hot_updated
pg_stat_get_local_tuples_deleted
pg_stat_get_local_tuples_changed
pg_stat_get_local_live_tuples
pg_stat_get_local_last_autovacuum_time
pg_stat_get_local_last_autoanalyze_time
pg_stat_get_local_dead_tuples
pg_stat_get_local_autovacuum_count
pg_stat_get_local_autoanalyze_count
pg_stat_get_local_analyze_status
函数信息,PgStat_StatFuncEntry
pg_stat_get_function_calls --函数已被调用次数。
pg_stat_get_function_total_time --该函数花费的总挂钟时间,以微秒为单位。包括花费在此函数调用上的时间。
pg_stat_get_function_self_time --在当前事务中仅花费在此函数上的时间。不包括花费在调用函数上的时间。
3. 单节点的统计信息
每个CN和DN节点,各自记录自己的统计信息。可以通过上面的函数分别查看。
另外,CN在增删改的SQL执行结束时,将各个DN的返回条数信息记录到CN自己的pgstat结构中,构成了全局的统计信息。
4. 集群全局的统计信息
各个CN各自维护自己的pgstat信息,因此若想知道集群全局的,还需要向所有CN查询并汇总。
5. 统计信息的生命周期
pgstat中的统计信息属于运行时信息,这些信息处于事务外,不严格保证数据一致性。
在数据库异常停止时会清空所有数据,正常停止会保留数据。
6. 统计信息的维护
这些信息在执行SQL时被自动记录,不需要人工进行维护。
一文读懂数仓中的pg_stat的更多相关文章
- 一文读懂神经网络训练中的Batch Size,Epoch,Iteration
一文读懂神经网络训练中的Batch Size,Epoch,Iteration 作为在各种神经网络训练时都无法避免的几个名词,本文将全面解析他们的含义和关系. 1. Batch Size 释义:批大小, ...
- 一文读懂高性能网络编程中的I/O模型
1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...
- 大数据篇:一文读懂@数据仓库(PPT文字版)
大数据篇:一文读懂@数据仓库 1 网络词汇总结 1.1 数据中台 数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念. 数据中台是一套可持续"让企业的数据用起 ...
- 一文读懂HTTP/2及HTTP/3特性
摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...
- 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...
- [转帖]一文读懂 HTTP/2
一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...
- [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路 http://www.52im.net/thread-1709-1-2.html 本文原作者阮一峰,作者博客:r ...
- 一文读懂clickhouse集群监控
更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...
- Java8 函数式【1】:一文读懂逆变
Java8 函数式[1]:一文读懂逆变 禁止转载 pure function 协变 逆变 Java8 引入了函数式接口,从此方法传参可以传递函数了,有人说: 不就是传一个方法吗,语法糖! lambda ...
随机推荐
- pgpool-II 4.3 中文手册 - 入门教程
本章解释了如何开始使用 Pgpool-II. 安装 在本节中,我们假设您已经安装了 Pgpool-II 与 PostgreSQL 集群. 你的第一个复制(Replication) 在本节中,我们将解释 ...
- k8s入门之Service(六)
将一组pod公开为网络服务,通过service代理,可以实现负载均衡 一.ClusterIP 此方式只能在集群内访问 1.使用命令暴露已存在的pod (1)继续使用前面章节的案例,查看名称为nginx ...
- MySQL 回表
MySQL 回表 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁. 一.简述 回表,顾名思义就是回到表中,也就是先通过普通索引扫描出数据所在的行,再通过行主键ID 取出索引中未包含的数据.所以回表的产 ...
- ValidForm5.3.2 忽略表单项校验详解
ValidForm 官方文档 项目的需求是这样的:一个checkbox,一个input,选中checkbox的时候,需要校验input,取消选中的时候,不要校验input. <input typ ...
- redis的zset数据结构:跳表
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 广州这边封闭式管理好久了,今天终于周末可以出去溜溜了 什么是zset z ...
- XCTF练习题---CRYPTO---Broadcast
XCTF练习题---CRYPTO---Broadcast flag:flag{fa0f8335-ae80-448e-a329-6fb69048aae4} 解题步骤: 1.观察题目,下载附件 2.下载完 ...
- [笔记] $f(i)$ 为 $k$ 次多项式,$\sum_{i=0}^nf(i)\cdot q^i$ 的 $O(k\log k)$ 求法
\(f(i)\) 为 \(k\) 次多项式,\(\sum_{i=0}^nf(i)\cdot q^i\) 的 \(O(k\log k)\) 求法 令 \(S(n)=\sum_{i=0}^{n-1}f(i ...
- 团队Arpha6
队名:观光队 链接 组长博客 作业博客 组员实践情况 黄恒杰 - **过去两天完成了哪些任务 ** - 文字/口头描述 地图功能增加.博客 - 展示GitHub当日代码/文档签入记录 - 接下来的计划 ...
- css实现元素淡入淡出
@-webkit-keyframes fadeIn { 0% { opacity: 0; /*初始状态 透明度为0*/ } 50% { opacity: 0; /*中间状态 透明度为0*/ } 100 ...
- C# .NET ML.NET 机器学习 图像分类
一. 准备工作 IDE是 VS2019.先下载好"resnet_v2_50_299.meta"这个文件,放入"C:\Users\jk\AppData\Local\Temp ...