【数据库】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通常用于存储中间结果,频繁变更的会话数据
相关推荐
zdl6862 小时前
EasyMarkets:“机器人商业化仍待验证”
数据库·机器人
Freak嵌入式2 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
Elastic 中国社区官方博客2 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
云和恩墨2 小时前
数据库一体机zData X 3.6.0以“性能、成本、韧性、生态”强化数据库基础设施价值主张
数据库
蓝鸟19742 小时前
EXISTS子查询SELECT 1与SELECT *到底有无区别?Oracle生产实测解惑(附HIS业务SQL案例)
oracle·his系统·sql优化·数据库调优·exists
灯澜忆梦2 小时前
【MySQL7】多表查询
数据库·sql
Qlittleboy3 小时前
tp5网站链接不上slqserver,计算机积极拒绝了链接
数据库·sql
行业研究员3 小时前
腾讯云数据库:团队知识统一检索实践
数据库·云计算·腾讯云·腾讯云数据库·团队知识
thinking_talk4 小时前
腾讯云数据库AgentMemory团队知识管理实践
数据库·人工智能·腾讯云·腾讯云数据库·agent memory·团队知识管理
朱容zr3331334 小时前
什么是覆盖索引?它的优点是什么?
数据库