首页

分类:数据库原理

沿着这个主题继续阅读相关记录。

loading
新瓶装旧酒,再唠唠列对齐
数据库原理
前言PG 中的元组是按照列定义顺序存储的,而不同数据类型有不同的长度和对齐要求;如果列顺序不合理,就会产生额外 padding,导致行变大、page 中可容纳行数减少、I/O 增加、cache locality 下降等,合理调整列顺序,可以减少 padding,从而节省磁盘空间。并且...
聊聊 PG 中的并行顺序扫描
数据库原理
前言最近花了点时间看了下 PG 中的并行顺序扫描的实现,有了一些新的认知和思考。 页面如何分配?首先是页面分配的问题,假如现在有个表 t,总共 100 个页面,那这些页面是如何分配给多个 worker 的?是人人平等,还是动态分配,亦或是纯随机乱扫?其实对于并行顺序扫描,其核心机制是:多个 w...
PostgreSQL 性能洞察:扩展查询协议 vs 简单查询协议
数据库原理
前言 大学时,我了解到使用预备语句是最佳实践 —— 主要是因为它们有助于防止 SQL 注入,并且大多数驱动程序都默认支持。很多人强调这是使用它们的关键原因,但我从未完全理解它们背后的工作原理。所以,今天,一个空闲的星期六,我决定深入研究一下它们。 目录 消息流概述 PostgreSQL 客户...
性能退化?隐藏于Index‑Only Scan背后的实现细节
数据库原理
前言关于 vacuum full,我们都知晓其作用,收缩空间、移除死元组和冻结元组,那么正常来说,查询性能肯定是可以得到提升的,比如缓存效率,那么什么情况下,vauum full 了之后,性能反而会退化呢?这个问题来自老虎刘大师,周末抽空研究了一下。 PG 的 vacuum full 会把 ...
聊一聊 PostgreSQL 中的各种物化
数据库原理
前言PostgreSQL 中有各种各样的”物化”操作,比如熟知的物化视图,物化算子等等,12 版本之后,针对 CTE,还引入了 not materialized 关键字,允许内联等等,让我们一探究竟。 物化视图物化视图就不再过多描述了,目前社区还不支持增量刷新,pg_ivm 也存在着诸多限制,...
命名不规范,事后泪两行
数据库原理
前言前阵子在群里又看到一则由于命名导致的坑爹案例,在 PostgreSQL 中,索引、表、视图和序列共享相同的命名空间,因此,同一个模式下,不能拥有相同的名称。就是这样一个小问题,相信不少老油条也掉过坑里,借此机会也简单唠唠在建表时,我们需要注意的若干事项。 同名对象让我们复现一下当时的案发现...
函数的"延迟解析"是什么鬼?
数据库原理
前言今天在某个项目里进行迁移时,遇到一个比较 tricky 的问题 —— 迁移某个函数时报错: ERROR: schema “xxx” does not exist 检查了一下,目标库中确实不存在此模式,我去源库看了一下,这个函数定义中又确实引用了此模式下的某个类型,那这是为何?又是怎...
唯一键冲突导致的种种危害,你都知道吗?
数据库原理
前言首先,感谢各位读者以及新老朋友们对于《PostgreSQL 14 Internals》中文版的支持🔗 https://postgres-internals.cn/,上线两天,已经有约 5000 人进行了访问,另外针对读者反馈的 BUG 或建议,我也第一时间进行了修复和改进 (悄悄建了一个...
庖丁解牛,深入浅出无日志表
数据库原理
前言在 PostgreSQL 中,支持多种类型的表 — 临时表、普通表,以及无日志表,顾名思义,”无日志”其优势在于不用记录 WAL,那么写入速度自然也杠杠的,同理,无日志表在备库上没有数据 (只有一个壳),也无法进行访问,会提示 ERROR: cannot access temporary...