人大金仓数据库KingbaseES临时表介绍

关键字:

KingbaseES、临时表、数据管理、事务机制、人大金仓

什么是临时表?

临时表(Temporary Table)是用于存放只存在于事务或会话期间数据的数据库对象,不同于普通表,临时表中的数据对会话是私有的,每个会话只能看到和修改自己的数据。

在KES中,临时表又分为局部临时表和全局临时表,二者对于数据的管理是相似的,区别主要在于元数据生命周期和可见性的不同。全局临时表的表结构在数据库系统的所有会话中均可见,并且不会随着会话的结束而消失;而局部临时表的表结构只在当前会话中可见,且生命周期与数据相同,是事务级或者会话级。

临时表的数据管理

从临时表的特点可以看出,其与普通表在DML操作上与普通表并无太大不同,主要区别点在于元数据和数据的管理上,所以我们实现要点也主要聚焦于此,我们通过观察KES系统表和物理存储路径的变化来对二者进行对比。

首先分别创建普通表tbl和局部临时表temp,观察二者的元数据信息。

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\2730e386003845aff4fe6b7cb46bd9d0.png

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\05a0e6f5a97ce001acf4e81f14fa4b93.png

从图中可以看到,与普通表类似,局部临时表也在系统表中新建了一条记录。仔细观察可以发现二者所属的namespace有所区别,进一步查询namespace信息。

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\ac0e2d0e8d5d97aa39b9ef5acc56f667.png

查询系统表发现,KES为临时表单独创建了一个名称为”pg_temp_5”的namespace, 而普通表仍然创建到了public的namespace下。

接下来我们对比二者在物理存储上的不同。首先获取当前的数据库对象的oid, 当前oid为14457。

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\5dc6f453c04edb4c017b98af01fee038.png

进入到<data_path>/base/<database_oid>路径下,可以看到tbl表和temp分别存储在不同的路径下,且局部临时表temp有额外的前缀。当创建临时表的session 退出后,发现存储临时表的文件夹t5_16407已经被清理。

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\eb54d47c057865bb8cbf9ae66c005ea1.png

临时表的事务机制

临时表和普通表一样,采用相同的事务管理机制。需要指出的是,虽然临时表数据的生命周期短于普通表,但在执行DML操作时,仍会申请实际的事务ID而不是使用虚拟的事务ID,不过临时表不会记录WAL,故此节省了不必要的存储空间和故障恢复操作。

  1. 开启显式事务,查询当前事务是否申请了事务ID。

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\d815f4791c3195382a8354e8d8e37b20.png

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\d815f4791c3195382a8354e8d8e37b20.png

从图中可以看到,执行普通表的DML和临时表的DML操作均申请了事务ID。

(2) 开启显式事务执行普通表和临时表的DML操作。(事务状态会记录WAL,故此开启显式事务控制事务状态不发生改变)

C:\Users\majingwei\AppData\Roaming\Ktalk\localfiles\media\387fc028189922402a3671115915e758.png

可以看到在执行普通表的DML操作时,wal的lsn已经向前推进;而操作临时表时,lsn保持不变。

总结

本文介绍了临时表的主要特点,并结合实际操作对临时表的数据管理和事务机制进行了简要的介绍,有利于读者进一步增加对KES临时表功能的认知,有助于读者结合业务的实际场景应用临时表功能,同时还有助于协助解决应用临时表过程中的一些问题。

参考资料

提供该题目相关内容在产品手册中可以系统学习的位置,例如:

《 KingbaseES数据库概念 》中“数据库对象管理”章节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值