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.mzph.cn/news/172881.shtml

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

相关文章

HarmonyOS开发者工具DevEco Studio-汉化

HarmonyOS DevEco Studio 简介 下载安装及汉化 打开开发者工具 安装语言包重启 然后设置页搜索“chinese”,选中中文语言包,点击后面的install; 或者 汉化按照IDEA的汉法风格,需要安装插件重启就可以汉化,步骤为&…

在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT

原创/朱季谦 本文分成两部分,包括【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】。 无论是在【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】,两个方式都需要魔法访问,否则是无法正常使用的,即…

Linux uname命令教程:如何打印linux操作系统名称和硬件的基本信息(附实例教程和注意事项)

Linux uname命令介绍 uname命令是一个在Linux中常用的命令行工具,用于打印有关操作系统名称和系统硬件的基本信息。uname这个名字来源于"UNIX name"。它最常用于确定处理器架构,系统主机名和系统上运行的内核版本。 Linux uname命令适用的Li…

基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目

演示视频: 基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringM…

Python---函数的数据---拆包的应用案例(两个变量值互换,*args, **kwargs调用时传递参数用法)

案例: 使用至少3种方式交换两个变量的值 第一种方式:引入一个临时变量 c1 10 c2 2# 引入临时变量temp temp c2 c2 c1 c1 tempprint(c1, c2) 第二种方式:使用加法与减法运算交换两个变量的值(不需要引入临时变量&#xff09…

python--获取每张切片的不同PEF区间值的百分比

在全直径数字岩心中,如何获取每张切片的不同PEF区间值的百分比? import os import datetime from PIL import Image import numpy as np import csv import easygui as gclass Table(object):def __init__(self, table_data_path):self.table_data_path…

ClickHouse中的物化视图

技术主题 技术原理 物化视图(Materialized View)是一种预先计算并缓存结果的视图,存储在磁盘上自动更新,空间换时间的思路。物化视图是一种优化技术,本质上就是为了加速查询操作,降低系统负载&#xff0c…

5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)

一、说明: 在进行项目开发过程中,会涉及子项目/子模块的问题 Qt中使用TEMPLATE subdirs添加多个子项目;子项目可以单独编译生成可执行文件(exe)或者动态链接库(dll)等,供其他模块…

C#学习-9课时

P11 IF判断(上) P11 IF判断(中 ) bool→true or false; 为:变量赋值 为:等于(判断) !为:≠ 优先级:大于 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin…

论文笔记——FasterNet

为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。 为了实现更快的网络,作者重新回顾了FLOPs的运算符,并证明了如此低的FLOPS主要是由…

路径规划之D*算法

系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之A*算法 路径规划之D *算法 路径规划之D*算法 系列文章目录前言一、D*算法1.1 起源1.2 思想1.3 阶段1.4 个人理解1.5 应用 前言 之前说过A是目前应用最广泛的寻路算法,但是A算法存…

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

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

【古诗生成AI实战】之一——实战项目总览

[1] 总览 【古诗生成AI实战】系列共五篇文章: 【古诗生成AI实战】之一——实战项目总览   【古诗生成AI实战】之二——项目架构设计   【古诗生成AI实战】之三——任务加载器与预处理器   【古诗生成AI实战】之四——模型包装器与模型的训练   【古诗生成AI…

【双指针】三数之和

三数之和 在做这道题之前,建议建议先将两数之和做完再做,提升更大~ 文章目录 三数之和题目描述算法原理解法一解法二思路如下:处理细节问题: 代码编写Java代码编写C代码编写 15. 三数之和 - 力扣(LeetCode&#xff0…

knife4j集合化postman

knife4j集合化postman 01 knife4j的介绍 基于 JavaMVC的集成框架swagger的进一步强化,在原有通过注释就能生成文档的前身swagger-bootstrap-ui之上,增加了postman的测试功能,优化了文档的UI界面,在测试api接口的方面有了极大的进…

香橙派5 RK3588 yolov5模型转换rknn及部署踩坑全记录 orangepi 5

零、写在前面 由于距离写这篇文章过去很久,有的部分,官方已更新,请多结合其他人的看,并多琢磨、讨论~ 另外打个小广告:博客 https://blog.vrxiaojie.top/ 欢迎大家前来做客玩耍,提出问题~~ 以后的文章都会…

笔记(三)maxflow push relabel与图像分割

笔记(三)maxflow push relabel与图像分割 1. Push-Relabel算法思想2.Push-Relabel算法原理示意图3.Push-Relabel算法具体实例4. push relabel与图割 1. Push-Relabel算法思想 对于一个网络流图: 该算法直观可以这样理解,先在源节点处加入充足…

【经验分享】开发问题记录总结(持续更新)

目录 工具开发 界面类继承某自定义界面类时,出现布局混乱或者所有控件集中在左上角? 在继承自定义界面之后,以诸如 on_xxx_clicked() 模式设计的槽函数失效了? 使用pugi接口取出文本数据后,为什么该变量无法进行字符串比较&…

Flask WTForms 表单插件的使用

在Web应用中,表单处理是一个基本而常见的任务。Python的WTForms库通过提供表单的结构、验证和渲染等功能,简化了表单的处理流程。与此同时,Flask的扩展Flask-WTF更进一步地整合了WTForms,为开发者提供了更便捷、灵活的表单处理方式…

【STM32单片机】简易计算器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用动态数码管模块、矩阵按键、蜂鸣器模块等。 主要功能: 系统运行后,数码管默认显示0,输入对应的操作数进行四则运…