(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202210852201.9
(22)申请日 2022.07.20
(71)申请人 中国烟草总公司职工进修学院
地址 450008 河南省郑州市金 水区鑫苑路7
号
(72)发明人 马晓 周正凯 徐丽娟 贾伟
张亚萍 郝菊芳
(74)专利代理 机构 上海国智知识产权代理事务
所(普通合伙) 31274
专利代理师 潘建玲
(51)Int.Cl.
G06F 16/21(2019.01)
G06F 16/215(2019.01)
G06F 16/22(2019.01)
G06F 16/23(2019.01)G06F 16/242(2019.01)
G06F 16/28(2019.01)
(54)发明名称
一种基于Undo表空间解决PostgreSQL数据
库表膨胀方法及系统
(57)摘要
本发明实施例公开了一种基于Undo表空间
解决PostgreSQL数据库表膨胀方法及系统, 其中
方法包括: 监测到Po stgreSQL数据库发生数据更
新, 将所述原始数据行拷贝到Undo表空间, 数据
更新产生新版本数据行, 于所述新版本数据行的
行头存储U ndo指针; 响应于 所述PostgreSQL数据
库发生事务回滚, 将所述原始数据行从所述U ndo
表空间拷贝回原地; 响应于所有会话不再需要访
问所述Undo表空间的所述原始数据行, 清理所述
原始数据行, 释放所述Undo表空间; 本发明公开
的一个方面可以解决PostgreSQL索引膨胀和表
膨胀问题。
权利要求书2页 说明书7页 附图4页
CN 115221145 A
2022.10.21
CN 115221145 A
1.一种基于Undo表空间解决PostgreSQ L数据库表膨胀方法, 包括如下步骤:
监测到PostgreSQL数据库发生数据更新, 将所述原始数据行拷贝到Undo表空间, 数据
更新产生 新版本数据行, 于所述 新版本数据行的行头存 储Undo指针;
响应于所述PostgreSQL数据库发生事务回滚, 将所述原始数据行从所述Undo表空间拷
贝回原地;
响应于所有会话不再需要访问所述Undo表空间的所述原始数据 行, 清理所述原始数据
行, 释放所述Undo表空间。
2.如权利要求1所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀方法, 其特
征在于, 所述方法还 包括如下步骤:
响应于所述PostgreSQL数据库发生事务提交, 将所述Undo表空间存储的所述原始数据
行根据多版本并发控制用于其 他数据库会话。
3.如权利要求1所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀方法, 其特
征在于, 所述监测到PostgreSQL数据库发生数据更新, 将所述原始数据行拷贝到Undo表空
间, 数据更新产生新版本数据行, 于所述新版本数据行的行头存储Undo指针, 包括如下步
骤:
所述PostgreSQ L数据库运行Undo Launcher进程监测正在运行的操作是否为写操作;
响应于所述Undo Launcher进程监测到正在运行写操作, 所述Undo Launcher进程向
Undo Worker进程发送写操作通知;
所述Undo Worker进程接收到写操作通知, 将所述原 始数据行拷贝至Undo表空间;
所述PostgreSQ L数据库中的写操作原地执 行, 得到新版本数据行;
于所述新版本数据行的行头存储Undo指针, 所述Undo指针指向Undo表空间中所述原始
数据行。
4.如权利要求2所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀方法, 其特
征在于, 所述方法还 包括如下步骤:
通过Undo Launcher进程监测到所述PostgreSQL数据库发生事务回滚或事务提交操
作, 向Undo Worker进程发送事务回滚通知或事务 提交通知;
响应于所述Undo Worker进程接收到事务回滚通知, 将所述原始数据行从所述Undo表
空间拷贝回原地;
响应于所述Undo Worker进程接收到事务提交通知, 将所述Undo表空间存储的所述原
始数据行根据多版本并发控制用于其 他数据库会话。
5.如权利要求1所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀方法, 其特
征在于, 所述响应于所有会话不再需要访问所述Undo表空间的所述原始数据行, 清理所述
原始数据行, 释放所述Undo表空间, 包括如下步骤:
通过Undo Launcher进程监控到所有会话不再需要访问所述原始数据行, 通知Undo
Clean Worker进程进行 数据清理;
所述Undo Clean Worker进程接收到数据清理通知, 对所述原始数据行进行清理, 释放
所述Undo表空间。
6.如权利要求2所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀方法, 其特
征在于, 所述方法还 包括如下步骤:权 利 要 求 书 1/2 页
2
CN 115221145 A
2响应于其他数据库访问所述PostgreSQL数据库内的数据, 其他数据库会话读取
PostgreSQ L数据库内不同版本的数据;
若所述其他数据库会话需要读取旧版本数据, 所述其他数据库会话根据Undo指针从所
述Undo表空间获取原 始数据行。
7.如权利要求1所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀方法, 其特
征在于, 所述方法还 包括如下步骤:
响应于更新所述原始数据行中存在索引的列, 将所述列的旧值对应的索引条目标设为
删除标记, 并将所述列更新后的新 值按照顺序在 索引树中插 入新的索引条目。
8.如权利要求1所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀方法, 其特
征在于, 所述方法还 包括如下步骤:
将所述PostgreSQ L数据库发生的所有数据变更操作写入WAL日志, 并同步到磁 盘上;
所述数据变更操作包括但不限于创建对象、 修改对象、 删除对象、 UPDATE操作、 DELETE
操作、 INSERT操作、 索引变更操作、 事务回滚操作和事务 提交操作。
9.一种基于Undo表空间解决PostgreSQ L数据库表膨胀系统, 包括:
数据更新模块, 用以监测到PostgreSQL数据库发生数据更新, 将所述原始数据行拷贝
到Undo表空间, 数据更新产生 新版本数据行, 于所述 新版本数据行的行头存 储Undo指针;
事务回滚模块, 用以响应于所述PostgreSQL数据库发生事务回滚, 将所述原始数据行
从所述Undo表空间拷贝回原地;
数据清理模块, 响应于所有会话不再需要访问所述所述Undo表空间的所述原始数据
行, 清理所述原 始数据行, 释放所述Undo表空间。
10.如权利 要求9所述的一种基于Undo表空间解决PostgreSQL数据库表膨胀系统, 其特
征在于, 所述系统还 包括:
事务提交模块, 用以响应于所述PostgreSQL数据库发生事务提交, 将所述Undo表空间
存储的所述原 始数据行根据多版本并发控制用于其 他数据库会话;
索引列更新模块, 用以响应于更新所述原始数据行中存在索引的列, 将所述列的旧值
对应的索引条目标设为删除标记, 并将所述列更新后的新值按照顺序在索引树中插入新的
索引条目。权 利 要 求 书 2/2 页
3
CN 115221145 A
3
专利 一种基于Undo表空间解决PostgreSQL数据库表膨胀方法及系统
文档预览
中文文档
14 页
50 下载
1000 浏览
0 评论
0 收藏
3.0分
温馨提示:本文档共14页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 SC 于 2024-02-07 12:43:13上传分享