新瓶装旧酒,再唠唠列对齐
数据库原理
前言PG 中的元组是按照列定义顺序存储的,而不同数据类型有不同的长度和对齐要求;如果列顺序不合理,就会产生额外 padding,导致行变大、page 中可容纳行数减少、I/O 增加、cache locality 下降等,合理调整列顺序,可以减少 padding,从而节省磁盘空间。并且...
PostgreSQL 如何走向更强的分析型执行路径?mxvector 的一次实践
数据库原理
前言最近笔者在 PGConf 上分享了一篇关于 YMatrix mxvector 的主题 —— How to implement high performance pluggable vectorized executor (PPT 可以下载了)
在这次分享中,我想分享的是 PostgreS...
聊聊 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...