postgres收缩工具两种工具的使用对比
postgres收缩工具安装和使用
第一章 需要使用插件处理膨胀的原因
Postgresql通过数据多版本实现MVCC,现象是删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的OLTP系统,会造成数据膨胀。
PG数据库本身有处理膨胀问题的vacuum工具,该工具有三种类型,具体如下:
| vacuum 表名字 | vacuum full 表名字 | autovacuum |
|---|---|---|
| 不能回收空间 | 可以回收空间 | |
| 运行时可以正常访问数据表(共享锁) | 运行时不允许访问数据表(排他锁) | |
| 执行效率高 | 执行效率低 | |
| 作用是把表中的dead tuples进行删除标记变成可以使用的状态,并没有真正的物理删除,并且会更新统计信息和相关系统表 | 作用是物理删除dead tuples,并且把释放的空间重新交给操作系统。 本质时生成一个新的数据文件,然后把原来的表的live tuples 存放到新的数据文件中 | 只是个监控作用是用来启动自动清理进程的,autovacuum,autovacuum worker,vacuum+analyze |
如果autovacuum清理速度赶不上dead元组产生速度,就会造成表膨胀。如表格所示,vacuum治标不治本,vacuum full会锁表,所以需要一种用最少的锁重新组织PG数据库中的表资源的工具,pg_repack或者pg_squeeze工具便可以实现
第二章:使用pg_repack
一 使用pg_repack的原理
1 总体思路:
新建一个文件,然后将老文件数据拷贝过来,然后进行文件切换,它不阻塞读写的秘诀就是新建文件和拷贝的过程是在线做的,在没有完成拷贝之前,原来的文件还是可以读写的,只有在切表那一瞬间有可能有影响。在线拷贝过程:源库的数据文件一直在变,所以表文件其实分为两部分,一部分是基础数据,一部分是增量数据,基础数据的拷贝就是正常的拷贝,增量数据是通过创建触发器来捕获在该表上的读写操作来实现的,待基础数据拷贝完后再将trigger捕获的增量sql进行应用,达到最终效果。
2 具体原理步骤如下:
对表执行全表repack:
-
创建一个记录表,用于记录原表中的记录的修改
-
在原表上创建一个触发器,记录插入、更新、和删除操作到日志表
-
创建一个新表,包含原表中的所有的记录
-
在新表上创建索引
-
将日志表中的变更应用到新表
-
使用system catalogs将原表和新表进行swap,包含索引和toast表
-
删除原先的表
对索引执行repack
-
使用concurrently创建新索引
-
将新的索引和老的索引进行swap
-
删除原先的索引
二 如何使用
1 安装
-
下载安装包:
https://pgxn.org/dist/pg_repack/
-
解压缩并编译
cp pg_repack-1.4.8.zip /home/postgressu - rootunzip pg_repack-1.4.8.zipcd pg_repack-1.4.8makemake install
- 创建拓展
psqlcreate extension pg_repack;
2 使用举例
postgres=# create table test(id int primary key,name varchar(255));
postgres=# insert into test select generate_series(1,50000000),'a';
postgres=# select * from pgstattuple('test');table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent
-----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+--------------181239808 | 5000000 | 150000000 | 82.76 | 0 | 0 | 0 | 620336 | 0.34
postgres=# \dt+ testList of relationsSchema | Name | Type | Owner | Size | Description
相关文章:
postgres收缩工具两种工具的使用对比
postgres收缩工具安装和使用 第一章 需要使用插件处理膨胀的原因 Postgresql通过数据多版本实现MVCC,现象是删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的OLTP系统,会造成数据膨胀。 PG数据库本身有处理膨胀问题的vacuum工…...
仿真入门——CST软件如何设置分布式计算的共享储存
在 CST Studio Suite 的分布式计算中,常有用户因为某台机器的网络问题丢失某个数据。这里介绍一种方法,可以在使用分布式计算或 MPI 计算时设置共享存储。在这种情况下,不涉及文件传输,所有文件操作都在共享文件的媒介上完成。 数…...
【JVM基础17】——实践-说一下JVM调优工具
目录 1- 引言:2- ⭐核心:2-1 命令工具jpsjstackjmapjstat 2-2 可视化工具jconsoleVisualVM 3- 小结:3-1 说一下 JVM 调优的工具 1- 引言: 命令工具 jps——进程状态信息jstack——查看Java进程内线程的堆栈信息jmap——查看堆转…...
【QT】Qt中Websocket的使用
一、WebSocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,…...
【vue3】【elementPlus】【国际化】
1.如需从0-1开始,请参考 https://blog.csdn.net/Timeguys/article/details/140995569 2.使用 vue-i18n 模块: npm i vue-i18n3.在 src 目录下创建 locales 目录,里面创建文件:en.js、zh-cn.js、index.js 语言js文件:…...
用python实现求两个整数的最大公约数
def gcd(a, b): """计算最大公约数""" while b: a, b b, a % b return abs(a) 下面是对 gcd 函数的逐行解释: def gcd(a, b):"""计算最大公约数"""定义函数:这里定义了一个名为 gcd…...
Linux 内核源码分析---proc 文件系统
proc文件系统 进程数据文件系统(process data filesystem, procfs)装载在 /proc,缩写为 procFS。 proc 文件系统是一种虚拟文件系统,其信息不能从块设备读取。只有在读取文件内容时才动态生成相应的信息。使用proc文件系统&…...
视频号直播回放怎么下载?
一、如果是下载自己直播回放视频: 方法一:视频号助手 打开网址:视频号助手 登陆账号后。下面路径,先点击成回放, 后就可以在下面路径,下载全场回放 但是这种有个缺点,就是不能分段下载。这样…...
【第九节】python中xml解析和json编解码
目录 一、Python XML 解析 1.1 什么是XML 1.2 Python 对 XML 的解析方法 1.3 SAX解析xml 1.4 xml.dom解析xml 1.6 ElementTree解析XML 二、Python编解码json 2.1 什么是json 2.2 使用json 库 2.3 使用第三方库Demjson 一、Python XML 解析 1.1 什么是XML XML&#x…...
yolo v8部署到云服务器问题记录
环境安装 1、运行项目报错:no python application found, check your startup logs for errors 在云服务器pytorch版本安装错了,安装了GPU版本,需要安装CPU版本 # CPU only 使用下面这段代码避免出现第二个错误 pip install torch2.3.1 to…...
端口被占用,杀死进程的步骤
一、 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano可以查看所有进程 二、查看占用指定端口的程序 查看被那个端口占用,可以用该命令: 三、使用命令杀死进程 杀死进程,使用命令:...
接口入门(企业常见使用,一分钟搞定版)
目录 1、接口的定义 定义位置 接口内容 2、接口的使用 正常实现接口 接口当做函数参数 匿名实现接口 3、OPPO便签接口具体分析 总结一下: 1、接口的定义 定义位置 可以写在类中,但注意现在接口名字是 类名.接口名 可以单独写在一个文件 接口内…...
深入解析:Cookie 与 Session 的区别及应用场景
引言 在Web开发中,Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态,但它们的工作原理和适用场景却有所不同。在本文中,我们将深入探讨 Cookie 和 Session 的区别,并通过…...
LLM金融文本分类文档说明
Python注意事项: 1,创建虚拟环境: conda create --prefixD:\software\Anaconda3\envs\finance_analysis python3.10.4 conda create -p D:/software/anaconda3/envs/finance_analysis python3.10.4 注释: D:\software\anaconda3\e…...
EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?
点击关注:关注GZH【欧亚科睿学术】,GET完整版2023JCR分区列表! 🎉 🎉 🎉 🎉 恭喜!这本毕业水刊仅2天录用!3天见刊! 重要时间节点如下 2024-08-03 Sub…...
sql获取过去的小时数
TIMESTAMPDIFF(HOUR, create_time, NOW()) AS pastHours 是一条 SQL 语句的一部分,它使用 TIMESTAMPDIFF 函数来计算两个时间点之间的差异,并将结果标记为 pastHours。 让我们详细解析一下这条语句: TIMESTAMPDIFF 函数: 这个函数用于计算两…...
【Android Studio】彻底卸载
文章目录 卸载程序控制面板卸载安全软件卸载 重启计算机删除文件重启计算机 我们在Android开发时涉及重装时,如果卸载不干净,再次安装是不会正常运行项目的,接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>…...
美术版权可以当做商标使用吗
美术版权与商标的区别及不可混用性分析 在知识产权领域,美术版权和商标权是两个重要的概念,它们各自承载着不同的法律意义和保护范围。 美术版权概述 美术版权,又称著作权,是指著作权人对其创作的美术作品所享有的权利。这些作品…...
控制某些请求不记录日志
说明:由于统一拦截日志请求,导致所有匹配的请求都会打印日志,这里需要控制有些请求执行不打印日志,比如定时每隔几秒执行某些请求。 具体实现如下: 一、自定义注解,如下: /** * Description: …...
Java线程池原理剖析和应用指南
目录 Java线程池详解一、Java线程池简介池化思想池化思想的优点 二、线程池的实现原理分析实现线程池需要考虑哪些问题?线程池的简单使用示例线程池原理的简单图示 三、Executor详解Executor简介Executor框架的继承结构总结ExecutorExecutorService 四、ThreadPoolE…...
Phi-3-mini-4k-instruct-gguf参数详解:重复惩罚penalty对技术文档生成影响
Phi-3-mini-4k-instruct-gguf参数详解:重复惩罚penalty对技术文档生成影响 1. 模型概述 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本,特别适合问答、文本改写、摘要整理和简短创作等场景。这个开箱即用的中文文本生成模…...
【CVPR26-杜克大学】超越真值约束:利用图像质量先验实现真实场景图像修复
Beyond Ground-Truth: Leveraging Image Quality Priors for Real-World Image Restoration代码:https://github.com/fengyang1399-pixel/IQPIR单位:杜克大学、清华大学、洛桑联邦理工学院一、问题背景现在的真实场景图像修复(模糊人脸、暗光…...
保姆级教程:用Eclipse Paho库在Java中实现MQTT over WebSocket连接(以DJI无人机控制为例)
从零构建无人机控制系统:基于Eclipse Paho的MQTT over WebSocket实战指南 引言 想象一下,你正在开发一个需要实时控制无人机的Web应用。传统的TCP连接在浏览器环境中处处受限,而WebSocket技术恰好能解决这一痛点。本文将带你深入探索如何利用…...
3种方式轻松搞定地理数据处理:Mapshaper免费开源工具完全指南
3种方式轻松搞定地理数据处理:Mapshaper免费开源工具完全指南 【免费下载链接】mapshaper Tools for editing Shapefile, GeoJSON, TopoJSON and CSV files 项目地址: https://gitcode.com/gh_mirrors/ma/mapshaper 你是否曾经面对庞大的地理数据文件感到束手…...
清明前Python笔记
LESSON1 环境安装及基础 一、名词解释 机器语言--编译语言--自然语言 解释:同时(Python) 编译:编译完再交给电脑 面向对象:关注谁去做 面向工程:关注怎么做 二、简介 特点:开源…...
为什么峰值电流控制不适合Boost PFC
结论:因为峰值电流控制时THD很大。分析...
十大排序算法详解:从原理到实战,苹果群控系统游戏运营如何实现自动执行任务。
排序算法概述 排序算法是将一组数据按照特定顺序(如升序或降序)重新排列的算法。根据时间复杂度、空间复杂度、稳定性等特性,排序算法可分为比较排序和非比较排序两大类。常见算法包括冒泡排序、快速排序、归并排序、堆排序、计数排序等。比较…...
最新评测显示,AIGC论文助手全面评估了十款主流AI写作工具的核心能力,详细拆解其功能特点与实际应用效果。
工具名称 核心优势 适用场景 aicheck 快速降AIGC率至个位数 AIGC优化、重复率降低 aibiye 智能生成论文大纲 论文结构与内容生成 askpaper 文献高效整合 开题报告与文献综述 秒篇 降重效果显著 重复率大幅降低 一站式论文查重降重 查重改写一站式 完整论文优化…...
比迪丽LoRA模型风格迁移实战:将名画风格应用于角色创作
比迪丽LoRA模型风格迁移实战:将名画风格应用于角色创作 最近在玩AI绘画的朋友,可能都遇到过这样的困惑:生成的角色虽然精致,但总觉得少了点“味道”,风格上总是千篇一律。有没有办法让你笔下的“比迪丽”角色…...
OpenClaw配置备份方案:Qwen3.5-9B模型迁移无忧指南
OpenClaw配置备份方案:Qwen3.5-9B模型迁移无忧指南 1. 为什么需要OpenClaw配置备份 上周我的MacBook突然黑屏送修,维修人员告诉我主板需要更换。那一刻我突然意识到:过去三个月精心调校的OpenClaw配置可能面临灭顶之灾。特别是那个与Qwen3.…...
