PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)

前端之家收集整理的这篇文章主要介绍了PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Postgresql数据库内核分析

目录

系统概述

  1. 初始化数据库:./initdb --no-locale -D ../data@H_301_20@
  2. ./pg_ctl start -D ../data@H_301_20@
  3. 数据库命令:initdb createuser dropuser createdb dropdb pg_dump pg_restore pg_ctl vacuumdb psql@H_301_20@
  4. psql元命令:\? \o \l \q \c \dt \d \di \i (sql);@H_301_20@

体系结构

  1. 主要系统表及其依赖关系
    1. pg_namespace(nspname,nspowner,nspacl)@H_301_20@
    2. pg_tablespace(spcname,spcowner,spclocation,spcacl)@H_301_20@
    3. pg_database@H_301_20@
    4. pg_class@H_301_20@
    5. pg_type@H_301_20@
    6. pg_attribute@H_301_20@
    7. pg_index@H_301_20@
    @H_301_20@
  2. 系统视图:pg_cursors pg_group pg_indexes pg_locks pg_roles pg_rules ...@H_301_20@
  3. 数据集簇
    1. 表/索引:超过1G分裂,filenode.1 ...@H_301_20@
    2. 如果有些属性药存储大数据,那么就会有关联的TOAST表@H_301_20@
    3. PG_DATA中的子目录和文件:PG_VERSION base global pg_clog pg_tblspc ...@H_301_20@
    4. postgres.bki@H_301_20@
    5. initdb的执行过程@H_301_20@
    6. 系统数据库:template1 template0 postgres@H_301_20@
    @H_301_20@
  4. 进程结构:Postmaster Postgres SysLogger PgStat AutoVacuum BgWriter WalWriter PgArch
    1. Postmaster
      1. MemoryContext@H_301_20@
      2. GUC配置参数@H_301_20@
      3. 信号处理:SIGHUP_handler pmdie reaper(清理退出的子进程)@H_301_20@
      4. 辅助进程启动@H_301_20@
      @H_301_20@
    2. 辅助进程
      1. WalWriter:段编号从0开始,不能循环使用@H_301_20@
      2. PgArch(WAL日志归档):直接调用shell命令?k@H_301_20@
      @H_301_20@
    3. Postgres@H_301_20@
    4. exec_simple_query@H_301_20@
    @H_301_20@

存储管理

  1. 外存管理:表文件、空闲空间、虚拟文件描述符(VFD)、大数据
    1. 8.2+ 可见性映射VM 空闲映射FSM@H_301_20@
    @H_301_20@
  2. 文件:表文件+元组之间不关联,{普通、临时、序列、TOAST}
    1. 物理结构:PageHeaderData Linp<N> ... Freespace .. Tuple<N> Special_space@H_301_20@
    2. “HOT技术”
      1. 一条元组的每个版本都有对应版本的索引 ==〉... 标记删除@H_301_20@
      @H_301_20@
    @H_301_20@
  3. 磁盘管理(SMGR)
    1. MdfdVec:vfd、segno、chain@H_301_20@
    @H_301_20@
  4. VFD机制
    1. LRU池(VfdCache)@H_301_20@
    @H_301_20@
  5. FSM
    1. p66 fp_next_slot@H_301_20@
    2. fsm_search 最大堆二叉树?@H_301_20@
    @H_301_20@
  6. VM:作为一个提示加快VACUUM速度@H_301_20@
  7. 大数据:
    1. TOAST:存储变长数据?如VARCHAR等,需超过2KB;线外/压缩2种存储机制@H_301_20@
    2. LOB@H_301_20@
    @H_301_20@
  8. 内存管理
    1. MemoryContext:AllocSet@H_301_20@
    2. 高速缓存:SysCache/RelCache@H_301_20@
    3. 缓冲池@H_301_20@
    4. IPC@H_301_20@
    @H_301_20@
  9. 表操作和元组操作
    1. 同步扫描(多个扫描时利用共享缓冲)@H_301_20@
    @H_301_20@
  10. VACUUM机制
    1. Lazy:标记无效为可用@H_301_20@
    2. Full@H_301_20@
    @H_301_20@
  11. ResourceOwner资源跟踪@H_301_20@

感觉这里的描述非常混乱

索引

  1. 索引方式
    1. 部分索引?CREATE INDEX idx ON student(name) WHERE (id>1 AND id<255);@H_301_20@
    2. 表达式索引?CREATE INDEX idx ON student(lower(name))@H_301_20@
    @H_301_20@
  2. pg_am:每个元组包括了该索引类型提供的访问函数(pg_proc.oid)?@H_301_20@
  3. B-Tree索引
    1. 每个非最右节点:High-Key@H_301_20@
    2. BTWriteState:记录整个索引创建过程中的信息@H_301_20@
    3. 对每一层生成一个BTPageState,其btps_next指向父节点(?)@H_301_20@
    4. 填充因子:... WITH (fillfactor=70);@H_301_20@
    5. 扫描索引@H_301_20@
    @H_301_20@
  4. Hash索引
    1. 4种页:Meta(0#) bucket overflow(桶里的元素) bitmap(管理前两者的使用情况)@H_301_20@
    @H_301_20@
  5. GiST
    1. Consistent(E,q) Union(P) Same(E1,E2) Penalty(E1,E2) PickSplit(P) Compress(E) Decompress(E)@H_301_20@
    2. GISTInsertStack?@H_301_20@
    @H_301_20@
  6. GIN
    1. compare、extractValue、extractQuery、consistent(类似于hashtable的equals?)、comparePartial@H_301_20@
    @H_301_20@
  7. TSearch2@H_301_20@

查询编译

  1. 查询分析@H_301_20@
  2. 查询重写@H_301_20@
  3. 查询规划:查询树链表 => 执行计划链表
    1. 在路径生成过程中,每生成一个中间关系,要估算出大小、路径及代价
      1. DP、GA@H_301_20@
      2. 基本关系访问路径@H_301_20@
      3. 索引扫描路径@H_301_20@
      4. TID(元组的物理地址?)@H_301_20@
      @H_301_20@
    2. 生成可优化的MIN/MAX聚集计划@H_301_20@
    3. 生成普通计划
      1. 扫描:顺序/索引@H_301_20@
      2. 连接:嵌套循环、Hash、归并@H_301_20@
      3. 其他:Append、Result、物化@H_301_20@
      @H_301_20@
    4. 生成完整计划(+聚集/排序)@H_301_20@
    5. 整理计划树@H_301_20@
    @H_301_20@
  4. 代价估计@H_301_20@
  5. 遗传算法@H_301_20@

查询执行

  1. 非可优化语句@H_301_20@
  2. 可优化语句@H_301_20@
  3. 计划节点
    1. 控制:Result Append BitmapAnd/Or RecursiveUnion@H_301_20@
    2. 扫描:Seq Index BitmapHeap BitmapIndex Tid Subquery Function Values Cte WorkTable@H_301_20@
    3. 物化:Material Sort Group Agg Unqiue Hash SetOp Limit WindowAgg @H_301_20@
    4. 连接:类型(Inner Left/Right/Full_Outer Semi Anti)、操作@H_301_20@
    @H_301_20@
  4. 其他子功能
    1. 元组操作@H_301_20@
    2. 表达式计算@H_301_20@
    3. 投影@H_301_20@
    @H_301_20@

事务处理与并发控制

  1. TBlockState@H_301_20@
  2. 2PC@H_301_20@
  3. 3种锁
    1. SpinLock@H_301_20@
    2. LWLock@H_301_20@
    3. RegularLock@H_301_20@
    @H_301_20@
  4. 锁管理机制@H_301_20@
  5. 死锁
    1. 等待图(WFG)@H_301_20@
    @H_301_20@
  6. MVCC(这里讲解似乎不够清晰)@H_301_20@
  7. 日志管理:XLOG/CLOG
    1. SLRU缓冲池@H_301_20@
    2. SUBTRANS日志管理器?@H_301_20@
    3. MULTIXACT日志管理器:记录组合事务ID?@H_301_20@
    @H_301_20@

数据库安全

附录A 用Eclipse开发和调试

原文链接:https://www.f2er.com/postgresql/195526.html

猜你在找的Postgre SQL相关文章