irpas技术客

postgres 元组可见性判断 t_infomask标识位_Serendipity_Shy

大大的周 3035

1 背景

??对postgres熟悉的DBA学习者应该知道在pg中通过多版本控制技术( MVCC)来解决读写冲突,即读不阻塞写,写不阻塞读,相比于基于锁的并发控制技术进一步提升了事务的并发度。其实现方法是写新数据时(updata),旧数据不删除,直接插入新数据。 为了实现MVCC机制,必须要:

定义多版本的数据——使用元组头部信息的字段来标示元组的版本号定义数据的有效性、可见性、可更新性——通过当前的事务快照和对应元组的版本号判断实现不同的数据库隔离级别——通过在不同时机获取快照实现 2 基本概念 2.1 事务标识

当事务开始(执行begin第一条命令时),事务管理器会为该事务分配一个txid(transaction id)作为唯一标识符。txid是一个32位无符号整数,取值空间大小约42亿(2^32-1)。

postgres=# select txid_current(); DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0 LOG: statement: select txid_current(); DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 822/1/0 txid_current -------------- 822 (1 row)

三个特殊的txid

0:InvalidTransactionId,表示无效的事务ID 1:BootstrapTransactionId,表示系统表初始化时的事务ID,比任何普通的事务ID都旧。 2:FrozenTransactionId,冻结的事务ID,比任何普通的事务ID都旧。 大于2的事务ID都是普通的事务ID。

2.2 元组结构

postgres官网: https://`/Hehuyi_In/article/details/102920988 《PostgreSQL指南 内幕探索》


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Postgres #元组可见性判断 #t_infomask标识位 #1