PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)
2014-11-10 19:26
1071 查看
PostgreSQL数据库内核分析
跳转至:导航、
搜索
目录1系统概述2体系结构 3存储管理 4索引 5查询编译 6查询执行 7事务处理与并发控制 8数据库安全 9附录A 用Eclipse开发和调试 |
系统概述
初始化数据库:./initdb --no-locale -D ../data./pg_ctl start -D ../data
数据库命令:initdb createuser dropuser createdb dropdb pg_dump pg_restore pg_ctl vacuumdb psql
psql元命令:\? \o \l \q \c \dt \d \di \i (sql);
体系结构
主要系统表及其依赖关系pg_namespace(nspname, nspowner, nspacl)
pg_tablespace(spcname, spcowner, spclocation, spcacl)
pg_database
pg_class
pg_type
pg_attribute
pg_index
系统视图:pg_cursors pg_group pg_indexes pg_locks pg_roles pg_rules ...
数据集簇
表/索引:超过1G分裂,filenode.1 ...
如果有些属性药存储大数据,那么就会有关联的TOAST表
PG_DATA中的子目录和文件:PG_VERSION base global pg_clog pg_tblspc ...
postgres.bki
initdb的执行过程
系统数据库:template1 template0 postgres
进程结构:Postmaster Postgres SysLogger PgStat AutoVacuum BgWriter WalWriter PgArch
Postmaster
MemoryContext
GUC配置参数
信号处理:SIGHUP_handler pmdie reaper(清理退出的子进程)
辅助进程启动
辅助进程
WalWriter:段编号从0开始,不能循环使用
PgArch(WAL日志归档):直接调用shell命令?k
Postgres
exec_simple_query
存储管理
外存管理:表文件、空闲空间、虚拟文件描述符(VFD)、大数据8.2+ 可见性映射VM 空闲映射FSM
堆文件:表文件+元组之间不关联,{普通、临时、序列、TOAST}
物理结构:PageHeaderData Linp<N> ... Freespace .. Tuple<N> Special_space
“HOT技术”
一条元组的每个版本都有对应版本的索引 ==〉... 标记删除
磁盘管理(SMGR)
MdfdVec:vfd、segno、chain
VFD机制
LRU池(VfdCache)
FSM
p66 fp_next_slot
fsm_search 最大堆二叉树?
VM:作为一个提示加快VACUUM速度
大数据:
TOAST:存储变长数据?如VARCHAR等,需超过2KB;线外/压缩2种存储机制
LOB
内存管理
MemoryContext:AllocSet
高速缓存:SysCache/RelCache
缓冲池
IPC
表操作和元组操作
同步扫描(多个扫描时利用共享缓冲)
VACUUM机制
Lazy:标记无效为可用
Full
ResourceOwner资源跟踪
感觉这里的描述非常混乱
索引
索引方式部分索引?CREATE INDEX idx ON student(name) WHERE (id>1 AND id<255);
表达式索引?CREATE INDEX idx ON student(lower(name))
pg_am:每个元组包括了该索引类型提供的访问函数(pg_proc.oid)?
B-Tree索引
每个非最右节点:High-Key
BTWriteState:记录整个索引创建过程中的信息
对每一层生成一个BTPageState,其btps_next指向父节点(?)
填充因子:... WITH (fillfactor=70);
扫描索引
Hash索引
4种页:meta(0#) bucket overflow(桶里的元素) bitmap(管理前两者的使用情况)
GiST
Consistent(E,q) Union(P) Same(E1,E2) Penalty(E1,E2) PickSplit(P) Compress(E) Decompress(E)
GISTInsertStack?
GIN
compare、extractValue、extractQuery、consistent(类似于hashtable的equals?)、comparePartial
TSearch2
查询编译
查询分析查询重写
查询规划:查询树链表 => 执行计划链表
在路径生成过程中,每生成一个中间关系,要估算出大小、路径及代价
DP、GA
基本关系访问路径
索引扫描路径
TID(元组的物理地址?)
生成可优化的MIN/MAX聚集计划
生成普通计划
扫描:顺序/索引
连接:嵌套循环、Hash、归并
其他:Append、Result、物化
生成完整计划(+聚集/排序)
整理计划树
代价估计
遗传算法
查询执行
非可优化语句可优化语句
计划节点
控制:Result Append BitmapAnd/Or RecursiveUnion
扫描:Seq Index BitmapHeap BitmapIndex Tid Subquery Function Values Cte WorkTable
物化:Material Sort Group Agg Unqiue Hash SetOp Limit WindowAgg
连接:类型(Inner Left/Right/Full_Outer Semi Anti)、操作
其他子功能
元组操作
表达式计算
投影
事务处理与并发控制
TBlockState2PC
3种锁
SpinLock
LWLock
RegularLock
锁管理机制
死锁
等待图(WFG)
MVCC(这里讲解似乎不够清晰)
日志管理:XLOG/CLOG
SLRU缓冲池
SUBTRANS日志管理器?
MULTIXACT日志管理器:记录组合事务ID?
数据库安全
附录A 用Eclipse开发和调试
相关文章推荐
- VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程.
- Linux netfilter 学习笔记 之七 ip层netfilter的连接跟踪模块的概念及相关的数据结构分析
- Hadoop源码分析笔记(八):HDFS主要流程
- 数据结构笔记01 一些基本概念
- 听课笔记(第五讲): 学习的可行性分析(一些概念和思想) (台湾国立大学机器学习基石)
- 操作系统与应用程序的关系 操作系统主要可以分为两大部分:内核和内核之外的一些程序。内核就是直接控制最底层的硬件,而我们日常所用到的软件,大都是通过内核之外一些程序与内核之间的接口完成的,例如WINDO
- [原创] linux课堂-学习笔记-课程3.Linux目录结构介绍及内核与shell分析
- MySQL源码分析(4):InnoDB主要数据结构及调用流程
- Linux netfilter 学习笔记 之七 ip层netfilter的连接跟踪模块的概念及相关的数据结构分析
- tensorflow的一些代码分析(一) tensorflow基本流程和基本概念
- Word2vec基础介绍(一):主要概念和基本流程
- 数据库系统概念笔记-关系模型介绍
- 数据库系统概念笔记-关系模型介绍
- L2TP协议笔记1---L2TP概念及协议流程分析
- L2TP协议笔记1---L2TP概念及协议流程分析
- L2TP协议笔记1---L2TP概念及协议流程分析
- Elasticsearch介绍,一些概念的笔记
- 什么是cobol语言,主要用来干嘛用的!(最近在其它做银行或证券的项目组常听到的关键字,搜到了一些基本概念)
- 好久之前,就要想写一些东西了,就是没有一个适合的博客...
- 大师们 求了! 我想学关于网络的一些东东 求了好多 不知道 怎么入手 能不能 介绍点!谢谢了