【问题标题】:How to showcase the work of MVCC with several parallel sessions in PostgreSQL?如何在 PostgreSQL 中通过多个并行会话展示 MVCC 的工作?
【发布时间】:2018-12-10 17:48:24
【问题描述】:

我需要借助将同时访问同一个表的并行会话来演示 MVCC 在 PostgreSQL 中的工作。

我不知道该怎么做。 请告诉我。

【问题讨论】:

    标签: postgresql demo mvcc


    【解决方案1】:

    第 1 节:

    CREATE TABLE test(id integer);
    
    INSERT INTO test VALUES (1);
    
    START TRANSACTION;
    
    SELECT ctid, xmin, xmax, id FROM test;
     ctid  | xmin | xmax | id 
    -------+------+------+----
     (0,1) | 5163 |    0 |  1
    (1 row)
    

    此行版本由事务 5163 创建。它是表块 0 中的项目 1。

    UPDATE test SET id = 2;
    
    SELECT ctid, xmin, xmax, id FROM test;
     ctid  | xmin | xmax | id 
    -------+------+------+----
     (0,2) | 5164 |    0 |  2
    (1 row)
    

    更新插入一个新的行版本。这是表块 0 中的项目 2,由事务 5164(此事务)创建。

    第 2 节:

    SELECT ctid, xmin, xmax, id FROM test;
     ctid  | xmin | xmax | id 
    -------+------+------+----
     (0,1) | 5163 | 5164 |  1
    (1 row)
    

    会话 2 仍然看到旧的行版本,因为删除事务 5164 尚未提交。

    第 1 节:

    COMMIT;
    

    第 2 节:

    SELECT ctid, xmin, xmax, id FROM test;
     ctid  | xmin | xmax | id 
    -------+------+------+----
     (0,2) | 5164 |    0 |  2
    (1 row)
    

    现在会话 1 已经提交,会话 2 也可以看到新的行版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 2018-11-21
      • 2017-09-20
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 2020-11-18
      • 2021-08-09
      相关资源
      最近更新 更多