【数据库】Unlogged 表使用

本文探讨了Unlogged表在PostgreSQL中的使用,对比了其与普通表在写性能上的差异,发现Unlogged表写入速度更快。同时,文章还介绍了Unlogged表在数据持久性、崩溃恢复和应用场景方面的特点。
摘要由CSDN通过智能技术生成


前言

大神偶像在开会上提及了Unlogged 表,它的特点很不错,很适合实时数据保存,像之前类似这种数据,就目前接触到的项目,一般架构选型时候会用MongoDb存储实时数据,或者就单独的普通表。由于之前没有接触过这种类型的表,学习了一下,才发现原来表还有区分,分为普通表、临时表、Unlogged 表,在此对Unlogged 表使用进行一个记录。

示例基于pg 数据库开始,数据库管理器用dbeaver,sql 指令中可以用 EXPLAIN analyze +sql 指令输出运行时间

普通表和Unlogged 表的写性能比较

普通表创建和数据插入

先创建普通表

create table test(a int);

然后用EXPLAIN analyze 以及sql 函数插入1000000条记录

EXPLAIN analyze insert into test select generate_series(1,1000000)

输出如下:
在这里插入图片描述
执行时间为 744.469 ms

Unlogged 表创建和数据插入

先创建Unlogged 表

create unlogged table testu(a int);

然后同样用EXPLAIN analyze 以及sql 函数插入1000000条记录

EXPLAIN analyze insert into testu select generate_series(1,1000000);

输出如下:
在这里插入图片描述
执行时间为 298.009 ms

比较结果

通过比较,很明显发现,写Unlogged 表的执行时间短很多。

Unlogged 表崩溃和正常关闭测试

在任务管理器中直接杀死PostgreSQL 主进程,由于DBeaver依旧开着,关闭后会自动启动PostgreSQL主进程。
在这里插入图片描述
此时再去查看创建的testu和test 表,普通表test 数据依旧在,但Unlogged 表testu已经全部清空。

但是如果是正常的关闭DBeaver,然后再打开,则Unlogged 表testu 数据依旧在。

Unlogged 表特点总结

  • unlogged table不记录wal日志(write ahead log 预写式日志),写入速度快,备库无数据,只有结构(unlogged table > 普通表(异步事务) > 普通表(同步事务));
  • 当数据库crash(崩溃)后,数据库重启时自动清空unlogged table的数据;
  • 正常关闭数据库,再启动时,unlogged table有数据
  • unlogged table通常用于存储中间结果,频繁变更的会话数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻傻虎虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值