Postgresql中clog与xid对应关系计算方法(速查表)

知道xid计算clog文件名

sql 复制代码
CREATE or REPLACE PROCEDURE get_clog_name(xid bigint) as
$$ 
DECLARE
    pageno bigint;
    segno bigint;
BEGIN
    -- 页面号:一个页面8K,一个字节8位能存4个事务的状态。
    pageno := xid / (8192 * 4);
    -- 段号:一个段(CLOG文件)256KB,能存32个8K页面。
    segno := pageno / 32;
    -- 段号的十六进制就是文件号。
    RAISE NOTICE 'xid:[%], pageno:[%], segno:[%], filename:[%]', xid, pageno, segno, to_hex(segno);
END $$ language plpgsql;

执行结果

sql 复制代码
call postgres=# call get_clog_name(4210000000);
NOTICE:  xid:[4210000000], pageno:[128479], segno:[4014], filename:[fae]

文件名为0FAE

知道clog文件名想计算xid范围

sql 复制代码
CREATE OR REPLACE PROCEDURE get_xid_range(clog_name TEXT) AS
$proc$
DECLARE
    file_number BIGINT; 
    start_xid BIGINT;
    end_xid BIGINT;
BEGIN
    execute 'select x''' || clog_name || '''::int' into file_number;
    raise notice '%',file_number;
    start_xid := file_number * 1048576;
    end_xid := (file_number + 1) * 1048576 - 1;
    raise notice 'XID Range: % to %' , start_xid,  end_xid;
END;
$proc$ LANGUAGE plpgsql;

使用

sql 复制代码
postgres=# call get_xid_range('0003');
NOTICE:  3
NOTICE:  XID Range: 3145728 to 4194303
CALL

-- 验证范围对不对?
postgres=# call get_clog_name(3145727);
NOTICE:  xid:[3145727], pageno:[95], segno:[2], filename:[2]
CALL
postgres=# call get_clog_name(3145728);
NOTICE:  xid:[3145728], pageno:[96], segno:[3], filename:[3]
CALL
postgres=# call get_clog_name(4194303);
NOTICE:  xid:[4194303], pageno:[127], segno:[3], filename:[3]
CALL
postgres=# call get_clog_name(4194304);
NOTICE:  xid:[4194304], pageno:[128], segno:[4], filename:[4]
CALL

clog与xid对应关系速查表

uint32 xid的单位是0 - 4294967295,42亿左右。

filename start end
0 0 1048575
1 1048576 2097151
2 2097152 3145727
3 3145728 4194303
4 4194304 5242879
5 5242880 6291455
6 6291456 7340031
7 7340032 8388607
8 8388608 9437183
9 9437184 10485759
A 10485760 11534335
B 11534336 12582911
C 12582912 13631487
D 13631488 14680063
E 14680064 15728639
F 15728640 16777215
10 16777216 17825791

...

...

filename start end
F0 251658240 252706815
F1 252706816 253755391
F2 253755392 254803967
F3 254803968 255852543
F4 255852544 256901119
F5 256901120 257949695
F6 257949696 258998271
F7 258998272 260046847
F8 260046848 261095423
F9 261095424 262143999
FA 262144000 263192575
FB 263192576 264241151
FC 264241152 265289727
FD 265289728 266338303
FE 266338304 267386879
FF 267386880 268435455
100 268435456 269484031
101 269484032 270532607
102 270532608 271581183
103 271581184 272629759
104 272629760 273678335
105 273678336 274726911
106 274726912 275775487
107 275775488 276824063
108 276824064 277872639
109 277872640 278921215
10A 278921216 279969791

...

...

filename start end
FF0 4278190080 4279238655
FF1 4279238656 4280287231
FF2 4280287232 4281335807
FF3 4281335808 4282384383
FF4 4282384384 4283432959
FF5 4283432960 4284481535
FF6 4284481536 4285530111
FF7 4285530112 4286578687
FF8 4286578688 4287627263
FF9 4287627264 4288675839
FFA 4288675840 4289724415
FFB 4289724416 4290772991
FFC 4290772992 4291821567
FFD 4291821568 4292870143
FFE 4292870144 4293918719
FFF 4293918720 4294967295
1000 4294967296 4296015871
1001 4296015872 4297064447
1002 4297064448 4298113023
1003 4298113024 4299161599
1004 4299161600 4300210175
1005 4300210176 4301258751
1006 4301258752 4302307327
1007 4302307328 4303355903
1008 4303355904 4304404479
1009 4304404480 4305453055
100A 4305453056 4306501631
100B 4306501632 4307550207
100C 4307550208 4308598783
100D 4308598784 4309647359
100E 4309647360 4310695935
100F 4310695936 4311744511
1010 4311744512 4312793087
相关推荐
MAGICIAN...6 小时前
【Redis】--持久化机制
数据库·redis·缓存
我真的是大笨蛋6 小时前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构
步步为营DotNet8 小时前
5-2EFCore性能优化
数据库·性能优化·.net
2501_920047039 小时前
Redis-集群
数据库·redis·bootstrap
半夏陌离9 小时前
SQL 拓展指南:不同数据库差异对比(MySQL/Oracle/SQL Server 基础区别)
大数据·数据库·sql·mysql·oracle·数据库架构
旋转的油纸伞10 小时前
SQL表一共有几种写入方式
数据库·sql
半夏陌离10 小时前
SQL 入门指南:排序与分页查询(ORDER BY 多字段排序、LIMIT 分页实战)
java·前端·数据库
isyoungboy10 小时前
SQL高效处理海量GPS轨迹数据:人员gps轨迹数据抽稀实战指南
数据库·sql
敬业小码哥10 小时前
记一次:mysql的json及json数组使用组合使用
数据库·mysql·json
练小杰11 小时前
【Mysql-installer-community-8.0.26.0】Mysql 社区版(8.0.26.0) 在Window 系统的默认安装配置
数据库·sql·mysql·adb·配置文件·mysql安装·关系型数据库