【数据库】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通常用于存储中间结果,频繁变更的会话数据
相关推荐
huazhixuthink1 分钟前
PostgreSQL三种关闭方式的区别
数据库·postgresql
阿里小阿希5 小时前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
白鹭5 小时前
MySQL源码部署(rhel7)
数据库·mysql
666和7776 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗6 小时前
SpringMVC(一)
数据库
星期天要睡觉7 小时前
MySQL 综合练习
数据库·mysql
Y4090017 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
JosieBook8 小时前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql