首页 > 数据库 >PostgreSQL技术大讲堂 - 第19讲:冻结TXIDS概述

PostgreSQL技术大讲堂 - 第19讲:冻结TXIDS概述

时间:2023-06-16 13:56:56浏览次数:42  
标签:冻结 PostgreSQL 19 txid testdb pg TXIDS TXID

 

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。

第19讲:冻结TXIDS

内容1:PostgreSQL TXID介绍

内容2:PostgreSQL TXID使用原理使用

内容3:冻结TXID来解决TXID环绕问题

内容4:如何冻结TIXD

 

TXID介绍

· 事务id(txid)

当一个事务开始时,PostgreSQL中的事务管理系统会为该事务分配一个唯一标识符,即事务ID(txid).PostgreSQL中的txid被定义为一个32位的无符号整数,也就是说,它能记录大约42亿个事务。通常txid对我们是透明的,但是我们可以利用PostgreSQL内部的函数来获取当前事务的txid。

testdb=# BEGIN;

BEGIN

testdb=# SELECT txid_current();

txid_current

--------------

100

(1 row)

请注意,BEGIN命令没有指定txid。在PostgreSQL中,当第一个命令在BEGIN命令执行之后执行时,事务管理器会分配一个tixd,然后它的事务开始。

 

TXID使用原理

· TXID结构

TxID=2的32次方=42亿

前21亿个TxID是“过去的”

后21亿个TxID是“未来的”

 

TXID环绕

· TXID环绕

假设元组tuple_1的txid为100,即tuple_1的t_xmin为100。服务器已经运行很长一段时间了,Tuple_1没有被修改。当前的txid是21亿+100,执行SELECT命令。此时,Tuple_1可见,因为txid 100是过去的。接着,又执行相同的SELECT命令,此时当前的txid就变成是21亿+101了,根据行可见性规则判断Tuple_1就不再可见,因为txid 100变成是未来的了。

 

冻结TXID

· 解决TXID环绕问题的方法—冻结TXID

解决事务环绕问题的方法是冻结,其做法是把21亿以前事务所修改的行做一个标记位(即冻结),根据行可见性规则,凡是被标识位冻结行在判断的时候就不依赖t_xmin了,让行数据变成可见。

若TXID使用过一轮以后,被冻结的行如果被新事务修改,则原来的标记位就会消除(即解冻),此时此行是否可见,就要根据行可见性规则进行判断。

 

冻结处理

· 冻结处理有两种模式

lazy mode (惰性模式)

eager mode (急切模式)

· Lazy Mode

冻结极限txid定义如下:

freezeLimit_txid=(OldestXmin-vacuum_freeze_min_age)

AutoVacuum操作会进行冻结操作,每分钟都会执行一次,被选中的表都会进行vacuum操作,包含冻结txid内容。

· Eager Mode

当满足以下条件时,执行紧急模式:

pg_database.datfrozenxid<(OldestXmin-vacuum_freeze_table_age)

· pg_database.datfrozenxid 和pg_class.relfrozenxid(s)之间的冻结对比

· 如何显示被冻结的对象信息

testdb=# VACUUM table_1;

VACUUM

testdb=# SELECT n.nspname as "Schema", c.relname as "Name", c.relfrozenxid

FROM pg_catalog.pg_class c

LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace

WHERE c.relkind IN ('r','')

AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast'

AND pg_catalog.pg_table_is_visible(c.oid)

ORDER BY c.relfrozenxid::text::bigint DESC;

Schema | Name | relfrozenxid

------------+-------------------------+--------------

public | table_1 | 100002000

public | table_2 | 1846

pg_catalog | pg_database | 1827

pg_catalog | pg_user_mapping | 1821

pg_catalog | pg_largeobject | 1821

· 显示被冻结的数据库信息

testdb=# SELECT datname, datfrozenxid FROM pg_database WHERE datname = 'testdb';

datname | datfrozenxid

---------+--------------

testdb | 1821

(1 row)

· 使用VM提高冻结效率

 

 

以上就是Part 19 - 冻结TXIDS 的内容,欢迎进群一起探讨交流,往期视频,联系cuug

标签:冻结,PostgreSQL,19,txid,testdb,pg,TXIDS,TXID
From: https://www.cnblogs.com/cnblogs5359/p/17485349.html

相关文章

  • 2023冲刺国赛模拟19
    A.矩阵正解是二维分块但是二维树状数组跑的飞快code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpair<int,int>pii;llread(){ llx=0;boolf=false;charc=getchar(); while(!isdigit(......
  • 2023冲刺国赛模拟 19.1
    T1矩阵正解做法是二维分块,然而直接上树状数组跑的飞快,不过我写的根号重构,加Fastio后可过。code#include<cstdio>#include<algorithm>#include<ctime>#include<iostream>usingnamespacestd;charbuf[1<<21],*p1,*p2;inlinechargc(){if(__builti......
  • IP段是什么意思?杭州高防服务器103.219.30.X
    IP段就是网段,一般指一个计算机网络中使用同一物理层设备(传输介质,中继器,集线器等)能够直接通讯的那一部分。例如,从103.219.30.1到103.219.30.255这之间就是一个网段。在同一网段,要求网络标识相同。网络标识就是用IP的二进制与子网掩码的二进制数据作'与'运算(可用WINDOWS计算器算二进......
  • PostgreSql: 安装与链接
    环境介绍使用宝塔面板,在阿里云中安装PostgreSql,并使用DataGrip在本地进行链接postgresql配置安装postgresql在宝塔中安装postgresql管理器在此处点击安装postgresql,我安装的是14.2。各位可以自行选择之后等待安装完成即可修改配置文件修改postgresql.conf修改pg_h......
  • Postgresql中的表结构和数据同步/数据传输到Mysql
    场景Postgresql中的某个表,需要连同表结构以及表数据同步一次到Mysql数据库中。一种方式是在Postgresql中将表sql导出,然后修改sql文件语法,再导入到mysql中。但是这种方式过于复杂,可以借助于Navicat等工具。如果是使用Navicat进行结构同步和数据同步时,需要两边是同类型的数据库......
  • 【剑指Offer】19、顺时针打印矩阵
    【剑指Offer】19、顺时针打印矩阵题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4X4矩阵:12345678910111213141516则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路:由于是按照从外到内的顺序依次打......
  • postgresql中根据上次的查询结果循环插入
    循环插入DO$$DECLAREtmpRECORD;BEGINFORtmpINselectdistinctidfromtestLOOPINSERTINTOtest1(id,role_code,privilege_code,space_id)VALUES(FLOOR(random()*2147483646),'COMMON_USER','test',tmp.......
  • AtCoder Beginner Contest 219 H Candles
    洛谷传送门AtCoder传送门套路化了。比较显然的关路灯型区间dp。考虑你\(t\)时刻熄灭一个初始长度为\(a\)的蜡烛,得分是\(\max(a-t,0)\),所以尝试把时间塞进状态。设\(f_{i,j,k,0/1}\)表示,熄灭完区间\([i,j]\)的蜡烛,当前时间是\(t\),在左端点还是右端点的最大得......
  • jfreechart 1.0.19如何设置两个数据标签,一个在折线下方,一个在折线上方
    在JFreeChart1.0.19中,您可以使用CategoryPlot类的setItemLabelVisible(intseries,booleanvisible)方法来设置特定系列的数据标签是否可见。要设置两个数据标签,一个在折线下方,一个在折线上方,您可以按照以下步骤进行操作:1.获取CategoryPlot对象。2.使用CategoryPlo......
  • CSGO服务器租用首选杭州BGP高防103.219.30.x
    Hello,everyone今天我不打算讲游戏攻略了,我了解到很多想要自己搭建服务器的小伙伴在服务器这里遇到颈瓶了,所以我来给大家分享一下搭建CSGO社区服所需的服务器配置,希望可以帮助到你们首先选择合适的服务器配置,第一个需要考虑的就是游戏玩家地区分布情况,我很多玩CSGO的朋友都来自五湖......