一种PostgreSQL大表自动vacuum的方法及装置制造方法及图纸

技术编号:37411107 阅读:8 留言:0更新日期:2023-04-30 09:36
本申请提供了一种PostgreSQL大表自动vacuum的方法及装置。在进行主动vacuum时,记录每次的执行情况,执行情况包括执行开始时间,执行结束时间,执行时长,当时CPU、内存使用率,执行前后表体积,执行过程中是否有kill会话,执行失败原因,并根据执行情况记录建议,供用户查询参考。本申请解决了一部分autovacuum无法覆盖的场景,通过程序定时主动维护的方式,保证所有表均能及时vacuum。保证所有表均能及时vacuum。保证所有表均能及时vacuum。

【技术实现步骤摘要】
一种PostgreSQL大表自动vacuum的方法及装置


[0001]本申请涉及对象

关系型数据库管理
,具体涉及一种PostgreSQL大表自动vacuum的方法及装置。

技术介绍

[0002]PostgreSQL采用MVCC机制实现ACID中的事务隔离性。MVCC机制,简单来说,就是会保留旧的数据,通过xid来判断用户的事务应该读到哪个时刻的数据,从而实现事务隔离性。MVCC机制会带来大量无用旧数据的问题,PostgreSQL采用VACUUM机制实现旧记录的清理,以保障表不会不断膨胀。
[0003]虽然PostgreSQL提供了AUTOVACUUM机制进行清理,但是遇到一些特殊情况时,autovacuum会失败。比如说,数据库里面的表太多,而max_autovacuum_workers配置较少,就会出现部分表永远都无法触发autovacuum;又比如某些表上存在长事务,会导致autovacuum无法触发;还有一些特别大的表,在autovacuum的一个周期内无法被清理,也会导致表不断膨胀。

技术实现思路

[0004]为了解决上述技术问题,本申请实现了一种PostgreSQL大表自动vacuum的方法及装置。本申请主要为了弥补autovacuum的一些缺点,以实现更完善、对数据库性能影响更小的PostgreSQL旧数据的自动清理。
[0005]本申请所采用的技术方案如下:
[0006]一种PostgreSQL大表自动vacuum的方法,该方法包括:<br/>[0007]步骤1、维护窗口开始时,读取配置表中的配置信息,遍历每一个实例,在每一个实例中遍历每一个数据库中的每一个表,检查表的大小是否超过阈值,若超过阈值,则将大小超过阈值的表加入主动vacuum队列中;
[0008]步骤2、遍历完毕后,开始对本次检查得到的主动vacuum队列进行处理;进行主动vacuum时,记录每次需要主动vacuum的对象的执行情况、执行次数、以及autovacuum失效原因,评估当前数据库的配置信息是否有优化空间,并将评估结果保存到vacuum_advise表中,提供参数供用户进行定制化配置。
[0009]进一步的,在步骤1之前,还包括:设计配置表vacuum_conf,所述配置表中的每一行记录一个实例的配置信息。
[0010]进一步的,所述执行情况包括开始时间、结束时间、执行过程中的性能指标、以及执行后的表体积变化。
[0011]进一步的,在对主动vacuum队列进行处理前,检查表是否被长事务占用,如果被长事务占用,则根据记录的配置enabled_kill参数,决定是否kill长事务。
[0012]进一步的,在对主动vacuum队列进行处理时,检查CPU、内存,如果都符合条件,则主动进行vacuum;如果CPU、内存不足,自动将相同instance的表放置于队列末尾以降低其
优先级,稍后再执行。
[0013]进一步的,在步骤2中,所述评估当前数据库的配置信息是否有优化空间,包括:如果是因为数据表数量太多,worker参数配置太少导致的autovacuum失效,则提供提高worker参数配置的建议。
[0014]进一步的,在步骤2中,所述评估当前数据库的配置信息是否有优化空间,包括:如果是因为数据表数据量太大导致autovacuum失效,则提供修改指定表vacuum阈值参数的建议。
[0015]进一步的,在步骤2中,所述评估当前数据库的配置信息是否有优化空间,包括:如果是因为长事务导致占用导致的,则提供长事务的相关信息,供用户进行进一步的判断和程序优化。
[0016]进一步的,在步骤2中,提供参数供用户进行定制化配置,包括:用户设定进行定时维护的窗口、定时维护的频率、用户设置表的大小的阈值、以及用户设置是否主动kill长事务。
[0017]一种PostgreSQL大表自动vacuum的装置,该装置包括:
[0018]至少一个处理器;以及
[0019]与所述至少一个处理器通信连接的存储器;其中,
[0020]所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述方法。
[0021]通过本申请实施例,可以获得如下技术效果:
[0022](1)解决了一部分autovacuum无法覆盖的场景,通过程序定时主动维护的方式,保证所有表均能及时vacuum。包含的场景包括:数据量特别大的表被autovacuum的机制饿死;表数量过多导致的时间范围内无法完成全部表autovacuum;存在长事务导致autovacuum失效;
[0023](2)进行主动vacuum时,记录每次的执行情况,执行情况包括执行开始时间,执行结束时间,执行时长,当时CPU、内存使用率,执行前后表体积,执行过程中是否有kill会话,执行失败原因,并根据执行情况记录建议,供用户查询参考。
附图说明
[0024]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0025]图1为本申请方法的流程示意图。
具体实施方式
[0026]为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的全部其他实施例,都属于本申请保护的范围。
[0027]本申请的技术方案解决了一部分autovacuum无法覆盖的场景,通过程序定时主动维护的方式,保证所有表均能及时vacuum。包含的场景包括:数据量特别大的表被autovacuum的机制饿死;表数量过多导致的时间范围内无法完成全部表autovacuum;存在长事务导致autovacuum失效。
[0028]图1为本申请方法的流程示意图,该方法包括如下步骤:
[0029]步骤1、维护窗口开始时,读取配置表中的配置信息,遍历每一个实例,在每一个实例中遍历每一个数据库中的每一个表,检查表的大小是否超过阈值,若超过阈值,则将大小超过阈值的表加入主动vacuum队列中;
[0030]在步骤1之前,还包括:设计配置表vacuum_conf,所述配置表中的每一行记录一个实例的配置信息,例如维护的时间段、定时任务频率、表阈值、是否kill会话等;
[0031]步骤2、遍历完毕后,开始对本次检查得到的主动vacuum队列进行处理;进行主动vacuum时,记录每次需要主动vacuum的对象的执行情况、执行次数、以及autovacuum失效原因,评估当前数据库的配置信本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种PostgreSQL大表自动vacuum的方法,其特征在于,该方法包括:步骤1、维护窗口开始时,读取配置表中的配置信息,遍历每一个实例,在每一个实例中遍历每一个数据库中的每一个表,检查表的大小是否超过阈值,若超过阈值,则将大小超过阈值的表加入主动vacuum队列中;步骤2、遍历完毕后,开始对本次检查得到的主动vacuum队列进行处理;进行主动vacuum时,记录每次需要主动vacuum的对象的执行情况、执行次数、以及autovacuum失效原因,评估当前数据库的配置信息是否有优化空间,并将评估结果保存到vacuum_advise表中,提供参数供用户进行定制化配置。2.根据权利要求1所述的方法,其特征在于,在步骤1之前,还包括:设计配置表vacuum_conf,所述配置表中的每一行记录一个实例的配置信息。3.根据权利要求1所述的方法,其特征在于,所述执行情况包括开始时间、结束时间、执行过程中的性能指标、以及执行后的表体积变化。4.根据权利要求1所述的方法,其特征在于,在对主动vacuum队列进行处理前,检查表是否被长事务占用,如果被长事务占用,则根据记录的配置enabled_kill参数,决定是否kill长事务。5.根据权利要求4所述的方法,其特征在于,在对主动vacuum队列进行处理时,检查CPU、内存,如果都符合条件,则主动进行vacuum;如果CPU、内存不足,自动将相同ins...

【专利技术属性】
技术研发人员:李耀宗
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

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

1