LightDB unlogged table 和 temp table

unlogged 表

如何创建

创建 unlogged 表需要在 create table 时显示的使用 UNLOGGED 指定;

特点

1. unlogged table 不会写 WAL 日志,也不会同步到 standby,所以速度比普通表快非常多,以下是在虚拟机中使用 ltbench 测试的结果,可以看出,unlogged 表的性能是普通表的 2 倍:

$ ltbench -s 100 -i -p 12345 postgres
$ ltbench -c 8 -j 1 -T 30 -P 1 -p 12345 postgres
starting vacuum...end.
progress: 1.0 s, 1035.9 tps, lat 7.499 ms stddev 2.105
progress: 2.0 s, 1071.0 tps, lat 7.452 ms stddev 2.805
progress: 3.0 s, 1179.1 tps, lat 6.771 ms stddev 1.472
progress: 4.0 s, 1216.9 tps, lat 6.558 ms stddev 1.495
progress: 5.0 s, 1003.8 tps, lat 7.960 ms stddev 3.295
progress: 6.0 s, 1083.0 tps, lat 7.366 ms stddev 1.976
progress: 7.0 s, 1108.3 tps, lat 7.190 ms stddev 2.020
progress: 8.0 s, 1169.9 tps, lat 6.824 ms stddev 1.632
progress: 9.0 s, 993.0 tps, lat 8.048 ms stddev 7.508

$ ltbench -s 100 -i -p 12345 --unlogged-tables postgres
$ ltbench -c 8 -j 1 -T 30 -P 1 -p 12345 postgres
starting vacuum...end.
progress: 1.0 s, 1951.9 tps, lat 3.988 ms stddev 1.406
progress: 2.0 s, 1908.0 tps, lat 4.185 ms stddev 1.724
progress: 3.0 s, 1972.5 tps, lat 4.050 ms stddev 1.335
progress: 4.0 s, 2031.4 tps, lat 3.924 ms stddev 1.277
progress: 5.0 s, 2040.0 tps, lat 3.917 ms stddev 1.376
progress: 6.0 s, 1981.1 tps, lat 4.026 ms stddev 1.450
progress: 7.0 s, 1986.0 tps, lat 4.016 ms stddev 1.343
progress: 8.0 s, 1780.2 tps, lat 4.484 ms stddev 1.653
progress: 9.0 s, 1434.6 tps, lat 5.562 ms stddev 1.802

2. 此外在 session 结束或数据库正常关闭时,unlogged 表的定义和数据都会被保留,但如果发生 crash 或 unclean shutdown,则其中的数据会被清除;

temp 表

如何创建

创建 temp 表需要在 create table 时显示的使用 TEMPORARY   TEMP 指定,并且支持设置 on commit

  1. PRESERVE ROWS:行为是事务结束时保留所有数据(默认行为);
  2. DELETE ROWS:行为是事务结束时删除 (truncate) 所有数据;
  3. DROP:行为是事务结束时删除表;

SQL 标准区分了 GLOBAL 临时表和 LOCAL 临时表。出于 SQL 标准兼容性考虑,LightDB  在临时表声明中接受 GLOBAL 和 LOCAL 关键字,但它们目前没有任何效果。所以不建议使用这些关键字;

特点

1. 会话隔离性:

创建临时表后,不但不同会话间的数据是相互隔离的,就连临时表的定义也是不同会话间相互隔离的,也就是一个会话创建的临时表,不能被其他会话看到,如下图所示:

session1:创建了临时表 tmp

session2:以另一个会话登录相同用户名和数据库,查看 session1 中创建的临时表,既不能查询表,也不能查看表结构,但可以通过系统视图看到该临时表的存在

2. 易挥发性:

LightDB 中的临时表的生命周期最长就是会话生命周期,甚至更短,如图所示:

 上图是前面session1退出会话后,再次登录查询之前创建的临时表tmp,已经查不到了,哪怕是临时表定义也没了。

此外,在创建PostgreSQL 临时表时,还可以设置相关选项,使得临时表在事务结束时消失,哪怕会话没结束,也会消失,如图所示:

3. 数据的易挥发性:

通过 on commit drop 选项可以设置事务结束临时表就消失外,还可以通过on commit相关选项,分别控制临时表的数据在事务结束消失(仅仅数据消失,定义还存在)和会话结束消失(数据和表定义都消失),如下通过on commit delete rows定义了临时表:

默认为ON COMMIT PRESERVE ROWS,事务结束时,数据依然还会存在,直到会话结束为止。

 

 

比较

unlogged tabletemp table
定义持久化可持久化无法持久化
数据持久化可持久化,但异常时会被清空无法持久化
是否写 wal 日志
是否 standby
会话隔离不隔离隔离

更多

更多细节请查看 LightDB 官方文档  http://www.postgres.cn/docs/13/sql-createtable.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值