POSTGRESQL index advisor 4种方式 (国内,国外,远程,云)那个更好

1ad25e7b5b712c420df777af21411ff0.png

索引建议,在PG的原生数据库上,并不提供这个功能,之前介绍过一些通过一些其他的方式来进行 index advisor的使用方式在PG 原生的数据库中使用。下面想阐述的是,其他的不同的POSTGRESQL 的分支或类似产品,在INDEX advisor 上的一些实现,扩充相关的知识,希望POSTGRESQL 原生产品,在未来支持原生的 INDEX ADVISOR 产品。

下面就看看一些其他产品中实现INDEX ADVISOR 的手段和方法

产品1  EDB index advisor 

首先EDB 本身支持index advisor 的功能,并且是在 EDB POSTGRESQL 内置的功能,并且支持 WINDOWS 版本的 POSTGRESQL 和 POSTGRESQL 版本的 POSTGRESQL 。

这里EDB 的index advisor 实现是通过 pg_advise_index 的程序来运作通过读取用户输入的SQL 语句产生一个create index 文本文件,这里包含了这个文件中会提供通过工具产生的建议性的索引信息。

这个工具在操作中,使用的是外部的命令,通过加载需要分析的语句,同时将建议添加的索引,写入到 -o  参数后的文件中。

82637d85acee0b9ce995778358890610.png

在产生了建议的索引后,可以直接通过执行脚本,将索引建立。

073b66b4a7a5f45be477f0ea75c42410.png

除此以外EDB 的POSTGRESQL 企业版还包含了即时索引建议函数,通过建议的函数,捕捉正在执行的 PID 进程,通过进程中执行的语句得出建议创建的索引。

35ec439a65f344b0d3572eb21da8703f.png

以上是国外,企业级别的POSTGRESQL 在索引建议和处理方面的提供的功能。

下面是国内的POSTGRESQL 产品,opengauss 提供的索引推荐的工作,opengauss 提供了三种方式的索引提供的模式, 简单语句索引建议, 虚拟索引模拟, 批量模式。

1  简单语句模式

简单语句的模式通过gs_index_advise 函数来针对标定的语句进行操作,如

08cb611474b8cb7c096b7d43d7e0d1cd.png

通过这样的方式给出相关的语句需要建立的索引信息。

2  虚拟索引

虚拟索引的含义在于一些索引是否对语句,有相关的作用,一般来说数据库中只有建立了索引后,才能产出相关的结果,而这样的情况下,会产生索引不正确,但已经建立了索引,还需要在清理在建立的问题,建立索引对于大表也是一个消耗,如何降低消耗,也是需要考虑的问题。所以opengauss提供了一个比较实用的的功能,虚拟索引。

通过虚拟索引来,模拟索引建立后语句执行的情况。这里首先需要针对opengauss 将 enable_hypo_index  开关打开。然后通过语句建立虚拟的索引,在通过explain 命令来执行对应的语句,查看索引是否能产生对应的效果。

9ee9cdc52b2364c23d7e13415fcfad88.png

64c3e4f084107a960cc6080ae7fec34c.png

39495b9b0510f09025a1ae0177f287fb.png

同时还可以通过函数来展示,已经创建虚拟索引的列表

9a46919ca5685407759e227f4a051709.png

3  批量索引推荐

这个方式实际上是单条语句的批量模式,通过log_min_duration_ statement 来收集数据库执行的语句,并通过命令的方式将收集的语句变为索引建议。第一步,分离日志中的SQL 语句。

57f50c239a13935873d4492c3d096b52.png

f347fe3237583bd9432afe4c077ea88d.png

第二步通过命令对语句进行分析,

019df96a94e0f84e0ffc7370b1a725a3.png

977768a11a8185a6d86ded94dfd6708b.png

最终产生索引建议。

bed6f4f8414c69d2deb2fa241878fdfe.png

以上是国内的开源opengauss 在索引建议方面给出的方式。

除了以上的方式以外,还有一种简便,立即可以给出的结果的方式,https://pganalyze.com/index-advisor  , 通过index advisor 网页方式来满足索引给出的建议。其中可以在页面中选择 load example 选择你想采用的索引的方式,通过不同的方式来给出索引的建议,操作的模式也很简单,主要是将建表的语句 和执行的语句分别放入不同的操作BOX中,然后进行分析即可给出索引的建议。

e8525f0f8d069bca8fa6f2c6f4d8a124.png

最后一个方式是阿里云 POSTGRESQL RDS 提供的 index advisor ,也是这些index advisor唯一一个能找到原理图的 index advisor. 从开发者的结构图中可以看出,原理是在语句重写后在plan 前加入了一个钩子,将信息引入到 advisor 程序中,通过自己的planner 来分析需要添加的索引。其中

find indexable column 是通过执行计划来找出可能添加索引的字段,通过重新分析和组合来产生相关的索引建议。

ede9dd7d701a51dfb089fb10fc97a6c0.png

实际我们在操作的过程中,操作的方式还是比较简便的。后续可以针对操作单独写一期相关的部分。下面仅仅简单的对操作进行描述。

阿里云的POSTGRESQL RDS 的 index advisor 是在最近推出的一个功能,其中实现的方式主要有两种 

1  通过在阿里云的 POSTGRESQL RDS 中 shared_preload_libraries 中加载 index_advisor 模块

2  通过在session 中动态的加载 index advisor 功能对当前线程中,或正在运行的语句进行分析。

下面简单介绍第二种方式

进入到阿里云的POSTGRESQL RDS 中,目前在POSTGRESQL 13 的RDS 版本中使用过。 通过psql 登陆到 RDS 中,直接运行  load  'index_advisor'; 

此时系统会在这个SESSION 中自动加载 index advisor 功能,此时直接运行需要进行索引建议的语句,通过explain 的方式。然后直接访问 index_advisory 表,则表中会标注最近你执行的语句建议的索引位置如 attrs,这里红色标记的位置指定的是表中需要添加索引的字段顺序和位置,以及相关索引的大小等。如果是复杂的语句,就需要自己编写一个语句将这个里面的建议变成可以读取的信息。

思路是通过backend_pid + 行顺序 + 表实体的OBJECT 字段转换,最终可以变成一个需要添加的索引的建议。

c9294cd256fb80f1bf094e47c96a68df.png

第二种场景也很简单,直接加载index advisor 然后通过pg_stat_activity 发现执行慢的语句的 PID 然后直接将pid 放入到函数 show_index_advisory中,然后函数就可以给出建立索引的语句了,如果直接写null则会推荐整体目前正在运行的索引语句,需要建立的索引(建议不要这样做,对系统性能有损耗,或容易出现其他问题)

12a80cbf5a738b954f809e0de3c61367.png

以上就是4 种推荐POSTGRESQL index advisor 的方法,之前也写过普通的POSTGRESQL 如何进行索引推荐的方法,

1   通过插件的方式

https://mp.weixin.qq.com/s?__biz=Mzg4NDA0NTEwNA==&mid=2247488921&idx=1&sn=16c5116fece5b1e77c10e29480232dc9&chksm=cfbf71c6f8c8f8d0732d6aca3169977611a2ad6f9f8180f1c542f3c7696bd4e17a09791fb921&token=507603249&lang=zh_CN#rd

2  通过人工分析的方法

https://mp.weixin.qq.com/s?__biz=Mzg4NDA0NTEwNA==&mid=2247496017&idx=1&sn=fb6781505cbd1045fc59b3ae5008a682&chksm=cfbc950ef8cb1c18305bb51552c37f291409ff32e0b9ed9da2df5a154416e8d88a8af523dcb0&token=348735553&lang=zh_CN#rd

af374017f04bbb82596d6e345fdc2f61.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值