The invention discloses a data cleaning method and device, which belongs to the field of database application technology. By adding a shared update to the target table, this method prevents the system from the DDL operation on the target table, then establishes a temporary table and a temporary index, copies the data from the target table to the temporary table, and generates the index information according to the data in the temporary table. Then the target table is added to the query to prevent the system from the target table's DM L operation, and then exchange the data in the target table and the temporary table and the corresponding index information, so as to complete the clearance and recovery of the disk space. Because most of the time in the process of data cleaning is the use of shared update and exclusive lock, it does not affect the DML operation of the system to the target table. It can accomplish the cleaning of garbage data in the database without blocking the DML, so as to ensure the higher availability of the system and improve the user experience.
【技术实现步骤摘要】
一种数据清理方法及装置
本专利技术涉及数据库应用
,尤其涉及一种数据清理方法及装置。
技术介绍
PostgreSQL数据库是一种开源、实用、高效、应用广泛的通用数据库管理系统。PostgreSQL数据库在长时间运行后,系统会产生索引膨胀和垃圾数据,这些数据会占用多余的磁盘空间,增加业务的成本;同时数据膨胀也会降低系统的性能,PostgreSQL原生的VACUUMFULL可用于进行磁盘空间的清理和索引膨胀的消除。VACUUMFULL的处理流程如附图1所示,包括对PostgreSQL数据库中的源表加AccessExclusiveLock锁,然后建立临时表,将源表数据复制到临时表中,之后交换源表和临时表内容,重建源表上的索引,并删除临时表,再解除AccessExclusiveLock锁。由于VACUUMFULL一开始就对源表加了AccessExclusiveLock来阻止系统对这张表的修改,这个操作导致系统整个过程中所有针对源表的操作包括DML(DataManipulationLanguage,数据操作语言,数据操作分成数据查询和数据更新两类,数据更新又分成插入、删除、和修改三种操作)和DDL(DataDefinitionLanguage,数据定义语言,用于定义数据库模式、基本表、视图和索引的创建和撤消操作)都会被阻塞,造成严重的业务中断,影响业务服务质量。例如,对一个100G的表进行VACUUMFULL,需要3个小时左右,这个过程中,业务无法正常运行,也就是说需要中断三个小时来进行一次磁盘空间的清理和回收。
技术实现思路
本专利技术提供了一种数据清理方法及装 ...
【技术保护点】
1.一种数据清理方法,其特征在于,包括:对目标表加共享更新排他锁,阻止系统对目标表的数据定义语言操作;建立临时表,所述临时表的表定义与所述目标表的表定义相同;建立临时表的临时索引,所述临时索引的属性与目标表的索引的属性相同;将所述目标表的数据复制到所述临时表中,根据临时表中的数据在临时索引中生成索引信息;对所述目标表加访问排他锁,阻止系统对目标表的数据操作语言操作;交换所述临时表和所述目标表中的数据以及所述临时索引和所述目标索引中的索引信息;解除所述目标表上的共享更新排他锁和访问排他锁。
【技术特征摘要】
1.一种数据清理方法,其特征在于,包括:对目标表加共享更新排他锁,阻止系统对目标表的数据定义语言操作;建立临时表,所述临时表的表定义与所述目标表的表定义相同;建立临时表的临时索引,所述临时索引的属性与目标表的索引的属性相同;将所述目标表的数据复制到所述临时表中,根据临时表中的数据在临时索引中生成索引信息;对所述目标表加访问排他锁,阻止系统对目标表的数据操作语言操作;交换所述临时表和所述目标表中的数据以及所述临时索引和所述目标索引中的索引信息;解除所述目标表上的共享更新排他锁和访问排他锁。2.根据权利要求1所述的方法,其特征在于,所述建立临时表的临时索引之后还包括:设置所述临时索引的状态为不可用;将所述目标表的数据写入模式切换为追加模式,所述追加模式用于当目标表末尾的数据块写满后在目标表末尾增加一个数据块,并将新增数据写入到位于目标表末尾的数据块中。3.根据权利要求2所述的方法,其特征在于,所述将所述目标表的数据复制到所述临时表中,根据临时表中的数据在临时索引中生成索引信息,包括:将目标表中的数据复制到临时表中;统计数据复制过程中目标表中新增数据块的数量;判断所述新增数据块的数量是否小于预设阈值;若是,设置所述临时索引的状态为可用,并根据临时表中的数据在临时索引中生成索引信息;若否,将新增数据块中的数据复制到临时表中,并执行统计数据复制过程中目标表中新增数据块的数量的步骤。4.根据权利要求1所述的方法,其特征在于,所述根据临时表中的数据在临时索引中生成索引信息包括:读取临时表中的数据;对临时表中的数据进行计算,得到索引信息;将所述索引信息写入临时索引上相应指针的位置;设置临时索引中各索引信息的索引状态,所述索引状态用于标识索引信息是否可用。5.根据权利要求4所述的方法,其特征在于,所述根据临时表中的数据在临时索引中生成索引信息之后,还包括:处理在生成索引信息过程中所述目标表的新增数据。6.根据权利要求5所述的方法,其特征在于,所述处理在生成索引信息过程中所述目标表的新增数据包括:将生成索引信息过程中所述目标表的新增数据复制到临时表中;读取复制到临时表的新增数据;对复制到临时表的新增数据进行计算,得到所述新增数据的索引信息;将所述新增数据的索引信息写入临时索引上相应指针的位置;设置所述索引信息的索引状态。7.根据权利要求1所述的方法,其特征在于,所述建立临时表之后还包括:建立目标表中各数据与临时表中位置之间的对应关系;所述将所述目标表的数据复制到所述临时表中包括:逐条判断目标表中的数据是否有效;若是,根据该数据与临时表中位置的对应关系将该数据复制到临时表中对应的位置,并执行判断下一条数据是否有效的步骤;若否,忽略该数据,执行判断下一条数据是否有效的步骤。8.根据权利要求1所述的方法,其特征在于,所述方法还包括:删除所述临时表和临时索引。9.一种数据清理装置,其特征在于,包括:第一加锁单元,用于对目标表加共享更新排他锁...
【专利技术属性】
技术研发人员:李跃森,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。