本节介绍PolarDB PostgreSQL版(兼容Oracle)的查询机制。

SELECT

SELECT数据

使用SELECT查询数据时,需要从磁盘中读取一个数据块到内存中,然后通过内存中数据块获取返回结果。

INSERT

INSERT

当您使用INSERT插入一条数据时,具体过程如下:

  1. 从数据文件中读取一个数据块到内存中,并将这行数据写入这个数据块,系统生成一条INSERT的WAL日志。
  2. 当执行COMMIT命令后,系统会产生一条COMMIT的WAL日志。
  3. INSERT WAL日志和COMMIT WAL日志产生后会被立即写入磁盘,CLOG缓存记录这个事务提交成功的信息。
  4. 数据块中的数据通过bgwriter写入到数据文件中,同时更新CLOG文件。

UPDATE

UPDATE

上图中,txid表示事务号,t_xmin表示插入的事务号,t_xmax表示删除事务号,t_cid表示事务内命令的序号,t_tcid表示数据块内的偏移量,data表示实际数据存储的值。

  • 事务101

    左侧SQL表示在tbl表中插入一行值为0的数据,右侧表示实际的数据块存储内容。事务号为101;由于没有删除事务,所以删除事务号为0;事务内命令的序号为0;偏移量为(0,1)表示数据块的第一个偏移位置。

  • 事务102
    事务102更新了tbl表,设置ID等于1,然后继续更新设置ID等于2并提交。
    • 从右侧上半张图可以看出,删除事务号从0变成了102,表示这行数据被102事务删除了;偏移量变成了(0,2),表示指向了0号数据块的第二个偏移位置;从第二个偏移位置可以看到事务号为102,表示事务102插入了这行数据,数据存储值为1。
    • 从右侧下半张图可以看出,事务号依旧是102,偏移量指向了(0,3),表示存储实际的数据为2;事务内命令的序号为1表示事务内的第二条命令进行了更新,与第二个UPDATE对应。
  • 事务103

    从左侧SQL语句表示执行了删除tbl表的动作,删除事务号更新为103。