PostgreSQL multixact日志管理器说明

MultiXactID日志是uxdb系统用来记录组合事务ID的一种日志。由于uxdb采用了多版本并发控制,因此同一个元组相关联的事务ID可能有多个,为了在加锁(行共享锁)的时候统一操作,uxdb将与该元组相关联的多个事务ID组合起来用一个MultiXactID代替来管理。同CLOG、Subtrans日志一样,MultiXact日志也是利用SLRU缓冲池来实现。

MultiXact日志管理器相关数据结构

MultiXactID是一个多对一的映射关系,需要在事务ID数组中标记哪一段映射到一个MultiXactID。所以在映射的过程中需要存储两种信息,即需要标志一段事务ID的偏移量(Offset),还需要激励这段偏移量的大小(nMembers)。

由于需要对MultiXactdID的分配进行维护,于是定义了数据结构MultiXactStateData。

MultiXactStateData用来管理和维护MultiXactID,另外还需要定义一个统一的接口来操作MultiXactID,即存储这种多对一的映射关系,uxdb定义mXactCacheEnt来完成此工作。

multixact日志存储在uxdata/ux_multixactd/目录下,其中会有两个子目录members和offset,分别存储XactID成员和偏移量。从一个MultiXactID映射到具体的存储位置是通过下面的变换来完成的:

TODO

MultiXact日志的缓冲区用两个slru缓冲池来实现,分别是MultiXactOffsetCtl和MultiXactMemberCtl,分别记录Members和Offsets。在uxdb启动后,就注册在共享内存中,管理全局的MultiXactID。

MultiXact日志管理器主要操作

同CLOG日志管理器一样,MultiXact日志管理器的操作包括Multixact日志系统的启动、关闭、检查点操作,以及MultiXactID的创建、扩增等。

Multixact的创建

改操作定义在函数MultiXactIdCreate中。MultiXactID的创建指的是将两个XID组合成一个整体,结果返回一个MultiXactID,用来代替这两个XID。创建过程如下:

  1. 首先在当前进程MXactCache中查找这两种XID的组合是不是已经生成了一个MultixactID,如果已经生成,直接返回MultiXactID即可。

  2. 调用GetNewMultiXactId函数从共享内存MultiXactState中获得一个新的MultiXactID,并更新MultiXactState中的nextMXact和nextOffset。

  3. 向XLOG中写入当前操作的日志,记录当前分配得到的MultiXactID以及组合成该MultiXactID的Xids链表和数量。

  4. 最后将该MultiXactID以及相关Xids更新到本地缓存中,返回MultiXactID。

Multixact的扩增

该操作定义在函数MultiXactIdExpand中。我们知道,一个MultiXactID可以对应多个Xid,而上面的MultiXactID的创建只能完成两个Xid到一个MultiXactID的映射过程,于是定义了MultiXactIdExpand()来完成MultiXactdID的扩增,即将一个Xid加入到该MultiXactID对应的Xids队列中。

  1. 首先有MultiXactID找到对应的Xids队列和数量。

  2. 检查该MultiXactID是否有对应成员存在,若不存在,创建一个仅由该Xid组成的MultiXactID返回即可。

  3. 检查该Xid是否已经在当前MultiXactID对应的Xids中,若存在,直接返回即可。

  4. 将该MultiXactID对应的Xids链表取出,将新增的Xid放到其末尾,然后重新调用MultiXactdIdCreate()得到新的MultiXactID,最后返回该值。

检测MultiXact是否在运行中

该操作定义在函数MultiXactIdIsRunning中,其逻辑比较简单,当该MultiXactID中的任何一个成员属于当前事务ID或者正在运行中,则认为该MultiXactID也在运行中。

4)Multixact日志系统的启动

该操作定义在函数StartupMultiXact中,一般在Uxdbmaster启动时通过调用StartupXlog进而调用StartupMultiXact。主要功能是用来初始化管理MultiXactID的偏移量和成员的两个slru缓冲池。

5)Multixact日志系统的关闭

该操作在函数ShutdownMultiXact中定义,用来完成MultiXactID日志系统的关闭。通过调用SimpleLruFlush函数将管理MultiXactID的偏移量和成员的两个slru缓冲池刷新到磁盘即可。

6)MultiXact日志系统检查点操作

在创建检查点时,MultiXactID日志系统也需要刷新到磁盘,所以CheckPointMultiXact用来将管理MultiXactID的偏移量和成员的两个slru缓冲池刷新到磁盘。与MultiXact日志的关闭不同的是,在这个刷新的过程中,允许其他进程向缓冲池中写日志。

PostgreSQL multixact日志管理器说明相关推荐

  1. 码农技术炒股之路——配置管理器、日志管理器

    配置管理器和日志管理器是项目中最为独立的模块.我们可以很方便将其剥离出来供其他Python工程使用.文件的重点将是介绍Python单例和logging模块的使用.(转载请指明出于breaksoftwa ...

  2. KBMMW 的日志管理器

    kbmmw 4.82 最大的新特性就是增加了 日志管理器. 新的日志管理器实现了不同类型的日志.断言.异常处理.计时等功能. 首先.引用kbmMWLog.pas 单元后,系统就默认生成一个IkbmMW ...

  3. java日志——修改日志管理器配置+日志本地化

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java日志--修改日志管理器配置+日志本地化 的相关知识: [1]修改日志管理器配置 1.1 ...

  4. Canal binlog 日志管理器与GTID简介

    本节目录 1.Canal 位点管理(日志管理器) 1.1 类图 1.2 日志管理器使用方法 2.MySQL GTID 扫盲 正如上文提到的那样,在 Canal Instance 启动的时候,首先会查询 ...

  5. Java学习day051 记录日志(基本日志、高级日志、修改日志管理器配置、本地化、处理器、过滤器、格式化器、日志记录说明)

    使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识. day051   记录日志(基本日志.高级日志.修改日志管理器配置.本地化.处理器.过滤器.格式化器 ...

  6. .Net下几种日志管理方法

    .Net下几种日志管理方法 日志是应用程序中不可缺少的一部份,不仅可以记录应用程序的运行状态,还可以记录一些BUG,便于应用程序的更新与修改. 在.Net有好几种方法可以对日志进行管理. 1.数据库日 ...

  7. 6.2.1 副本管理器

    如图6-42所示,上一节将日志作为人- ,分析了日志的读写,但并没有分析日志相关的上下文.本节会从服务端的人- 出发,通过副本管理器.分区.副本,一直到日志,将整个读写流程串联起来.图中分区到日志的虚 ...

  8. 【笔记】最佳日志管理工具:51个有用的日志管理、监视、分析等工具

    最佳日志管理工具:51个有用的日志管理.监视.分析等工具 痛苦的纯文本日志管理日子一去不复返了.虽然纯文本数据在某些情况下仍然很有用,但是在进行扩展分析以收集有洞察力的基础设施数据并改进代码质量时,寻 ...

  9. NetSniper网络尖兵:宽带网络运营维护管理器

    NetSniper网络尖兵是上海上大雷克网络系统有限公司开发的网络接入检测及控制器.它可以自动检测出网络中私自架设的代理服务器系统或非法路由器,并对通过非法代理服务器的IP包以及流向非法路由器的IP包 ...

最新文章

  1. Python数据可视化教程之基础篇
  2. 数据库数据用Excel导出的3种方法
  3. 还有王法吗?美国联邦调查局开发人脸识别系统,数据源涉及公民隐私
  4. CentOS7.2基于LAMP搭建WordPress,并自定义Logo和名称
  5. openfire安装配置完全教程
  6. 搜索引擎-倒排索引基础知识
  7. 开始协议处理句柄_基于smb协议的wmiexec浅析
  8. Android演示Stack(课下作业)
  9. Linux环境下查看CPU资源的命令
  10. 深入理解JVM-类加载器深入解析(3)
  11. python的plot如何实时更新中_python中plot实现即时数据动态显示方法
  12. java 3dm_3dm游戏运行库合集安装包-游戏运行库合集安装包下载v3.0DM整理-西西软件下载...
  13. 致我们终将远离的子女
  14. 实测Maven上传jar包到私服的方法归纳
  15. 华硕路由虚拟服务器设置方法,华硕路由虚拟服务器设置方法
  16. Cyberdog——小米四足机器人测评
  17. 二十岁决定男人的一生
  18. 计算机教育杂志有核心期刊吗,计算机教育杂志是核心期刊吗?
  19. 计算机PPT教材教法,小语教材教法讲义课件_电脑基础知识_it计算机_专业资料.ppt...
  20. [FJOI 2016]bzoj 4408 神秘数 - 线段树

热门文章

  1. “1448万,一条命”:在生命面前,金钱显得太刺眼
  2. SpaceNet 6: Dataset Release -- MSAW
  3. html头像动画,用CSS3实现头像旋转效动画
  4. Linux的任督二脉之内存管理线上微信群直播报名(2018.1.29-2.2)
  5. 不同性能测试工具的并发模式
  6. Java三目运算符 (Ternary Operator ? :)
  7. 五、JDBC(复习)
  8. 成功路上并不拥挤,因为坚持的人不多
  9. okGo框架的使用,下载列表显示
  10. 新手指南:到国外域名注册商注册域名