关键字:
用户数据、物理存储、查看方法、人大金仓
一、概述
KES中用户数据在实际存储时,除了值以外会附带一些系统内部使用的信息,例如事务号、事务状态等。在分析数据库系统的问题时,常常需要观察物理数据的实际情况方便定位问题所在,本文整理了KES中提供的多种工具,方便查询数据的物理存储信息。
二、两种查询数据物理存储方法
- 查询时投影列中指定隐藏列
test=# select * from t1;
a
---
(0 rows)
test=# insert into t1 values(100);
INSERT 0 1
test=# insert into t1 values(200);
INSERT 0 1
test=# insert into t1 values(300);
INSERT 0 1
test=#
test=# update t1 set a=10 where a=100;
UPDATE 1
test=# select tableoid, xmin, xmax, cmin, cmax, ctid, * from t1;
tableoid | xmin | xmax | cmin | cmax | ctid | a
----------+------+------+------+------+-------+-----
16436 | 1135 | 0 | 0 | 0 | (0,2) | 200
16436 | 1136 | 0 | 0 | 0 | (0,3) | 300
16436 | 1137 | 0 | 0 | 0 | (0,4) | 10
(3 rows)
在KES中,当我们创建数据表时,会隐式增加几个字段,这些字段由数据库系统自动维护,我们可以在执行select查询时的投影列中指定这些隐藏列,如xmin和xmax等。
- 使用插件pageinspect
test=# create extension pageinspect;
CREATE EXTENSION
test=# select lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid, t_infomask2, t_infomask from heap_page_items(get_raw_page('t1', 0));
tuple | t_xmin | t_xmax | t_cid | t_ctid | t_infomask2 | t_infomask
-------+--------+--------+-------+--------+-------------+------------
1 | 1134 | 1137 | 0 | (0,4) | 16385 | 1280
2 | 1135 | 0 | 0 | (0,2) | 1 | 2304
3 | 1136 | 0 | 0 | (0,3) | 1 | 2304
4 | 1137 | 0 | 0 | (0,4) | 32769 | 10496
(4 rows)
插件pageinspect是用于查看数据的物理存储,可以读取指定关系中的指定块。与方法1不同的是,方法1只显示当前可见数据,而本方法会显示所有实际存储的数据,包括被删除或更新的不可见数据。
需要注意的是,KES默认未安装pageinspect插件,需要手动安装。
三、总结
KES除了提供了丰富完善的数据库功能,还提供了多种便捷的观测工具,借助这些实用工具能够方便用户或DBA更好的使用KES,带来更大价值。