PostgreSQL - 查看表膨胀空间

目录

使用pgstattuple插件查看表膨胀空间

死元组&膨胀系数清理

查看表占用磁盘空间大小是如何组成的

什么是fms和vm?

什么是TOAST?

查看表和其关联的TOAST表的oid的关系

方法一

方法二

参考文档


使用pgstattuple插件查看表膨胀空间

select *,1.0 - tuple_len::numeric / table_len as bloat from pgstattuple('table_name');

table_len bigint

物理关系长度(以字节为单位)
tuple_count bigint存活元组数量
tuple_len bigint活动元组的总长度(以字节为单位)
tuple_percent float8存活元组的百分比
dead_tuple_count bigint死元组数量
dead_tuple_len bigint死元组的总长度(以字节为单位)
dead_tuple_percent float8死亡元组的百分比
free_space bigint总可用空间(以字节为单位)
free_percent float8可用空间百分比
bloat表膨胀系数

死元组&膨胀系数清理

  • 使用vacuum命令,可以清理死元组,但是膨胀系数不会降低。因为该命令不会将磁盘空间返回给操作系统,但是新的数据可以复用空间。
  • 使用vacuum full命令,可以降低膨胀系数。因为该命令会将磁盘空间返回给操作系统,但是会产生独立锁,导致清理期间表不可用。且清理期间磁盘使用空间最多会翻倍,因为操作是将有用的数据写到一个新的表里,结束后删除旧表,释放空间。

其他详细死元组&膨胀系数清理的信息,可以参考:postgresql磁盘空间清理

查看表占用磁盘空间大小是如何组成的

select pg_relation_size('table_name', 'main') as main, \pg_relation_size('table_name', 'fsm') as fsm, \pg_relation_size('table_name', 'vm') as vm, \pg_relation_size('table_name', 'init') as init, \pg_relation_size('table_name') as pg_relation_size, \pg_total_relation_size('toast_oid') as toast, \pg_table_size('table_name') as pg_table_size, \pg_indexes_size('table_name') as pg_indexes_size, \pg_total_relation_size('table_name') as pg_total_size;
mainfsmvminitpg_relation_sizetoastpg_table_sizepg_indexes_sizepg_total_size
31562310451277602816902758403156231045122504810496318214545408137802727424456017272832

关联关系:

  • main = pg_relation_size ;其实pg_relation_size('table_name')就是pg_relation_size('table_name', 'main')的简写
  • 表占空间的大小 = main + fsm + vm + init + toast = pg_table_size
  • 索引占空间的大小 = pg_indexes_size
  • 表真实占用磁盘空间 = 表占空间的大小 + 索引占空间的大小 = pg_table_size + pg_indexes_size

什么是fms和vm?

空闲空间映射(FSM) - free space maps 
每一个表和索引(除了哈希索引)都有一个空闲空间映射(FSM)来保持对关系中可用空间的跟踪;
它伴随着主关系数据被存储在一个独立的关系分支中,以关系的文件节点号加上一个_fsm后缀命名;

FSM文件是执行VACUUM操作时,或者是为了插入行而第一次查询FSM文件时才会创建;

可见性映射(VM) - visual map
每一个表都有一个可见性映射(VM)用来跟踪哪些页面只包含已知对所有活动事务可见的元组,它也跟踪哪些页面只包含未被冻结的元组;
它伴随着主关系数据被存储在一个独立的关系分支中,以该关系的文件节点号加上一个_vm后缀来命名。

VM文件中为每个数据块设置了一个标志位,用来标记数据块中是否存在需要清理的行。
有了这个文件后,通过VACUUM命令扫描这个 文件时,如果发现VM文件中这个数据块上的位表示该数据块没有需要清理的行,则会跳过对这个数据块的扫描,从而加快VACUUM清理的速度。

什么是TOAST?

TOAST(超尺寸属性存储技术-The Oversized-Attribute Storage Technique)。

PostgreSQL使用固定的页面尺寸(通常是8kB),并且不允许元组跨越多个额页面。因此不可能直接存储非常大的域值。为了克服这个限制,大的域值会被压缩并/或分解成多个物理行。这些处理对用户都是透明的,只是在大部分的后端代码上有一些小的影响。这个技术的昵称是TOAST(或者“切片面包之后的最好的东西”)。TOAST 机制也被用来提升内存中大型数据值的处理。

查看表和其关联的TOAST表的oid的关系

数据库表和TOAST表的信息都在pg_class表中

数据库表信息所在行记录了:表的oid,表名,表关联的TOAST表的oid

TOAST表信息所在的行记录了:TOAST表的iod,TOAST表的表名

方法一

一条语句直接导出表和其TOAST表的关联关系

SELECTc.relname AS "main_table",c.oid AS "main_table_oid",t.relname AS "toast_table",t.oid AS "toast_table_oid"
FROM pg_class c
JOIN pg_class t ON c.reltoastrelid = t.oid
WHERE c.relkind = 'r';

方法二

1.查询表、表oid,和其关联的TOAST表的oid

select oid,relname,reltoastrelid from pg_class where relname = 'table_name';

2.使用TOAST表的iod,查询TOAST表的信息

(其实一般情况下,有了TOAST表的oid就够用了)

select oid,relname from pg_class where oid = 'toast_iod';

参考文档

Pgsql表膨胀的产生及处理(oracle,postgres) - AI牛丝

pg_relation_size,pg_table_size,pg_indexes_size,pg_total_relation_size之间的关系-CSDN博客

PostgreSQL 之 FSM和VM的理解_vacuum命令通过扫描后缀为_fsm的文件可以加快vacuum进程-CSDN博客

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

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

相关文章

<Linux> 初识线程

目录 前言: 一、什么是线程 (一)基本概念 (二)线程理解 (三)线程与进程的关系 (四)简单实用线程 (五)重谈虚拟地址空间 1. 页表的大小 2…

检测虚拟机环境的常见技术

下面列出检测 VMware 虚拟机的常见技术&#xff1a; #include <iostream> #include <windows.h> #include <sysinfoapi.h> #include <comdef.h> #include <Wbemidl.h> #include <ShlObj.h> #include <LM.h> #include <TlHelp32.…

【C++】了解一下STL

个人主页 &#xff1a; zxctscl 如有转载请先通知 STL 1. 什么是STL2. STL的版本3. STL的六大组件4. STL的重要性5. 如何学习STL6. STL的缺陷 1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件…

Php和h5等静态文件的服务容器化部署(下)

一、接着上文 上文介绍了php/h5程序的部署过程&#xff0c;最后是通过slb把不同的服务暴露给外部。 本文试着把外部的配置交待清楚&#xff0c;包括&#xff1a; kong配置ingress配置 部署逻辑图见下&#xff1a; 总结&#xff1a; 去掉slb&#xff0c;引入ingress组件。…

蓝桥杯真题讲解:接龙序列

蓝桥杯真题讲解&#xff1a;接龙序列 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;接龙序列 二、暴力代码 // 暴力代码&#xff1a;DFS&#xff08;2^n&#xff09; #include<bits/stdc.h> #define endl \n #define deb(x) cout &…

零基础自学C语言|自定义类型:结构体

✈结构体类型的声明 前面我们在学习操作符的时候&#xff0c;已经学习了结构体的知识&#xff0c;这里稍微复习一下。 &#x1f680;结构体回顾 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 &#x1fa82;结构的声明 例如&a…

李彦宏:程序员职业将不复存在,会说话就能当程序员;ChatGPT 日耗电超 50 万度丨 RTE 开发者日报 Vol.161

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、…

中国社会科学院与美国杜兰大学金融管理硕士——二月二,抬头皆是惊喜

在繁忙的都市生活中&#xff0c;每个人都在为自己的未来打拼&#xff0c;寻找着属于自己的那片天空。二月二&#xff0c;龙抬头&#xff0c;象征着春天的到来&#xff0c;万物复苏。在这个特殊的日子里&#xff0c;对于那些追求学术与职业双重成就的人来说&#xff0c;&#xf…

AIGC——DreamTuner通过单张图片生成与该图片主题风格一致的新图像

简介 DreamTuner的能力在于从单个图像生成主体驱动的新通用方法&#xff0c;这意味着用户只需提供一张图片&#xff0c;DreamTuner就能帮助他们生成与原始图片在主题和风格上一致的新图像。 算法重要之处在于其通用性和个性化定制的能力。无论是需要根据特定主题或条件创建个…

【深度学习笔记】优化算法——学习率调度器

学习率调度器 &#x1f3f7;sec_scheduler 到目前为止&#xff0c;我们主要关注如何更新权重向量的优化算法&#xff0c;而不是它们的更新速率。 然而&#xff0c;调整学习率通常与实际算法同样重要&#xff0c;有如下几方面需要考虑&#xff1a; 首先&#xff0c;学习率的大…

cefsharp(winForm)调用js脚本,js脚本调用c#方法

本博文针对js-csharp交互(相互调用的应用) (一)、js调用c#方法 1.1 类名称:cs_js_obj public class cs_js_obj{//注意,js调用C#,不一定在主线程上调用的,需要用SynchronizationContext来切换到主线程//private System.Threading.SynchronizationContext context;//…

Elasticsearch 分享

一、Elasticsearch 基础介绍 ElasticSearch 是分布式实时搜索、实时分析、实时存储引擎&#xff0c;简称&#xff08;ES)&#xff0c; 成立于2012年&#xff0c;是一家来自荷兰的、开源的大数据搜索、分析服务提供商&#xff0c;为企业提供实时搜索、数据分析服务&#xff0c;…

AHU 汇编 实验四

实验名称&#xff1a;实验四 两个数的相乘 实验内容&#xff1a; 用子程序形式编写&#xff1a; A*B&#xff1a;从键盘输入a和b&#xff0c;计算A*B&#xff0c;其中乘法采用移位和累加完成 实验过程&#xff1a; 源代码&#xff1a; data segmentmul1 db 16,?,16 dup(?…

树莓派安装Nginx服务搭建web网站结合内网穿透实现公网访问本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

什么是高级编程语言?——跟老吕学Python编程

什么是高级编程语言&#xff1f;——跟老吕学Python编程 高级编程语言简介高级编程语言发展历程高级编程语言特点高级编程语言分类命令式语言函数式语言逻辑式语言面向对象语言 常见的高级编程语言及其特点和应用领域高级编程语言性能分析高级编程语言的工作方式 高级编程语言简…

GPT出现Too many requests in 1 hour. Try again later.

换节点 这个就不用多说了&#xff0c;你都可以上GPT帐号了&#xff0c;哈…… 清除cooki

平面纯弯梁单元Matlab有限元编程 |欧拉梁单元| 简支梁|悬臂梁|弯矩图 |变形图| Matlab源码 | 视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

容灾演练双月报|美创DRCC助力银行高效验证数据库高可用架构

了解更多灾备行业动态 守护数字化时代业务连续 目录 CONTENTS 01 灾备法规政策 02 热点安全事件 03 容灾演练典型案例 01 灾备法规政策 2月&#xff0c;工信部印发《工业领域数据安全能力提升实施方案&#xff08;2024—2026年&#xff09;》&#xff0c;要求到2026年…

专属你的时尚盛宴,尽在手机无人直播!

时尚&#xff0c;是一个永恒的话题。在这个充满活力的时代&#xff0c;时尚不仅仅是穿着打扮&#xff0c;更是一种生活态度&#xff0c;一种表达自我的方式。每个人都有自己独特的时尚理念&#xff0c;每个人都可以在时尚的世界里找到属于自己的一席之地。 手机无人直播&#…

鼠标在QTreeView、QTableView、QTableWidget项上移动,背景色改变

目录 1. 前言 2. 需求 3. 功能实现 3.1. 代码实现 3.2. 功能讲解 4. 附录 1. 前言 本博文用到了Qt的model/view framework框架,如果对Qt的“模型/视图/委托”框架不懂&#xff0c;本博文很难读懂。如果不懂这方面的知识&#xff0c;请在Qt Assistant 中输入Model/View…