postgresql 数据库 重建索引 所需时间测试

postgresql 数据库 重建索引 所需时间测试

前言

众所周知,postgresql数据库使用久了,数据量更新大的表的索引会不断膨胀,需要重建索引来保证数据库的效率。那重建索引需要多长时间呢?

测试前准备

环境:
pg版本:11.5
系统:Linux

重建索引前数据库状态

查询数据库状态:
在这里插入图片描述

如图所示,上图这几个表的索引的大小已经比表中的数据量还大了,很明显索引已经膨胀了,这次我们来拿这三个表来测试一下,看看实验结果如何

测试计划

上图中表一,是一个拥有4亿数据量的表,索引已经占到了112G了,这个表我们来测试重建需要所花费多长的时间,表2和表3都是同一个分布表的子分区表,数据量也差不多,索引大小也一样,那这样打算,表2进行整表重建索引,表3进行单个索引单个索引的重建,看看他们相差多少时间。

先查看这三张表的索引数量:

表1:

在这里插入图片描述

表2:
在这里插入图片描述

表3:
在这里插入图片描述

本文章只针对测试重建索引,不对索引进行优化!!!
本文章只针对测试重建索引,不对索引进行优化!!!
本文章只针对测试重建索引,不对索引进行优化!!!

重建索引命令

REINDEX [ ( option [, ...] ) ] { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM }
 [ CONCURRENTLY ] name

where option can be one of:

    CONCURRENTLY [ boolean ]
    TABLESPACE new_tablespace
    VERBOSE [ boolean ]
REINDEX TABLE CONCURRENTLY table_name;

注意:
(REINDEX TABLE CONCURRENTLY pg11不支持,pg14支持)

测试开始

1.先对表2进行测试

REINDEX TABLE  "表2" ;

表2中数据19Gb,数据量79340800,(8千万) ,索引条数5,大小20Gb。

在这里插入图片描述
用时953.526s

在这里插入图片描述
重建索引后,表2的索引少了8G,还是很多,需要后续继续优化,用时953.526s。

2. 表3测试

reindex index     索引命名;

在这里插入图片描述
注:
由于pg11不支持reindex index 使用 CONCURRENTLY 参数,可能会有一些影响,可能会发生死锁等等。

结果

表3中数据19Gb,数据量78852500,(8千万) ,索引条数5,大小20Gb。
在这里插入图片描述
在这里插入图片描述
用时917.059

在这里插入图片描述
经过测试,发现2种方式所用时间相差不大。

3. 表1测试

因为数据库版本是pg11.5,不支持REINDEX 使用 CONCURRENTLY 参数,为了不影响业务,在对表1的操作中只能采用drop的方法,然后并行创建索引的方式。

在这里插入图片描述
在这里插入图片描述

表1中数据19Gb,数据量499677000,(50亿) ,索引条数3,大小112Gb。

在这里插入图片描述

在这里插入图片描述
共用时3960s

在这里插入图片描述

🌈后记

如果本文章有何错误,请您评论中指出,或联系我,我会改正,如果您觉得这篇文章有用,请帮忙一键三连,让更多的人看见,谢谢
作者 yang_z_1 csdn博客地址: https://blog.csdn.net/yang_z_1?type=blog

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yang_z_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值