专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
  • --->
当前位置: 网站首页 > pg大讲堂 > PostgreSQL技术大讲堂 - 第19讲:冻结TXIDS概述

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

文章来源: 更新时间:2023/6/15 16:17:49

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

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

QQ交流群:752027153

微信交流群:联系客服拉你进微信PG交流群

钉钉交流群:35822460,钉钉群专门有视频讲解

本文地址:http://www.cuug.com.cn/pgdjt/34306667841.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区田村山南路35号院17号楼
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1