searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

postgresql中的clog格式分析

2024-10-10 02:06:33
4
0

postgresql中的clog格式分析

1. CLOG是什么?

CLOG(Commit LOG)是 PostgreSQL 中用于记录事务提交和回滚状态的重要数据结构。它以文件的形式存储在数据库的事务管理目录中,确保系统能准确跟踪各个事务的状态。

2. 为什么要有 CLOG?

CLOG 的设计主要是为了支持事务的并发处理和隔离性。随着数据库的高并发使用,事务在同一时间内可能会提交或回滚。CLOG 通过记录每个事务的状态,帮助数据库系统决定哪些事务可以看到哪些更改,从而实现一致性和隔离性。

3. CLOG 的作用

  • 事务管理:CLOG 能够快速地检查事务的提交状态,从而有效管理事务的生命周期。
  • 支持并发:通过记录事务状态,CLOG 使得多个事务可以并发执行,而不会相互干扰,确保数据库一致性。
  • 故障恢复:在系统崩溃后,CLOG 可用于恢复事务状态,确保数据库能恢复到一致的状态。

4. CLOG 的格式

CLOG 的格式简单,每个事务 ID(XID)对应一个字节。这个字节的值指示事务的状态:

  • 0:事务未提交(in-progress)
  • 1:事务已提交(committed)
  • 2:事务已回滚(aborted)

CLOG 文件的大小和数量由 PostgreSQL 的配置决定,通常采用循环方式写入,以便高效管理和清理过期记录。

通过理解 CLOG,可以更深入地认识 PostgreSQL 的事务处理机制,增强对数据库行为的掌控。

clog的解析例子

clog计算偏移量

1 计算所处文件

 

xid为例子  1965879819

 

 1 每个页面xacts个数    8k * 8 /2 = 32768    

 

 page_number = xid / 32768      1965879819  / 32768 = 59993

Page_offset = xid % 32768           1965879819  % 32768 =  29195

 

File_number = xid / 32768 / 32    1965879819  /32768 / 32 = 1874

 

File_offset = xid / 32768 %32      1965879819  / 32768 % 32 = 25

 

 

 每个字节4xact

字节偏移 = Page_offset  / 4    1965879819  % 32768 / 4 = 7298

字节内位偏移 =(page_offset % 4  ) * 2      4

 

 

跳过前24

dd if=0752bak bs=8192 skip=24 count=1 of=page_data.bin

读第25页的 7298字节

od -An -tx1 -j7298 -N1 page_data.bin

这样就可以知道这个xid的提交状态了。

0条评论
0 / 1000
杨****填
1文章数
0粉丝数
杨****填
1 文章 | 0 粉丝
杨****填
1文章数
0粉丝数
杨****填
1 文章 | 0 粉丝
原创

postgresql中的clog格式分析

2024-10-10 02:06:33
4
0

postgresql中的clog格式分析

1. CLOG是什么?

CLOG(Commit LOG)是 PostgreSQL 中用于记录事务提交和回滚状态的重要数据结构。它以文件的形式存储在数据库的事务管理目录中,确保系统能准确跟踪各个事务的状态。

2. 为什么要有 CLOG?

CLOG 的设计主要是为了支持事务的并发处理和隔离性。随着数据库的高并发使用,事务在同一时间内可能会提交或回滚。CLOG 通过记录每个事务的状态,帮助数据库系统决定哪些事务可以看到哪些更改,从而实现一致性和隔离性。

3. CLOG 的作用

  • 事务管理:CLOG 能够快速地检查事务的提交状态,从而有效管理事务的生命周期。
  • 支持并发:通过记录事务状态,CLOG 使得多个事务可以并发执行,而不会相互干扰,确保数据库一致性。
  • 故障恢复:在系统崩溃后,CLOG 可用于恢复事务状态,确保数据库能恢复到一致的状态。

4. CLOG 的格式

CLOG 的格式简单,每个事务 ID(XID)对应一个字节。这个字节的值指示事务的状态:

  • 0:事务未提交(in-progress)
  • 1:事务已提交(committed)
  • 2:事务已回滚(aborted)

CLOG 文件的大小和数量由 PostgreSQL 的配置决定,通常采用循环方式写入,以便高效管理和清理过期记录。

通过理解 CLOG,可以更深入地认识 PostgreSQL 的事务处理机制,增强对数据库行为的掌控。

clog的解析例子

clog计算偏移量

1 计算所处文件

 

xid为例子  1965879819

 

 1 每个页面xacts个数    8k * 8 /2 = 32768    

 

 page_number = xid / 32768      1965879819  / 32768 = 59993

Page_offset = xid % 32768           1965879819  % 32768 =  29195

 

File_number = xid / 32768 / 32    1965879819  /32768 / 32 = 1874

 

File_offset = xid / 32768 %32      1965879819  / 32768 % 32 = 25

 

 

 每个字节4xact

字节偏移 = Page_offset  / 4    1965879819  % 32768 / 4 = 7298

字节内位偏移 =(page_offset % 4  ) * 2      4

 

 

跳过前24

dd if=0752bak bs=8192 skip=24 count=1 of=page_data.bin

读第25页的 7298字节

od -An -tx1 -j7298 -N1 page_data.bin

这样就可以知道这个xid的提交状态了。

文章来自个人专栏
postgresql内核分析
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0