PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables

PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables

pg_stat_all_tables视图中记录有analyze信息,比如何时做的analyze、表元组个数(活元组、死元组)等。重启后发现该视图中表的统计信息重置不见了,发生了什么?

1、pg_stat_all_tables

先理解下该视图,该视图定义如下。从视图定义可以看到相关统计信息都是通过一系列函数获取的:

yzs=# \d+ pg_stat_all_tables视图 "pg_catalog.pg_stat_all_tables"栏位         |           类型           | 校对规则 | 可空的 | 预设 | 存储  | 描述
---------------------+--------------------------+----------+--------+------+-------+------relid               | oid                      |          |        |      | plain |schemaname          | name                     |          |        |      | plain |relname             | name                     |          |        |      | plain |seq_scan            | bigint                   |          |        |      | plain |seq_tup_read        | bigint                   |          |        |      | plain |idx_scan            | bigint                   |          |        |      | plain |idx_tup_fetch       | bigint                   |          |        |      | plain |n_tup_ins           | bigint                   |          |        |      | plain |n_tup_upd           | bigint                   |          |        |      | plain |n_tup_del           | bigint                   |          |        |      | plain |n_tup_hot_upd       | bigint                   |          |        |      | plain |n_live_tup          | bigint                   |          |        |      | plain |n_dead_tup          | bigint                   |          |        |      | plain |n_mod_since_analyze | bigint                   |          |        |      | plain |last_vacuum         | timestamp with time zone |          |        |      | plain |last_autovacuum     | timestamp with time zone |          |        |      | plain |last_analyze        | timestamp with time zone |          |        |      | plain |last_autoanalyze    | timestamp with time zone |          |        |      | plain |vacuum_count        | bigint                   |          |        |      | plain |autovacuum_count    | bigint                   |          |        |      | plain |analyze_count       | bigint                   |          |        |      | plain |autoanalyze_count   | bigint                   |          |        |      | plain |
视图定义:SELECT c.oid AS relid,n.nspname AS schemaname,c.relname,pg_stat_get_numscans(c.oid) AS seq_scan,pg_stat_get_tuples_returned(c.oid) AS seq_tup_read,sum(pg_stat_get_numscans(i.indexrelid))::bigint AS idx_scan,sum(pg_stat_get_tuples_fetched(i.indexrelid))::bigint + pg_stat_get_tuples_fetched(c.oid) AS idx_tup_fetch,pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins,pg_stat_get_tuples_updated(c.oid) AS n_tup_upd,pg_stat_get_tuples_deleted(c.oid) AS n_tup_del,pg_stat_get_tuples_hot_updated(c.oid) AS n_tup_hot_upd,pg_stat_get_live_tuples(c.oid) AS n_live_tup,pg_stat_get_dead_tuples(c.oid) AS n_dead_tup,pg_stat_get_mod_since_analyze(c.oid) AS n_mod_since_analyze,pg_stat_get_last_vacuum_time(c.oid) AS last_vacuum,pg_stat_get_last_autovacuum_time(c.oid) AS last_autovacuum,pg_stat_get_last_analyze_time(c.oid) AS last_analyze,pg_stat_get_last_autoanalyze_time(c.oid) AS last_autoanalyze,pg_stat_get_vacuum_count(c.oid) AS vacuum_count,pg_stat_get_autovacuum_count(c.oid) AS autovacuum_count,pg_stat_get_analyze_count(c.oid) AS analyze_count,pg_stat_get_autoanalyze_count(c.oid) AS autoanalyze_countFROM pg_class cLEFT JOIN pg_index i ON c.oid = i.indrelidLEFT JOIN pg_namespace n ON n.oid = c.relnamespaceWHERE c.relkind = ANY (ARRAY['r'::"char", 't'::"char", 'm'::"char"])GROUP BY c.oid, n.nspname, c.relname;

我们以n_live_tup这一列为例,看下这个统计信息来自哪里。需要梳理下pg_stat_get_live_tuples函数:可以看到统计信息来自pg_stat_tmp/global.stat(由配置项pgstat_temp_directory控制,默认pg_stat_tmp)

b7af19428a960f8c4bf2a9873e0e4dcd.png

2、正常关闭服务

关闭服务前,统计信息文件位于pg_stat_tmp:

246f0a99db1d41f025180e3ac68e8b45.png

bd152ea5bd298804f4c8e4899ebb7e47.png

关闭服务后:统计信息文件移动到了pg_stat

ad56af9eb0241a5cf9f518c9f8bf328a.png

fd7d8020467c0fcd7bbc38b070389a64.png

3、再次正常启动服务

发现统计信息文件又移动到了,pg_stat_tmp。此时查看pg_stat_all_tables视图,发现统计信息是存在的:

80134335aa18f5cfb9dc3e1c528101af.png

为什么重启后统计信息并没有重置呢?

经分析,在崩溃重启恢复时,会将pg_stat_tmp和pg_stat目录都进行重置,此后重启成功后,因没有统计信息文件,就导致pg_stat_all_tables视图中的信息为空了

97a66742b315410ecf381577331e0725.png

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构实验】树(一)构建二叉查找树(BST)

文章目录 1. 引言2. 二叉查找树3. 实验内容3.1 实验题目(一)输入要求(二)输出要求 3.2 算法实现1. 数据结构2. 全局变量3. 中序遍历函数InOrder4. 二叉查找树的构建函数T5. 主函数 3.3 代码整合 4. 实验结果 1. 引言 二叉查找树&a…

python之静态服务器程序开发

文章目录 Python静态Web服务器开发Web静态服务器初识搭建Python自带的静态Web服务器静态Web服务器返回固定页面数据静态Web服务器返回指定页面数据静态Web服务器多任务版静态Web服务器面向对象开发静态Web服务器命令行启动动态绑定端口号 Python静态Web服务器开发 Web静态服务…

Java多态:多态多态,多么变态

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、重写1、重写的规则2、重写与重载的区别 二、多态1、多态的概念2、多态的实现3、向上转移和向下转型Ⅰ、向上转型Ⅱ、向下转…

Error PostCSS plugin autoprefixer requires PostCSS 8

文章目录 一、情况一二、情况二三、总结 在启动 vue项目时,突然控制台报错: Error: PostCSS plugin autoprefixer requires PostCSS 8。然后依次出现下面几种情况,依次解决完,项目就可以正常启动了 一、情况一 error in ./src/…

C++ STL-----容器

STL容器就是将运用最广泛的一些数据结构实现出来 常用的数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表 等 这些容器分为序列式容器和关联式容器两种: 序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。 关联式容器:二叉树结构&…

AIGC原理:扩散模型diffusion综述一:面向视觉计算的扩散模型研究进展

论文地址:State of the Art on Diffusion Models for Visual Computing 👉 贴一幅SGM(Score-based Generative Model)的原因是宋飏博士将他2019年提出的SMLD模型和2020年Jonathan Ho提出的DDPM采用SDE进行一统这两大极为相似的生成…

(2023码蹄杯)省赛(初赛)第三场真题(原题)(题解+AC代码)

题目1&#xff1a;MC0227堆煤球 码题集OJ-堆煤球 (matiji.net) 思路&#xff1a; 1.i从l枚举到r,i是8的倍数就跳过&#xff0c;i不是8的倍数就用等差数列求和公式i(1i)/2,最后累加到答案中即可 AC_Code:C #include<bits/stdc.h> using namespace std;int main( ) {in…

深度学习第二天:RNN循环神经网络

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 介绍 记忆功能对比展现 任务描述 导入库 处理数据 前馈神经网络 循环神经网络 编译与训练模型 模型预测 可能的问题 梯度消失 梯…

spring-framework-5.2.25.RELEASE源码环境搭建

环境准备 spring-framework-5.2.25.RELEASEIntelliJ IDEA 2022.3.1java version “11.0.20” 2023-07-18 LTSGradle 5.6.4java version “1.8.0_301” 下载spring-framework-5.2.25.RELEASE源码 git clone https://gitee.com/QQ952051088/spring.git cd spring gradlew buil…

文件批量改名方法:文件自动批量重命名,提升文件管理效率

在日常工作中随着工作时间的推移&#xff0c;在文件数量日益增长的情况下&#xff0c;会在电脑中积累大量的文件。如果文件名混乱无序&#xff0c;查找和识别重要文件将变得非常困难。这不仅会浪费大量的时间和精力&#xff0c;还可能导致重要文件的丢失或混乱。文件批量改名可…

cmake install接口常用方式介绍

cmake install接口常用方式介绍 1 Synopsis2 Introduction2.1 DESTINATION <dir>2.2 PERMISSIONS <permission>...2.3 CONFIGURATIONS <config>...2.4 COMPONENT <component>2.5 EXCLUDE_FROM_ALL2.6 RENAME <name>2.7 OPTIONAL 3 Signatures4 E…

西安数字孪生赋能工业制造,加速推进制造业数字化转型

西安数字孪生、5G、工业物联网、工业互联网等新一代信息通信技术与工业制造业经济深度融合&#xff0c;通过对人、机、物、系统等全面连接&#xff0c;构建覆盖全产业链、全价值链的全新制造和服务体系&#xff0c;为工业乃至产业数字化、网络化、智能化发展提供实现途径&#…