本文主要讲解“PostgreSQL中Tuple可见性判断分析”,感兴趣的朋友不妨看一下。本文介绍的方法简单、快速、实用。让边肖带你学习“PostgreSQL中Tuple可见性的判断与分析”!
一、xmin/xmax是当前事务
Tuple.xmin或xmax为当前交易的情况,交易状态为IN_PROGRESS,其判断逻辑如下:插入未提交.
如果xmin==当前事务,则
如果xmax==当前事务,则
元组是不可见的
其他
元组可见
如果…就会结束
如果…就会结束
以下示例显示了:
15:40:39(xdb @[本地]:5432)testdb=#
15:40:40(xdb @[local]:5432)testdb=# begin;
开始
15:40:44(xdb @[local]:5432)testdb=# * insertintot _ session 1 values(1);
INSERT01
15:40:52(xdb @[local]:5432)testdb=# * updatet _ session 1 setid=0;
更新1
15:41:02(xdb @[local]:5432)testdb=# * selectlp,lp_off,t_xmin,t _ xmax from heap _ page _ items(get _ raw _ page(' t _ session 1 ',0));
lp|lp_off|t_xmin|t_xmax
- - - -
1 | 8160 | 2370 | 2370-2370插入数据,2370更新数据,元组是不可见的。
2 | 8128 | 2370 | 0-2370更新数据,元组可见。
插入已提交
如果xmax==当前事务,则
元组是不可见的
如果…就会结束
15:41:11(xdb @[local]:5432)testdb=# * delete from _ session 1;
删除1
15:41:36(xdb @[local]:5432)testdb=# * selectlp,lp_off,t_xmin,t _ xmax from heap _ page _ items(get _ raw _ page(' t _ session 1 ',0));
lp|lp_off|t_xmin|t_xmax
- - - -
1 | 8160 | 2370 | 2370-2370更新此元组,它不可见。
2 | 8128 | 2370 | 2370-2370删除此元组,它不可见。
(2条线)
15:41:38(xdb @[local]:5432)testdb=# * commit;
COMMIT note :在这种情况下(xmax==当前事务),xmin状态不能被中止,因为不可能更新/删除不存在的元组(未提交的事务可以视为不存在)。
00-1010xmin和xmax不是当前事务,假设快照为st1:st23360xip [],其判断逻辑如下:
如果圣诞节。状态==已提交,然后
If xmax ST1 xmax。状态==已提交,然后
元组是不可见的
如果xmax XIP[] xmax。状态==已提交,然后
元组是不可见的
其他
元组可见
如果…就会结束
其他
元组是不可见的
如果…就会结束
至此,相信大家对“PostgreSQL中Tuple可见性判断与分析”有了更深的理解,让我们一起来实践吧!这是网站。更多相关内容,可以去相关渠道查询,关注我们,继续学习!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/78651.html