首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Postgresql源码分析

    Postgresql源码(101)深入分析clog组提交(clog group updates)

    1.2 CLOG中的group_lsn Postgresql中的XLOG和CLOG是分开保存的,所以存在先写后写的问题。 场景一:XLOG落盘,CLOG没落盘 没问题,XLOG中有commit log,在redo中会重建clog。 场景二:XLOG没落盘,CLOG落盘 有问题:事务在clog中查询到已提交,但XLOG丢失redo无法恢复该事物,所以该事物应该是未提交状态,与CLOG矛盾——发生数据不一致。 of transactions */ #define CLOG_XACTS_PER_LSN_GROUP 32 /* keep this a power of 2 */ #define CLOG_LSNS_PER_PAGE (CLOG_XACTS_PER_PAGE / CLOG_XACTS_PER_LSN_GROUP) 每个逻辑组保存32个事务状态,每个页面有CLOG_LSNS_PER_PAGE个组。

    1.1K20编辑于 2023-03-01
  • 来自专栏Postgresql源码分析

    Postgresql源码(18)CLOG内存结构一图流

    CLOG中一个页面常称为SLOT。

    33320编辑于 2022-05-12
  • 来自专栏爱可生开源社区

    OB 运维 | OceanBase 4.1.0 clog 目录探究

    ---- 我们知道 clog 目录是存放 OceanBase 数据库记录修改操作的物理日志目录。目录具体的物理存放位置为 /data/log1/clustername/clog。 OceanBase 4.1.0 版本 clog 目录下不再是 OBServer 的 clog 文件,而是新增了一层目录:log_pool 和 tenant_id 两类目录。 才会将 clog 文件分配到租户的日志目录下。 3clog 磁盘使用控制 租户可使用的 clog 磁盘容量是有限度的,当租户 unit 的 clog 日志容量使用比例(log_disk_in_use/log_disk_size*100%)达到指定阈值 4clog 的使用量统计 在知道了 clog 目录结构之后,我们就可以通过计算租户目录下 clog 文件的生成量来统计租户每小时、每天的日志生成量,可以用于预估 OceanBase 备份盘的使用量。

    1.5K40编辑于 2023-08-18
  • 来自专栏数据库新发现

    PostgreSQL的clog—从事务回滚速度谈起

    clog为讨论单词,需要注意。 clog简介 ---- 第一个问题,什么是clog?或者换个说法,PG到底有哪些日志,它们分别是干啥的? #define CLOG_BITS_PER_XACT    2 #define CLOG_XACTS_PER_BYTE 4 #define CLOG_XACTS_PER_PAGE (BLCKSZ * CLOG_XACTS_PER_BYTE) #define CLOG_XACT_BITMASK    ((1 << CLOG_BITS_PER_XACT) - 1) #define TransactionIdToPage 当这个事务最终提交或者回滚的时候,其最终状态就会被记录入clog。 事务提交与回滚时候的clog操作 ---- 首先来说提交。

    2.9K20发布于 2019-06-19
  • 来自专栏PostgreSQL研究与原理解析

    PostgreSQL事务提交日志与CLOG操作初步认识

    1、CLOG脏页在checkpoint时刷写 CreateCheckPoint->CheckPointGuts->CheckPointCLOG SimpleLruFlush(ClogCtl, true 类型日志 xact_redo_commit TransactionIdCommitTree//标记CLOG为提交状态 CLOG在元组可见性判断中使用。 那么此时根据CLOG中记录的状态进行判断是否可见。若未提交,则不可见。这部分脏数据由后台vacuum进行进行回收。 当事务提交时,在XLogFlush后崩溃,则事务日志和commit日志都持久化完成,虽然事务状态未更新,但是可认为已提交,那么在恢复时,解析到commit时,将CLOG中事务状态更新。 若在XLogFlush前崩溃,那么事务未提交,如果其他事务将该事务的日志刷下去一部分,那么同样认为这是脏数据的日志,虽然将其回放恢复了,但在可见性判断时,未在CLOG中检查到其已提交,所以不可见。

    1.1K30发布于 2021-04-12
  • 来自专栏数据和云

    PostgreSQL的clog—从事务回滚速度谈起

    clog为讨论单词,需要注意。 clog简介 ---- 第一个问题,什么是clog?或者换个说法,PG到底有哪些日志,它们分别是干啥的? #define CLOG_BITS_PER_XACT 2#define CLOG_XACTS_PER_BYTE 4#define CLOG_XACTS_PER_PAGE (BLCKSZ * CLOG_XACTS_PER_BYTE 当这个事务最终提交或者回滚的时候,其最终状态就会被记录入clog。 事务提交与回滚时候的clog操作 ---- 首先来说提交。 ,后续读取的时候,就不需要回查clog了。

    1.9K20发布于 2019-06-13
  • 来自专栏Postgresql源码分析

    Postgresql源码(22)CLOG内存结构一图流

    CLOG中一个页面常称为SLOT。

    24820编辑于 2022-07-14
  • 来自专栏Postgresql源码分析

    Postgresql源码(19)Clog使用的Slru页面淘汰机制

    SLRU页面选择函数SlruSelectLRUPage:选择一个空的或淘汰一个SLOT(可能触发IO),返回一个可用SLOT

    31050编辑于 2022-05-12
  • 来自专栏Postgresql源码分析

    Postgresql源码(23)Clog使用的Slru页面淘汰机制

    SLRU页面选择函数SlruSelectLRUPage:选择一个空的或淘汰一个SLOT(可能触发IO),返回一个可用SLOT

    29010编辑于 2022-07-14
  • 来自专栏用户5892232的专栏

    PostgreSQL技术大讲堂 - 第22讲:CLOG作用与管理

    第22讲:CLOG作用与管理 内容1: PostgreSQL CLOG概述 内容2: CLOG作用与管理 内容3: 诊断当前用到的CLOG块 内容4: 删除不需要的CLOG文件 CLOG概述 CLOG用来记录事务号的状态 CLOG由一个或多个8KB页组成。CLOG在逻辑上形成一个数组,数组的每个元素对应事务ID号和事务状态。 CLOG的信息同样会被记录到wal日志中,当数据库异常中断时,CLOG的信息会从wal日志还原。 CLOG存放在缓存中,当checkpoint时开始刷新到CLOG文件中。 Commit Log · CLOG工作方式 · CLOG如何维护 数据库正常关闭或者检查点发生时,clog数据写入pg_xact目录下的文件中 命名习惯:0000 0001 …… 数据库启动时从pg_xact 4) block; block ------- 0 删除不需要的CLOG文件 · 删除CLOG文件 当发生急性冻结时会更新pg_database.datfrozenxid的值,此时,如果某些CLOG文件不包含包含最小

    64910编辑于 2023-07-14
  • 来自专栏Postgresql源码分析

    PostgreSQL的clog属于日志还是数据,需要遵守write-WAL-before-data吗?

    在PG中事务状态可以从几个路径获取: 在快照中查询(活跃事务) 在元组头的状态为查询(不活跃事务) 在CLOG中查询(不活跃事务) 如果不看实现只看概念,不活跃事务提交状态也可以在XLOG中查询,CLOG 所以在write-WAL-before-data中,CLOG也会按照data来处理,只有XLOG属于WAL。 Postgresql中clog写盘实现SlruPhysicalWritePage postgresql中clog使用SLRU机制读写,在Slru写盘前,会有保证xlog先写的机制: group_lsn表示

    77820编辑于 2023-02-28
  • 来自专栏爱可生开源社区

    OB 运维 | OceanBase 是如何关闭主备线程的?

    2OceanBase 中的 stop slave 下面通过几个实验,来验证 clog 是如何影响 OceanBase 主备集群状态的。 实验 1:关闭 clog,集群是否可用? 关闭 clog 同步(在主集群 sys 租户上操作)。 验证一下,当 【主备集群 clog 同步断开时间】 > 【clog 的保留时间】,再次开启主备集群间的 clog 同步,新数据是否丢失? 修改 clog 保留天数为 1 天: MySQL [(none)]> ALTER SYSTEM SET clog_expire_days=1; 1 天后,主集群插入新数据。 原理:当开启主备集群 clog 同步,会自动检测数据一致性,如发现数据不一致,会自动拉取基线数据进行同步。 4:停止 clog 同步后,备集群是否可用?

    61120编辑于 2023-08-18
  • 来自专栏bit哲学院

    cout/cerr/clog之异同极其重定向

    在看到“初识输入输出”这一小节时,见书中提到了cout/cerr/clog三个输出对象,但说得又不分明,于是百度了一下,学习了这三者间的异同以及重定向方法,但同时又发现网上关于重定向的说法和我的实测结果不吻合 <<"clog"<<std::endl;     return 0; }  编译生成D:\EX01.exe。 1> D:\ex01.txt  屏幕上输出:  cerr  clog  而文本“cout”已经被重定向输出到了D:\ex01.txt中。  若执行命令D:\>EX01.exe 2> D:\ex01.txt  屏幕输出:  cout  此时,文本“cerr”和“clog”都被重定向输出到了D:\ex01.txt中。  例2. 内部重定向  下面以对cerr输出流的重定向为例,cout和clog也可同样操作。 

    1.6K30发布于 2021-02-25
  • 来自专栏防止网络攻击

    C++输入流和输出流介绍

    除此之外,<iostream> 头文件中还声明有 2 个 ostream 类对象,分别为 cerr 和 clog。 cout、cerr 和 clog 之间的区别如下: cout 除了可以将数据输出到屏幕上,通过重定向(后续会讲),还可以实现将数据输出到指定文件中;而 cerr 和 clog 都不支持重定向,它们只能将数据输出到屏幕上 除了以上 2 点特性上的不同之外,cerr、clog 和 cout 没有任何不同。之所以我们常用 cout,是因为 cerr 和 clog 有各自不同的适用场景。 c.biancheng.net cerr:http://c.biancheng.net clog:http://c.biancheng.net 注意,此程序中并没有考虑 cerr 和 clog 各自特有的含义 ,这里仅是为了演示 cerr 和 clog 的基础用法,不建议读者这样使用。

    72020编辑于 2023-10-14
  • 来自专栏AustinDatabases

    POSTGRESQL 事务控制(二) 事务开启 (写着费力,看着费劲系列)

    在继续往下说之前,我们的提到clog, 这是理解后面要提到的一些事情的前提, 在POSTGRESQL 中clog 是记录每一个事务相关的xid, 以及事务的提交状态, 状态包含了 执行中, 已提交, 中断 那么clog 承担了对整体事务状态的记录和查询的任务. 下面是一段clog 代码和 xidstatus的状态结构 从上面两个图中可以得到的信息 CLOG_BITS_PER_XACT 2 一个事务使用2BIT CLOG_XACTS_PER_BYTE 4 一个字节记录4个事务 CLOG_XACTS_PER_PAGE (BLCKSZ*CLOG_XACTS_PER_BYTE) 一个页面记录(8196*4=32784) 个事务 ((xid) ) / CLOG_XACTS_PER_BYTE) 最后的公式是计算事务信息存在在字节内的偏移量 ((xid) % (TransactionId) CLOG_XACTS_PER_BYTE) 如果要知道

    1.2K51发布于 2021-09-24
  • 来自专栏appuploader使用操作流程

    开心档之C++ 基本的输入输出

    头文件 函数和描述 <iostream> 该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。 标准日志流(clog) 预定义的对象 clog 是 iostream 类的一个实例。clog 对象附属到标准输出设备,通常也是显示屏,但是 clog 对象是缓冲的。 这意味着每个流插入到 clog 都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出。 通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。 所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

    77910编辑于 2023-02-16
  • 来自专栏iOS开发大全

    开心档之C++ 基本的输入输出

    头文件 函数和描述 <iostream> 该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。 标准日志流(clog) 预定义的对象 clog 是 iostream 类的一个实例。clog 对象附属到标准输出设备,通常也是显示屏,但是 clog 对象是缓冲的。 这意味着每个流插入到 clog 都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出。 通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。 所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

    42920编辑于 2023-04-21
  • 来自专栏PostgreSQL研究与原理解析

    PostgreSQL MVCC可见性判断

    2)Clog PostgreSQL 在 CLOG 中维护事务的状态,持久化存储在 pg_xact 目录下,为了访问高效,会在内存中维护一块共享内存用于缓存 CLOG 的内容。 Clog buffer大小为Min(128, Max(4, NBuffers / 512)),初始化函数为CLOGShmemInit。启动时会从pg_xact读取事务状态加载到内存。 系统运行过程中,vacuum会定时将不再使用的clog文件清理。 3)Hint 在进行可见性判断时,需要获取事务的状态,即元组中 t_xmin 和 t_xmax 的状态,这些事务状态保存在 CLOG 中,为加速获取事务状态的过程,PostgreSQL 引入了 Hint 所有 Hint Bits,就是把事务状态直接记录在元组头中(HeapTupleHeaderData),避免频繁访问 CLOG,元组头中对应的标识位如下:tuple->t_infomask #define

    1.9K00发布于 2020-03-12
  • 来自专栏Postgresql源码分析

    Postgresql-xl全局快照与GTM代码走读(支线)

    》 《Postgresql源码(65)新快照体系Globalvis工作原理分析》 《Postgresql快照优化Globalvis新体系分析(性能大幅增强)》 《Postgresql源码(23)Clog 页面淘汰机制》 (第一篇PG视角、下一篇GTM视角) (前面是乱七八糟的一些概念,最后一部分是GDB走读) 1 概念 1.1 集群MVCC Postgres-xl基本上使用PG提供的xmin、xmax、clog ClusterMonitorCtl->gtm_recent_global_xmin = newOldestXmin; 5 CLOG扩展 5.1 基础 《Postgresql源码(22)CLOG内存结构图示 CLOG中一个页面常称为SLOT。 ) + CLOG_XACTS_PER_PAGE - 1; // 如果上一次申请到了10000,现在需要的xid5000,clog页面够用直接返回。

    1.4K10编辑于 2022-08-03
  • 来自专栏Postgresql源码分析

    Postgresql-xl全局快照代码走读与GTM原理(支线1)

    》 《Postgresql源码(65)新快照体系Globalvis工作原理分析》 《Postgresql快照优化Globalvis新体系分析(性能大幅增强)》 《Postgresql源码(23)Clog (这篇是PG视角看GTM、后面在总结一篇GTM内部逻辑) (前面是一些概念,后面是GDB走读) 1 概念 1.1 集群MVCC Postgres-xl基本上使用PG提供的xmin、xmax、clog ClusterMonitorCtl->gtm_recent_global_xmin = newOldestXmin; 5 CLOG扩展 5.1 基础 《Postgresql源码(22)CLOG内存结构图示 CLOG中一个页面常称为SLOT。 ) + CLOG_XACTS_PER_PAGE - 1; // 如果上一次申请到了10000,现在需要的xid5000,clog页面够用直接返回。

    1.5K30编辑于 2022-11-30
领券