当前位置:网站首页>一文读懂数仓中的pg_stat
一文读懂数仓中的pg_stat
2022-07-07 17:59:00 【华为云开发者联盟】
摘要: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_updatedpg_stat_get_local_tuples_insertedpg_stat_get_local_tuples_hot_updatedpg_stat_get_local_tuples_deletedpg_stat_get_local_tuples_changedpg_stat_get_local_live_tuplespg_stat_get_local_last_autovacuum_timepg_stat_get_local_last_autoanalyze_timepg_stat_get_local_dead_tuplespg_stat_get_local_autovacuum_countpg_stat_get_local_autoanalyze_countpg_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时被自动记录,不需要人工进行维护。
边栏推荐
- 力扣 1790. 仅执行一次字符串交换能否使两个字符串相等
- 力扣 1232.缀点成线
- 九章云极DataCanvas公司摘获「第五届数字金融创新大赛」最高荣誉!
- Detailed explanation of Flink parallelism and slot
- R语言ggplot2可视化:使用ggpubr包的ggecdf函数可视化分组经验累积密度分布函数曲线、linetype参数指定不同分组曲线的线型
- 干货分享|DevExpress v22.1原版帮助文档下载集合
- pom. XML configuration file label: differences between dependencies and dependencymanagement
- R language ggplot2 visualization: use the ggqqplot function of ggpubr package to visualize the QQ graph (Quantitative quantitative plot)
- Equals method
- Cloud 组件发展升级
猜你喜欢
PMP practice once a day | don't get lost in the exam -7.7
【STL】vector
开源OA开发平台:合同管理使用手册
使用高斯Redis实现二级索引
LeetCode力扣(剑指offer 36-39)36. 二叉搜索树与双向链表37. 序列化二叉树38. 字符串的排列39. 数组中出现次数超过一半的数字
Interpretation of transpose convolution theory (input-output size analysis)
PMP對工作有益嗎?怎麼選擇靠譜平臺讓備考更省心省力!!!
8 CAS
力扣 2319. 判断矩阵是否是一个 X 矩阵
数据孤岛是企业数字化转型遇到的第一道险关
随机推荐
谷歌seo外链Backlinks研究工具推荐
openEuler 资源利用率提升之道 01:概论
力扣 599. 两个列表的最小索引总和
Leetcode force buckle (Sword finger offer 36-39) 36 Binary search tree and bidirectional linked list 37 Serialize binary tree 38 Arrangement of strings 39 Numbers that appear more than half of the tim
ant desgin 多选
Automatic classification of defective photovoltaic module cells in electroluminescence images-論文閱讀筆記
转置卷积理论解释(输入输出大小分析)
R language ggplot2 visualization: use the ggstripchart function of ggpubr package to visualize the dot strip plot, set the position parameter, and configure the separation degree of different grouped
vulnhub之Funfox2
[confluence] JVM memory adjustment
Compiler optimization (4): inductive variables
Notes...
一锅乱炖,npm、yarn cnpm常用命令合集
torch. nn. functional. Pad (input, pad, mode= 'constant', value=none) record
The DBSCAN function of FPC package of R language performs density clustering analysis on data, checks the clustering labels of all samples, and the table function calculates the two-dimensional contin
Flink并行度和Slot详解
AD域组策略管理
Le PGR est - il utile au travail? Comment choisir une plate - forme fiable pour économiser le cœur et la main - d'œuvre lors de la préparation de l'examen!!!
Cuda版本不一致,编译apex报错
Cloud 组件发展升级