【数据库】Unlogged 表使用

【数据库】Unlogged 表使用

  • 前言
  • [普通表和Unlogged 表的写性能比较](#普通表和Unlogged 表的写性能比较)
  • [Unlogged 表崩溃和正常关闭测试](#Unlogged 表崩溃和正常关闭测试)
  • [Unlogged 表特点总结](#Unlogged 表特点总结)

前言

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

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

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

普通表创建和数据插入

先创建普通表

sql 复制代码
create table test(a int);

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

sql 复制代码
EXPLAIN analyze insert into test select generate_series(1,1000000)

输出如下:

执行时间为 744.469 ms

Unlogged 表创建和数据插入

先创建Unlogged 表

sql 复制代码
create unlogged table testu(a int);

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

sql 复制代码
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通常用于存储中间结果,频繁变更的会话数据
相关推荐
Elastic 中国社区官方博客6 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.9 分钟前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐14 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_999916 分钟前
Redis-0-业务逻辑
数据库·redis·缓存
七牛云行业应用39 分钟前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云
自不量力的A同学1 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.1 小时前
Mysql
数据库·mysql
全栈前端老曹1 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道2 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议