本申请实施例涉及通信技术领域,公开了一种数据库表维护方法、装置、服务器及存储介质。本申请中,数据库表维护方法包括:查找数据库中是否存在满足预设条件的问题数据表;若存在问题数据表,则设置针对问题数据表的触发条件和触发操作;在检测到触发条件后,禁止将待插入问题数据表的数据写入问题数据表,执行触发操作:将待插入问题数据表的数据写入与问题数据表关联的第一继承表。通过以上技术手段,在正常响应上层应用下发数据操作指令的情况下,极大地减少问题数据表继续占用更多的空间而发生表膨胀问题,以及避免数据表进入拒绝一切事务执行的状态,在上层应用无感知的情况下实现了对数据库表的维护。
【技术实现步骤摘要】
数据库表维护方法、装置、服务器及存储介质
本申请实施例涉及通信
,特别涉及一种数据库表维护方法、装置、服务器及存储介质。
技术介绍
随着信息技术的发展,目前各种数据库系统层出不穷,其中PostgreSQL是一种开源数据库系统,由于其高性能、高速度、数据类型广、支持多版本并发控制的特点,在数据存储这一领域受到广泛的使用。但是PostgreSQL数据库的特性也使得它具有一些无法避免的缺点,例如:根据PostgreSQL数据库的特性,PostgreSQL的每一次执行单元都称为一次事务,且需要一个事务号。PostgreSQL使用32位事务号,所以事务id最大值为42亿左右,且该事务号是循环使用的,当前事务号前2^31个事务为过去的事务,当前事务号后2^31个事务为未来的事务。数据表中数据元组的最小事务号与当前事务号的差值被称为数据表的事务年龄,数据库中最大数据表的年龄称之为数据库的事务年龄。故数据库年龄不得超过2^31,否则将出现未来的事务被视为过去的事务。PostgreSQL使用vacuum(冻结)机制释放一定年龄前的事务号,使得事务的最大年龄不超过2^31。然而,由于PostgreSQL数据库特殊的多版本并发控制MVCC机制,数据库在执行vacuum冻结操作后,在末尾页的未被使用或被标记删除的空间会被回收,然而大多数的存储空间并没有真正被释放,只能被新的记录使用,如果数据库长时间得不到维护,会导致数据表的占用空间不断膨胀,使得后续执行vacuum冻结操作的速度越来越缓慢,最终导致数据库为了避免事务id耗尽,而拒绝响应上层应用的数据操作,从而对业务产生影响。
技术实现思路
本申请实施例的目的在于提供一种数据库表维护方法、装置、服务器及存储介质,使得数据库中的数据表能够自动进行维护,避免数据表发生膨胀占用过多的空间后使得上层应用的操作指令无法被数据库响应。为解决上述技术问题,本申请的实施例提供了一种数据库表维护方法,包括:查找数据库中是否存在满足预设条件的问题数据表;若存在问题数据表,则设置针对问题数据表的触发条件和触发操作;在检测到触发条件后,禁止将待插入问题数据表的数据写入问题数据表,执行触发操作;其中,触发条件包括监控到针对问题数据表的数据插入操作,触发操作包括:将待插入问题数据表的数据写入与问题数据表关联的第一继承表。本申请的实施例还提供了一种数据库表维护装置,包括:数据表查找模块,用于查找数据库中是否存在满足预设条件的问题数据表;设置模块,用于在查找到满足预设条件的问题数据表后,设置针对问题数据表的触发条件和触发操作;数据表操作模块,用于在检测到触发条件后,禁止将待插入问题数据表的数据写入问题数据表,执行触发操作;其中,触发条件包括监控到针对问题数据表的数据插入操作,触发操作包括将待插入问题数据表的数据写入与问题数据表关联的第一继承表。本申请实施例相对于现有技术而言,在检测到有针对问题数据表的数据插入操作时,禁止将待插入的数据插入到问题数据表中,而是将待插入的数据插入到与问题数据表关联的第一继承表中,在正常响应上层应用下发数据操作指令的情况下,将待插入到问题数据表的数据改写入至关联的第一继承表,使得问题数据表的数据量不再增加,自然体积也不再膨胀,因此极大地减少问题数据表继续占用更多的空间而发生表膨胀问题,进而避免了因执行vacuum操作时间过长而导致事务号耗尽而进入拒绝一切事务执行的状态,在上层应用无感知的情况下实现了对数据库表的维护。另外,本实施例中在执行预设的触发操作之后,还包括:将问题数据表中的数据迁移至问题数据表的第二继承表。通过将原问题数据表中的数据迁移到另一张新的继承表中,完全释放了问题数据表所占用的空间,从而消除了表膨胀问题并杜绝了因执行vacuum操作时间过长而导致事务号耗尽而进入拒绝一切事务执行的状态的可能,更好地在上层应用无感知的情况下实现了对数据库表的维护。另外,本实施例中将问题数据表中的数据迁移至问题数据表的第二继承表,包括:重复执行数据迁移的数据库事务直到问题数据表中的数据全部迁移到第二继承表;其中,数据库事务中的操作包括:复制问题数据表中的目标数据条目并写入第二继承表、删除问题数据表中的目标数据条目。通过以上技术手段,在迁移过程中使用事务将数据复制到继承表,将复制数据、写入数据以及删除已复制的数据合并成一个执行单元,使其具有原子性。原子性即要么迁移成功或失败,不允许复制到继承表后,已复制数据未被删除等情况出现。另外,本实施例中与问题数据表关联的第一继承表大于一个,各第一继承表分别对应一时间段;将待插入问题数据表的数据写入与问题数据表关联的第一继承表,包括:获取数据插入操作对应数据记录的创建时间;根据创建时间,在已创建的多个第一继承表中查找时间段与创建时间匹配的第一继承表;若存在匹配的第一继承表,则将待插入问题数据表的数据写入匹配的第一继承表;若不存在匹配的第一继承表,则创建时间段与创建时间匹配的第一继承表,并将待插入问题数据表的数据写入创建的第一继承表。通过以上技术手段,将问题数据表中新插入的数据分散到多个第一继承表中,减小了第一继承表发生膨胀问题的可能。附图说明一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定。图1是根据本申请第一实施例中数据库表维护方法的流程图;图2是根据本申请第一实施例中将待插入问题数据表的数据写入第一继承表的流程图;图3是根据本申请第二实施例中数据库表维护方法的流程图;图4是根据本申请第二实施例中数据库事务的操作流程图;图5是根据本申请第三实施例中数据库表维护装置的结构示意图;图6是根据本申请第四实施例中服务器的结构示意图。具体实施方式为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本申请各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本申请的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。本申请的第一实施例涉及一种数据库表维护方法。具体流程如图1所示,包括:查找数据库中是否存在满足预设条件的问题数据表;若存在问题数据表,则设置针对问题数据表的触发条件和触发操作;在检测到触发条件后,禁止将待插入问题数据表的数据写入问题数据表,执行触发操作;其中,触发条件包括监控到针对问题数据表的数据插入操作,触发操作包括:将待插入问题数据表的数据写入与问题数据表关联的第一继承表。下面以PostgreSQL数据库为例对本实施例的数据库表维护方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。本实施例中的数据库表维护方法如图1所示,具体包括:步骤101,确定数据库中存本文档来自技高网...
【技术保护点】
1.一种数据库表维护方法,其特征在于,包括:/n查找数据库中是否存在满足预设条件的问题数据表;/n若存在所述问题数据表,则设置针对所述问题数据表的触发条件和触发操作;/n在检测到所述触发条件后,禁止将待插入所述问题数据表的数据写入所述问题数据表,执行所述触发操作;其中,所述触发条件包括监控到针对所述问题数据表的数据插入操作,所述触发操作包括:将待插入所述问题数据表的数据写入与所述问题数据表关联的第一继承表。/n
【技术特征摘要】
1.一种数据库表维护方法,其特征在于,包括:
查找数据库中是否存在满足预设条件的问题数据表;
若存在所述问题数据表,则设置针对所述问题数据表的触发条件和触发操作;
在检测到所述触发条件后,禁止将待插入所述问题数据表的数据写入所述问题数据表,执行所述触发操作;其中,所述触发条件包括监控到针对所述问题数据表的数据插入操作,所述触发操作包括:将待插入所述问题数据表的数据写入与所述问题数据表关联的第一继承表。
2.根据权利要求1所述的数据库表维护方法,其特征在于,在所述执行预设的触发操作之后,还包括:
将所述问题数据表中的数据迁移至与所述问题数据表关联的第二继承表。
3.根据权利要求2所述的数据库表维护方法,其特征在于,所述将所述问题数据表中的数据迁移至与所述问题数据表关联的第二继承表,包括:
重复执行数据迁移的数据库事务直到所述问题数据表中的数据全部迁移到所述第二继承表;
其中,所述数据库事务中的操作包括:复制所述问题数据表中的目标数据条目并写入所述第二继承表、删除所述问题数据表中的所述目标数据条目。
4.根据权利要求2所述的数据库表维护方法,其特征在于,在所述将所述问题数据表中的数据迁移至与所述问题数据表关联的第二继承表之后,还包括:
清空所述问题数据表中的所有数据并回收所述问题数据表的空间占用。
5.根据权利要求1所述的数据库表维护方法,其特征在于,与所述问题数据表关联的第一继承表大于一个,各所述第一继承表分别对应一时间段;所述将待插入所述问题数据表的数据写入与所述问题数据表关联的第一继承表,包括:
获取所述数据插入操作对应数据记录的创建时间;
根据所述创建时间,在已创建的多个所述第一继承表中查找所述时间段与所述创建时间匹配的第一继承表;
若存在所述匹配的第一继承表,则将所述待...
【专利技术属性】
技术研发人员:叶信灯,
申请(专利权)人:网宿科技股份有限公司,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。