PostgreSQL 文章下架 与 热更新和填充可以提升数据库性能
开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共2150人左右 1 + 2 + 3 + 4 +5) 新人直接分配到5群,另欢迎 OpenGauss 的技术人员加入。
最近写了一篇揭露人性的文章,被下架了,看来是写对了,的确是不适宜公开传阅了,我一点都不惊讶,很多事情只可意会,不能宣之于口.

话归正处,咱们今天继续说PostgreSQL ,对于PostgreSQL中的重要的功能实际上都是尤其是内部的一些功能本身,都是围绕着POSTGRESQL 的原理,MVCC 中UNDO 实现的方式而来的,如果你一直埋怨PG 不能按你心愿,那么你一定是没有理解他本身的设计原理。

今天要说的就是基于PG的原理的 HOT UPDATE 和 FillFactor ,如果这两个理解了,并且对于fillfactor做好了,那么对于使用PG 会有良好的适用性。
HOT UPDATE,对于PG来说这是一个重要的功能,在我们理解来,表和索引是一体的,在更新表的数据的同时,索引里面的数据也会更新,当然如果要启动 heap only tuple 的这个功能,是要特定的条件的。
1 更新的数据必须与原来的这行数据在一个页面内,这是启动数据更新heap Only Tuple 的前提。
2 要完成这个前提,对于POSTGRESQL的表设计中的 fillfactor要有认知和好的设计,这可和 mysql 那样的数据库的简单实用的思路不一样了。
下面我们说说根因,
为了实现高并发,PG实用了多版本并非控制,来存储行,对于UPDATE来说有一个问题,更新行需要不是在原有的位置来修改,而是插入新的行,这就需要为每个更新的行添加新的索引条目,那么必然索引中的对于原有行的指向是要变动的,这就会导致这个操作很复杂,导致我们的操作变得比较“贵”。
为了解决这个问题,提出了HOT heap-Only-Tuples , 通过这样的方式来减少在进行数据行的更新后,新的索引行的产生情况。我这里大致画一个简图来说明这样操作后的好处是什么。

为了大家看清楚,将上图拆分在进行粘贴


从上图我们可以很清楚的看到,图一为更新数据前的,图2为更新数据后,因为更新数据后,会直接插入一行,所以第二张图就会将原有的数据行的位置进行标记,然后在新的位置插入更新后的数据行,这里可以注意,因为使用了 HOT,所以索引1 的指针还是没有变化而,变化的仅仅是指针1 将自己的指针指向了指针3.
以前读取数据是 索引1 ---指针1---数据 1, 现在的读取的方式是索引1--指针1--指针3--数据1.
因这样的方式仅仅变动的是业内的指针重定向,所以这个样的方式相对于修改索引1的指针指向指针3 要方便的多,节省了大量的数据处理的资源。
那么说到这里,如果要满足这样的操作必须保证更新后的行和被更新的行在一个页面内,才可以进行此操作,如果是下面的情况那么HOT无法进行工作的,下图展示的是由于原有更新行的数据并为插入到原有的数据页面中,而是插入到了新的页面中,所以索引必须指向新的位置,而不能再指向原有的页面了。

所以说到这里,要保证一个页面可以容纳UPDATE后,还写入本页的插入的数据的方法里面,必须有保证原有页面内的空间有冗余,这也就谈到我们说的第二个问题 fillfactor. 填充率。
对的填充率,填充率在POSTGRESQL中尤其的重要,对于一个在PG里面经常被UPDATE的表,fillfactor 在首次填充率一般都不建议超过85%。当然这样操作后的后果是,数据页面在第一次的插入后,会保留15%的空间,者就导致这样的数据页面比100%填充的页面要浪费15%的空间。
那么这里,空间换时间,时间换空间的道理,在POSTGRESQL HOT, Fillfactor 里面又再次的应验了。
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# SELECTrelname AS table_name,seq_scan AS sequential_scans,idx_scan AS index_scans,n_tup_ins AS inserts,n_tup_upd AS updates,n_tup_hot_upd AS hot_updates
FROMpg_stat_user_tables
ORDER BYhot_updates DESC;table_name | sequential_scans | index_scans | inserts | updates | hot_updates
------------+------------------+-------------+---------+---------+-------------test_data | 14 | 4 | 16 | 6 | 6test | 0 | | 0 | 0 | 0
(2 rows) 最后是如何你来查看你的表中设置的fillfactor是对的,用上面的语句来去查看你的表中 hot_updates的次数,和UDPATE的次数的对比,也可以算一个百分比,即可。
ALTER TABLE your_table SET (FILLFACTOR = 80);
修改一个表的填充率也很简单,直接对于这个表即刻进行填充率的修改,当然这仅仅是对这个表中新加的页面生效。
Adjournment

相关文章:
PostgreSQL 文章下架 与 热更新和填充可以提升数据库性能
开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(…...
什么是 内网穿透
内网穿透是一种技术手段,用于在内部网络(如家庭网络或公司网络)中的设备能够被外部网络访问和控制。它允许将位于私有网络中的设备暴露在公共网络(如互联网)上,从而实现远程访问和管理。 内网穿透通常通过…...
RobotFramework测试框架(11)--变量文件
Variable files包含的variables可以用于test data中(即测试用例)中。Variables可以使用Variables section或者从命令行设置。 但是也允许动态创建。 变量文件通常使用模块实现,有两种实现方式。 1、直接从模块中获取变量 变量被指定为模块…...
java八股——常见设计模式
上一篇传送门:点我 有哪些设计模式? 按照模式的应用目标分类,可以分为创建型模式、结构型模式、行为型模式三类。 创建型模式: 对象实例化的模式,创建型模式用于解耦对象的实例化过程。 单例模式:某个类…...
机器学习 - metric评估方法
有一些方法来评估classification model。 Metric name / Evaluation methodDefinitionCodeAccuracyOut of 100 predictions, how many does your model get correct? E.g. 95% accuracy means it gets 95/100 predictions correct.torchmetrics.Accuracy() or sklearn.metric…...
书生·浦语大模型趣味Demo作业( 第二节课)第二期
文章目录 基础作业进阶作业 基础作业 进阶作业 熟悉 huggingface 下载功能,使用 huggingface_hub python 包,下载 InternLM2-Chat-7B 的 config.json 文件到本地(需截图下载过程) 完成 浦语灵笔2 的 图文创作 及 视觉问答 部署&…...
VScode使用持续更新中。。。
VScode 安装 Ubuntu18.04安装和使用VScode 使用 Vscode如何设置成中文...
YUM仓库和编译安装
目录 一.YUM仓库搭建 1.简介: 2.搭建思路: 3.实验:单机yum的创建 二.编译安装 1.简介 2.安装过程 3.实验:编译安装nginx 一.YUM仓库搭建 1.简介: yum是一个基于RPM包(是Red-Hat Package Manager红…...
IPv4子网判断
有时候,服务后端需要对客户端的所属组进行判断,以决定何种访问策略权限。而客户端IP所在子网是一种很简单易实现的分组方法。 虽然现在早已经进入IPv6时代,不过IPv4在局域网仍广泛使用,它的定义规则相对简单,本文介绍的…...
CSS 实现航班起飞、飞行和降落动画
CSS 实现航班起飞、飞行和降落动画 效果展示 航班起飞阶段 航班飞行阶段 航班降落 CSS 知识点 animation 属性的综合运用:active 属性的运营 动画分解 航班滑行阶段动画 实现航班的滑行阶段动画,需要使用两个核心物件,一个是跑动动画&#x…...
设计模式——建造者模式03
工厂模式注重直接生产一个对象,而建造者模式 注重一个复杂对象是如何组成的(过程),在生产每个组件时,满足单一原则,实现了业务拆分。 设计模式,一定要敲代码理解 组件抽象 public interface …...
【机器学习】《机器学习算法竞赛实战》思考练习(更新中……)
文章目录 第2章 问题建模(一)对于多分类问题,可否将其看作回归问题进行处理,对类别标签又有什么要求?(二)目前给出的都是已有的评价指标,那么这些评价指标(分类指标和回归…...
机场数据治理系列介绍(5)民用机场智慧能源系统评价体系设计
目录 一、背景 二、体系设计 1、评价体系设计维度 2、评价体系相关约定 3、评价指标体系框架设计 4、能源利用评价指标 5、环境友好评价指标 6、智慧管控评价指标 7、安全保障评价指标 三、具体落地措施 一、背景 在“双碳”国策之下,各类机场将能源系统建…...
[LeetCode][LCR190]加密运算——全加器的实现
题目 LCR 190. 加密运算 计算机安全专家正在开发一款高度安全的加密通信软件,需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量: 正数为发送量负数为接受量0 为数据遗失 请不使用四则运算符的情况…...
Linux: linux常见操作指令
目录 01.ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要) 06.rmdir指令 && rm 指令(重要) 07.man指令(重要) 07.cp指令(重要) 08.mv指令&#…...
【BPNN】BP神经网络代码
主代码 %function main() clc clear close all %% 1.原始数据 %输入 SR1[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ...41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63]; SR2[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.2…...
基于mqtt的物联网控制移动应用程序开发
具体实现问题 MQTT模型、特点、服务质量、报文、消息类型表 java实现mqtt两种方式:Paho Java原生库、spring boot MQTT与HTTP:哪一个最适合物联网? mqtt协议和http协议区别 应用是如何实现mqtt协议 通过调用安卓的MQTT库来实现MQTT协议&…...
MPLS-基础、LSR、LSP、标签、体系结构
MPLS技术 MPLS基础 MPLS:转发数据时,只在网络边缘分析IP报文头,不在每一跳都分析,节约了转发时间。 MPLS:Multiprotocol Label Switching,多协议标签交换骨干网技术。主要应用:VPN、流量工程…...
【RV1126】Ubuntu22.04下sdk编译问题汇集
对于新版本Ubuntu系统来编译SDK,尤其是buildroot ,是一个巨大考验,发现问题如下: 1. c-stack.c的SIGSTKSZ错误 buildroot 报错:c-stack.c:55:26:error:missing binary operator before token “(“55 在buildroot目录中找到c-s…...
51单片机使用uart串口和助手简单调试
基础知识 参考 特殊功能寄存器PCON(控制波特率是否加倍SMOD)、TMOD(T0,T1计时器的功能方式)、TCON(T0,T1计时器的控制)、串口中断、SCON(串口数据控制寄存器) 关闭定时器1中断&…...
别再只用CEC2005了!手把手教你用MATLAB跑通CEC2017测试集(附完整代码)
从CEC2005到CEC2017:MATLAB实战迁移指南与性能优化技巧 当优化算法研究者还在使用CEC2005作为基准测试时,前沿论文早已转向更具挑战性的CEC2017测试集。这个转变不仅仅是数字上的更新,更代表着优化算法评估标准的一次重大飞跃。本文将带你从零…...
降AIGC哪家强?2026零成本保姆级教程:DeepSeek/Kimi/豆包专属降重指令实测与差异解析
很多时候大学生写论文逻辑太严谨、话术太规范,反而会导致AI率过高,且一旦AI率过高,轻则退回重改,重则取消答辩资格,这后果谁都担不起。 为了帮大家有效降低aigc率,这周我专门针对目前市面上最主流的三款大…...
从轨迹到网络:广州休闲步行空间格局刻画 | 论文全解析与方法论深度拆解
从轨迹到网络:广州休闲步行空间格局刻画 | 论文全解析与方法论拆解 原文:From trajectories to network: Delineating the spatial pattern of recreational walking in Guangzhou》 一、论文核心概览:摘要与关键词 1.1 核心摘要解析 本文的核心内容可拆解为5个核心模块,…...
如何快速实现歌词显示:群晖Audio Station完美解决方案
如何快速实现歌词显示:群晖Audio Station完美解决方案 【免费下载链接】qq_music_aum Synology LRC Plugin. 群晖 Audio Station 歌词插件,歌词来自QQ音乐。 项目地址: https://gitcode.com/gh_mirrors/qq/qq_music_aum 还在为群晖Audio Station缺…...
Python原生AOT编译到底稳不稳?我们压测了7类生产负载:高并发API、实时流处理、边缘AI推理——结果出乎意料(附完整benchmark报告)
第一章:Python原生AOT编译方案2026实战案例全景概览Python原生AOT(Ahead-of-Time)编译在2026年已进入工程化落地深水区,主流方案如Nuitka 2.0、PyO3 Rust AOT Pipeline、以及新兴的CPython官方实验分支cpython-aot,均…...
别再让收款语音卡顿!UniApp + WebSocket 实现流畅支付播报的完整避坑指南
UniApp WebSocket 支付语音播报实战:从性能优化到高并发处理 在移动支付场景中,实时语音播报不仅是用户体验的关键环节,更是商户经营效率的重要保障。想象这样的场景:高峰时段,收银台前排队等待的顾客,收银…...
保研党必看:用本科论文逆袭IEEE二区期刊的5个关键操作(含时间管理秘籍)
保研党必看:用本科论文逆袭IEEE二区期刊的5个关键操作(含时间管理秘籍) 在保研竞争日益激烈的当下,一篇高质量的学术论文往往能成为决定成败的关键。对于大多数本科生来说,科研经历有限、资源匮乏是普遍面临的困境。但…...
全格式文档智能处理:AnythingLLM的多模态知识管理解决方案
全格式文档智能处理:AnythingLLM的多模态知识管理解决方案 【免费下载链接】anything-llm 这是一个全栈应用程序,可以将任何文档、资源(如网址链接、音频、视频)或内容片段转换为上下文,以便任何大语言模型(…...
MybatisPlus分页插件PaginationInnerInterceptor原理解析与实战配置指南
MybatisPlus分页插件PaginationInnerInterceptor深度剖析与高效实践 当你在Spring Boot项目中处理海量数据时,分页查询就像给数据装上精准导航——而MybatisPlus的PaginationInnerInterceptor正是这个导航系统的核心引擎。不同于简单配置就能用的工具类,…...
突破VMware限制:在非苹果硬件上构建macOS开发环境完全指南
突破VMware限制:在非苹果硬件上构建macOS开发环境完全指南 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 实现跨平台macOS体验:VMware Unlocker核心价值解析 当开发者需要在Windows或Linux工作站上构建m…...
