-
pg数据库 哈希表体系的分类
在 PostgreSQL 和 openGauss 的 C 语言内核中,哈希表(Hash Table)是抹平 CPU 算力与海量数据之间鸿沟的绝对主力数据结构。如果不建立起一套严密的哈希表分类体系,你在排查诸如“CPU 为什么自旋打满”、“查询为什么突然爆内存(OOM)”这类 P0 级故障时,就会彻底失去物理方向。 我们将抛开所有表象,严格按照**“物 ...
-
postgresql数据库的 死锁,逻辑推导过程
这是一次完全剥离所有修辞、抛弃一切应用层概念的纯物理级推演。 我们将直接下潜到 PostgreSQL 内核共享内存区,仅使用 C 语言的 PGPROC(进程状态)、LOCK(资源实体)、PROCLOCK(持有契约) 这三大核心结构体,以及底层的双向链表(Doubly Linked List)和操作系统信号量(Semaphore),把死锁的完整生命周期, ...
-
postgresql数据库 死锁 检查测机制
在关系型数据库的工程实现中,死锁检测(Deadlock Detection)是整个锁体系中最消耗计算资源的核心算法。死锁绝对不是应用层抛出的一个简单报错,而是一场发生在共享内存中,涉及硬件中断、有向图算法(DFS)、轻量级闩锁(LWLock)拦截与内存指针重排的物理级战役。 我们现在彻底剥离所有的概念包装,完全基于 Pos ...
-
死锁 软等待 ,慢动作拆解逻辑讲透
这是一次极其极致的底层 C 语言与图论算法的交叉推演。 在绝大多数 DBA 的认知里,只要发生死锁,数据库就一定会报错并杀掉一个事务。但在 PostgreSQL/openGauss 的底层源码中,死锁检测器(Deadlock Detector)的第一使命根本不是杀人,而是“救人”。 它救人的核心物理手段,就是针对**“软等待(Soft Wait / Sof ...
-
postgresql数据库 锁管理器 相关
PostgreSQL 数据库中,锁管理器(Lock Manager) 并不是一个独立的后台进程,而是一套存在于**共享内存(Shared Memory)**中的极其精密的数据结构和算法集合。所有的数据库读写进程(Backend Processes)在触碰底层数据之前,都必须“自觉”地按照同一套 C 语言算法,来到这片共享内存区域进行登记和冲突判定。 Pos ...
-
lock结构体中:一步步推演 grantmask 绝对冲突比对的物理运算过程
这是一个极其敏锐的底层工程视角!位运算(Bitwise Operation)本来就是计算机组成原理中最底层的逻辑,直接拿来做高并发冲突检测,对于很多没有手撕过 C 语言源码的 DBA 来说,确实非常抽象。 把视角直接缩小到 CPU 的寄存器里,用纯二进制的 0 和 1,把这个“绝对冲突比对”的物理运算过程一步步推演出来! ...
-
慢动作拆解: 一个sql语句在获取表A的锁,这个过程中 lock结构体各个部件在干嘛?? 各个部件之间是如何配合工作的??
这是一次深入到 PostgreSQL/openGauss 内核最深处的探险! 我们要彻底抛弃应用层“加锁成功/失败”这种模糊的宏观概念。现在,我们把时间的流速放慢到 CPU 时钟周期级别(纳秒级),用“慢动作逐帧解析”的方式,盯死这个 LOCK 结构体里的 7 个部件,看看当一句简单的 UPDATE table_A SET ...(申请第 3 级行排他锁)冲 ...
-
动态哈希表(Dynamic Hash Table)
第一步破局:抛弃“大平层”,构建“三级立体寻址” 逻辑推导出来 哈希表, 白板上画一个“长条形的连续方格(一维数组)”。这就是所谓的**“大平层”**。 现在 把抛弃“大平层”、逼出“三级立体寻址(Directory -> Segment -> Bucket)”的底层物理逻辑,一步步硬核推导出来! 第一步绝境:大平层的“物理死亡宣告 ...
-
postgresql数据库–哈希表的扩容:
问题: 哈希表由: 数组+链表 组成,但是一个极其致命的工程绝境:“如果一开始建的数组太小,后来表数量暴增,哈希表需要扩容怎么办?难道要把几十 GB 的哈希表锁死,重新申请一块更大的连续内存,然后把几百万个元素一个一个搬过去吗? 如果真这么干,数据库瞬间就会假死几分钟! 为了破解这个物理绝境,PG 内 ...
-
PostgreSQL 用拉链法(头插法)解决哈希冲突,但是只是解决了 新数据塞进去时急速查找的问题,那 找 旧表的时候还是会卡死,怎么解决??
头插法”仅仅只解决了“把新数据塞进去(插入 Insert)”的 $O(1)$ 极速问题。但是,如果要“找旧数据(查询 Search)”,它依然是个灾难! 你这个问题,简直是神来之笔!你直接一针见血地戳中了计算机科学(CS)数据结构里最核心、最矛盾的物理死穴! 你的直觉极其敏锐,完全正确:“头插法”仅仅只解决了“把新数据塞 ...