CCH Blog

Thinking will not overcome fear but action will.

Heap Table数据格式

表和元组的组织形式 表和索引由一个或多个表文件组成, 每个表文件被分成固定长度的page(或者叫block), block大小由代码的宏定义BLCKSZ决定, 在单机PG中,该值为8KB(8192);在ADB PG中,该值为32KB(32768). 一个表文件由固定数量的block组成, 数量由宏定义RELSEG_SIZE决定, 该值为32768. 因此,一个表文件最大的size = R...

PG中的 xmax与 multixact机制(1)

0 之前一直认为Postgres中tuple头部信息的xmax只记录了删除/更新这条记录的事务号,为PG的MVCC机制服务。调试了一下PG行锁的实现机制,发现xmax所包含的信息没有那么简单,它还负责记录该tuple上的行锁以及行锁的模式信息(EXCLUDE/SHARE),以及持有该锁的事务号; 另外,因为多个事务可以持有某个行的SHARE锁,PG不可能将所有持有这个行锁的事务的事务号信息都...

postgres TOAST机制与源码解析

本文通过Postgres 的TOAST相关源代码, 解析postgres 的TOAST机制. 如果有错误, 欢迎大家指出. 什么是TOAST TOAST 全称为 The Oversized-Attribute Storage Technique, 是PostgreSQL 用来存储大数据量的字段的机制. 在PG中, 对于任意一张普通表, 如果表中存在字段可能需要toast的,都会有一张附属的...

postgres 查询处理流程分析

查询编译 PostgreSQL 从客户端接收一用户的SQL查询之后,backend得到的是一串SQL字符串,会先调用由lex 和 yacc编写的查询编译模块,将SQL字符串解析成内部的数据结构——ParseTree构成的链表,这一步主要通过pg_parse_query函数完成,这一步主要检查的是SQL的语法,如果存在语法错误,就是在这一步报错。PG的语法定义,可以看gram.y的源文件。 ...

一个关于Postgres Read Committed隔离级别的问题

问题 在看PostgreSQL9.6官方文档 第十三章13.2.1节时看到文档提到Read Committed的隔离级别在一些复杂的场景下会导致的问题,下面贴一些原文 More complex usage can produce undesirable results in Read Committed mode. For example, con- sider a DELETE c...

My First Post

Hello World, Hello Blog

Hey 这是我的第一篇博客。