PostgreSQL中Tuple可见性判断分析

分类:编程技术 时间:2024-02-20 15:53 浏览:0 评论:0
0
本文主要讲解《PostgreSQL中元组可见性判断分析》。有兴趣的朋友不妨看一下。文章介绍的方法简单、快捷、实用。让小编带你学习《PostgreSQL中元组可见性判断分析》!

1。 xmin/xmax为当前事务

Tuple.xmin或xmax为当前事务情况。事务状态为 IN_PROGRESS。判断逻辑如下:
插入未提交
If xmin == Current transaction then
If xmax == Current transaction then
Tuple不可见
Else
元组可见
/>End If
End If

如下例所示:

15:40 :39 (xdb@[本地]:5432)testdb=# 15:40: 40 (xdb@[本地]:5432)testdb=# 开始;BEGIN15:40:44 (xdb@[本地]:5432)testdb=# * 插入 t_session1 值(1);INSERT 0 115:40:52 (xdb @[local]:5432)testdb=#* updatet_session1 设置 id = 0;更新 115:41:02 (xdb@[local]:5432)testdb=#* 从 heap_page_items 选择 lp,lp_off,t_xmin,t_xmax(get_raw_page( 't_session1',0)); LP | lp_off | t_xmin | t_xmax ----+--------+--------+-------- 1 | 8160| 2370 | 2370 2370 --> 2370 插入数据,2370 更新数据,Tuple 不可见 2 | 8128 | 2370 | 2370 0 --> 2370 更新数据,元组可见(2 行)

插入已提交
如果 xmax == 当前事务,则元组不可见可见
结束如果

 15:41:11 (xdb@[local]:5432)testdb=#* 从 t_session1 中删除;DELETE 115:41:36 (xdb@[local]:5432 )testdb=#* 从 heap_page_items 中选择 lp,lp_off,t_xmin,t_xmax(get_raw_page('t_session1',0)); LP | lp_off | t_xmin | t_xmax ----+--------+--------+-------- 1 | 8160| 2370 | 2370 2370 --> 2370 更新元组,不可见 2 | 8128 |2370 | 2370 --> 2370 删除元组,不可见(2行)15:41:38 (xdb@[local]:5432)testdb=#* commit;COMMIT

注意:本例本例(xmax == 当前交易),xmin状态不能为ABORTED,因为无法更新/删除不存在的元组(未提交的事务可视为不存在)。

2. xmin&xmax 非当前事务

xmin 和 xmax 都不是当前事务,假设 snapshot 是 ST1:ST2:XIP[],其判断逻辑如下:
如果 xmin.STATUS == COMMITTED then
If xmax < ST1 && xmax.STATUS == COMMITTED then
元组不可见
​如果xmax ∉ XIP[] && br/>​元组不可见
End If

至此,相信大家对《PostgreSQL中的元组可见性判断分析》有了更深入的了解了,不妨在实践中动手实践一下吧!这是网站。更多相关内容,您可以进入相关渠道进行查询。关注我们并继续学习!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > PostgreSQL中Tuple可见性判断分析

用户评论