数据库表空间的在线重组方法、装置、设备和介质制造方法及图纸

技术编号:37818407 阅读:16 留言:0更新日期:2023-06-09 09:50
本公开提供了一种数据库表空间的在线重组方法,涉及数据库、智能运维技术领域。该方法包括:建立与目标原表结构一致的目标新表;将目标原表中的存量活元组和增量数据复制到目标新表;在目标原表和目标新表中的增量数据的同步延时满足预定条件后,触发更名事务;向该更名事务分配与目标表名关联的排他咨询锁,其中,目标表名为目标原表更名前的表名;在更名事务获取到排他咨询锁后,利用排他咨询锁锁定具有目标表名的数据表,并执行更名事务,其中,在目标原表和目标新表增量数据完全同步后,进行表名变更;以及在更名事务执行完成后,释放排他咨询锁。本公开还提供了一种数据库表空间的在线重组装置、设备、存储介质和程序产品。存储介质和程序产品。存储介质和程序产品。

【技术实现步骤摘要】
数据库表空间的在线重组方法、装置、设备和介质


[0001]本公开涉及智能运维
,具体地涉及数据库
,更具体地涉及一种数据库表空间的在线重组方法、装置、设备、介质和程序产品。

技术介绍

[0002]应用用户通过用户指令对数据库(例如,PostgresSQL数据库)中的数据执行Delete、Update操作之后,在数据库中相应数据会被标记为删除,对任何事务均不可见,但并不会移除,这样会引起数据库表空间的碎片问题。这样导致的结果包括:数据表占用空间大于实际需要的空间,有可能一个数据表中的数据被分散地存在很多地方,导致访问性能下降。严重的情况下甚至会引起空间膨胀导致数据库接变为只读状态,无法对外提供服务。
[0003]相关技术中对数据库碎片问题的解决方案主要是:通过手工执行完整清理(Vacuum Full)释放磁盘空间,其中,完整清理往往需要停机操作,对要清理的表创建新的表文件,再将原表活元组复制到新表,最后删除旧文件,并重建索引、更新相关信息,最后清理、重组磁盘物理空间等。停机清理会导致应用侧无法访问(读/写)表,清理期间数据库无法对外服务;当系统表过大或碎片过多时,往往需要长时间停机,严重影响联机交易。

技术实现思路

[0004]鉴于上述问题,本公开提供了可以在数据库对外服务期间进行表空间碎片问题清理的数据库表空间的在线重组方法、装置、设备、介质和程序产品。
[0005]本公开实施例的第一方面,提供了一种数据库表空间的在线重组方法。所述方法包括:建立与目标原表结构一致的目标新表;将所述目标原表中的存量活元组和增量数据复制到所述目标新表;在所述目标原表和所述目标新表中的增量数据的同步延时满足预定条件后,触发用于更改所述目标原表和所述目标新表的表名的更名事务;向所述更名事务分配与目标表名关联的排他咨询锁,其中,所述目标表名为所述目标原表更名前的表名;在所述更名事务获取到所述排他咨询锁后,利用所述排他咨询锁锁定具有所述目标表名的数据表,并执行所述更名事务,包括:在所述目标原表被所述排他咨询锁锁定期间,先将所述目标原表中尚未复制到所述目标新表的增量数据同步到所述目标新表,然后修改所述目标原表的表名;接着将所述目标新表的表名修改为所述目标表名,其中,更名后的所述目标新表被所述排他咨询锁锁定;以及在所述更名事务执行完成后,释放所述排他咨询锁。
[0006]根据本公开的实施例,在所述向所述更名事务分配与目标表名关联的排他咨询锁之前,所述方法还包括:若存在基于所述目标表名进行数据表访问的且尚未执行的至少一个第一类事务时,每个所述第一类事务在获取到与所述目标表名关联的N个共享咨询锁其中之一后,执行所述第一类事务,其中N为大于或等于1的整数;所述第一类事务为包含DML操作的事务;以及每个所述第一类事务执行完成后释放所述共享咨询锁。
[0007]根据本公开的实施例,所述向所述更名事务分配与目标表名关联的排他咨询锁包括:获取对所述目标表名进行运算而得到信号量;所述更名事务基于所述目标表名访问所
述信号量;以及基于所述更名事务对所述信号量的访问,向所述更名事务分配所述排他咨询锁。
[0008]根据本公开的实施例,在所述执行所述第一类事务之前,所述方法还包括:所述第一类事务基于所述目标表名访问所述信号量;以及基于所述第一类事务对所述信号量的访问,当所述N个共享咨询锁未被全部占用时,向所述第一类事务分配所述共享咨询锁。
[0009]根据本公开的实施例,所述获取对所述目标表名进行运算而得到信号量包括:对所述目标表名进行哈希运算,得到所述信号量。
[0010]根据本公开的实施例,在所述建立与目标原表结构一致的目标新表之前,所述方法还包括获取所述目标原表,具体包括:获取所述数据库中的表空间重组状态列表,所述表空间重组状态列表包括等待表空间重组的第一类数据表的信息;以及以所述第一类数据表中的任意一个表作为所述目标原表,基于所述表空间重组状态列表中所述目标原表的信息,从所述数据库中获取所述目标原表。
[0011]根据本公开的实施例,在所述释放所述排他咨询锁之后,所述方法还包括:从所述表空间重组状态列表中所述第一类数据表的信息中移除所述目标原表的信息,以更新所述表空间重组状态列表。
[0012]根据本公开的实施例,所述获取所述数据库中的表空间重组状态列表包括:当检测到所述数据库的空闲空间比达到预设阈值,且满足清理条件时,下达表空间重组命令;以及响应于所述表空间重组命令,获取初始的所述表空间重组状态列表。其中,所述空闲空间比为基于所述数据库的剩余空间与总空间而得到的比值。
[0013]根据本公开的实施例,所述清理条件包括:所述数据库的剩余空间大于预定容量阈值,其中,所述预定容量阈值至少大于所述数据库中最小的数据表的容量;或者/并且接收到预设的运维终端发送的表空间重组指示。
[0014]本公开实施例的第二方面,提供了一种数据库表空间的在线重组装置。所述装置包括新表建立模块、数据逻辑复制同步模块、更名事务触发模块、锁分配模块、更名事务执行模块和锁释放模块。新表建立模块,用于建立与目标原表结构一致的目标新表。数据逻辑复制同步模块,用于将所述目标原表中的存量活元组和增量数据复制到所述目标新表。更名事务触发模块,用于在所述目标原表和所述目标新表中的增量数据的同步延时满足预定条件后,触发用于更改所述目标原表和所述目标新表的表名的更名事务。锁分配模块,用于向所述更名事务分配与目标表名关联的排他咨询锁,其中,所述目标表名为所述目标原表更名前的表名。更名事务执行模块,用于在所述更名事务获取到所述排他咨询锁后,利用所述排他咨询锁锁定具有所述目标表名的数据表,并执行所述更名事务,以及在所述更名事务执行完成后,释放所述排他咨询锁。其中,所述执行所述更名事务包括:在所述目标原表被所述排他咨询锁锁定期间,先将所述目标原表中尚未复制到所述目标新表的增量数据同步到所述目标新表,然后修改所述目标原表的表名;接着将所述目标新表的表名修改为所述目标表名。
[0015]根据本公开的实施例,所述装置还包括DML事务执行模块。所述锁分配模块还用于提供N个共享咨询锁,其中,N为大于或等于1的整数。所述DML事务执行模块用于若存在基于所述目标表名进行数据表访问的且尚未执行的至少一个第一类事务时,每个所述第一类事务在获取到与所述目标表名关联的N个共享咨询锁其中之一后,执行所述第一类事务,以及
每个所述第一类事务执行完成后释放所述共享咨询锁,所述第一类事务为包含DML操作的事务。
[0016]本公开实施例的第三方面,提供了一种电子设备。所述电子设备包括一个或多个处理器和存储器。所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述方法。
[0017]本公开实施例的第四方面,还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述方法。
[0018]本公开实施例的第五方面,还提供了一种计算机本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据库表空间的在线重组方法,包括:建立与目标原表结构一致的目标新表;将所述目标原表中的存量活元组和增量数据复制到所述目标新表;在所述目标原表和所述目标新表中的增量数据的同步延时满足预定条件后,触发用于更改所述目标原表和所述目标新表的表名的更名事务;向所述更名事务分配与目标表名关联的排他咨询锁,其中,所述目标表名为所述目标原表更名前的表名;在所述更名事务获取到所述排他咨询锁后,利用所述排他咨询锁锁定具有所述目标表名的数据表,并执行所述更名事务,包括:在所述目标原表被所述排他咨询锁锁定期间,先将所述目标原表中尚未复制到所述目标新表的增量数据同步到所述目标新表,然后修改所述目标原表的表名;接着将所述目标新表的表名修改为所述目标表名,其中,更名后的所述目标新表被所述排他咨询锁锁定;以及在所述更名事务执行完成后,释放所述排他咨询锁。2.根据权利要求1所述的方法,其中,在所述向所述更名事务分配与目标表名关联的排他咨询锁之前,所述方法还包括:若存在基于所述目标表名进行数据表访问的且尚未执行的至少一个第一类事务时,每个所述第一类事务在获取到与所述目标表名关联的N个共享咨询锁其中之一后,执行所述第一类事务,其中N为大于或等于1的整数;所述第一类事务为包含DML操作的事务;以及每个所述第一类事务执行完成后释放所述共享咨询锁。3.根据权利要求2所述的方法,其中,所述向所述更名事务分配与目标表名关联的排他咨询锁包括:获取对所述目标表名进行运算而得到信号量;所述更名事务基于所述目标表名访问所述信号量;以及基于所述更名事务对所述信号量的访问,向所述更名事务分配所述排他咨询锁。4.根据权利要求3所述的方法,其中,在所述执行所述第一类事务之前,所述方法还包括:所述第一类事务基于所述目标表名访问所述信号量;以及基于所述第一类事务对所述信号量的访问,当所述N个共享咨询锁未被全部占用时,向所述第一类事务分配所述共享咨询锁。5.根据权利要求2所述的方法,其中,所述获取对所述目标表名进行运算而得到信号量包括:对所述目标表名进行哈希运算,得到所述信号量。6.根据权利要求1~5任意一项所述的方法,其中,在所述建立与目标原表结构一致的目标新表之前,所述方法还包括获取所述目标原表,具体包括:获取所述数据库中的表空间重组状态列表,所述表空间重组状态列表包括等待表空间重组的第一类数据表的信息;以及以所述第一类数据表中的任意一个表作为所述目标原表,基于所述...

【专利技术属性】
技术研发人员:孙迪刘嘉健梁昊然何思阳
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1