关键字:
用户数据、物理存储、查看方法、人大金仓
一、概述
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,带来更大价值。