当前位置: 首页 > news >正文

PostgreSQL 文章下架 与 热更新和填充可以提升数据库性能

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共2150人左右 1 + 2 + 3 + 4 +5) 新人直接分配到5群,另欢迎 OpenGauss 的技术人员加入。

最近写了一篇揭露人性的文章,被下架了,看来是写对了,的确是不适宜公开传阅了,我一点都不惊讶,很多事情只可意会,不能宣之于口.

f59687c53d4b747c5cd858fde7f5469d.png

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

ca3adef89e48b8cdad93e9c4aa440887.png

今天要说的就是基于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 , 通过这样的方式来减少在进行数据行的更新后,新的索引行的产生情况。我这里大致画一个简图来说明这样操作后的好处是什么。

76d65fef7c47427eef94230ac02ab612.png

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

2ad6ad28e20921178275be54dea523cc.png

9bbb99369fc473f1152a864122bc402e.png

从上图我们可以很清楚的看到,图一为更新数据前的,图2为更新数据后,因为更新数据后,会直接插入一行,所以第二张图就会将原有的数据行的位置进行标记,然后在新的位置插入更新后的数据行,这里可以注意,因为使用了 HOT,所以索引1 的指针还是没有变化而,变化的仅仅是指针1 将自己的指针指向了指针3.

以前读取数据是 索引1 ---指针1---数据 1, 现在的读取的方式是索引1--指针1--指针3--数据1.

因这样的方式仅仅变动的是业内的指针重定向,所以这个样的方式相对于修改索引1的指针指向指针3 要方便的多,节省了大量的数据处理的资源。

那么说到这里,如果要满足这样的操作必须保证更新后的行和被更新的行在一个页面内,才可以进行此操作,如果是下面的情况那么HOT无法进行工作的,下图展示的是由于原有更新行的数据并为插入到原有的数据页面中,而是插入到了新的页面中,所以索引必须指向新的位置,而不能再指向原有的页面了。

386a6c9b9e3930b9e136fdb85eb1ae12.png

所以说到这里,要保证一个页面可以容纳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

de441d4b2ebcd0c573b6090e1e15541a.png

相关文章:

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中断&…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...