索引建议,在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  参数后的文件中。

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

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

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

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

1  简单语句模式

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

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

2  虚拟索引

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

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

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

3  批量索引推荐

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

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

最终产生索引建议。

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

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

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

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

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

阿里云的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 字段转换,最终可以变成一个需要添加的索引的建议。

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

以上就是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

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

  1. GIS矢量数据上传到postgresql数据库的三种方式

    **前提工作:**新建自己的数据库用于存放数据,如:test.在数据库上建立查询语句:CREATE EXTENSION postgis; 运行即可在扩展中出现,其他扩展的建立类似. 一.通过QGIS数 ...

  2. python 遍历字符串的每一个字符_Python之字符串的遍历的4种方式

    python的字符串遍历有4种方式: 1. 下标法 2. for in 3. iter内置函数 4. enumerate 其中下标法和enumerate适合需要判断后续字符的场景,比如循环到下标ind ...

  3. 遍历字符串的每个字符python_Python之字符串的遍历的4种方式

    python的字符串遍历有4种方式: 1. 下标法 2. for in 3. iter内置函数 4. enumerate 其中下标法和enumerate适合需要判断后续字符的场景,比如循环到下标ind ...

  4. pandas创建DataFrame的几种方式(建议收藏)

    pandas创建DataFrame的几种方式 如果你是一个pandas初学者,那么不知道你会不会像我一样.在学用列表或者数组创建DataFrame时理不清怎样用数据生成以及想要形状的的Datafram ...

  5. python遍历字符串存入列表_Python遍历字符串的4种方式

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python遍历字符串的4种方式 1.下标法 2.for in 3.iter内 ...

  6. python遍历字符串的每个字符_Python遍历字符串的4种方式

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python遍历字符串的4种方式 1.下标法 2.for in 3.iter内 ...

  7. python for遍历字符串_Python之字符串的遍历的4种方式

    本文主要介绍了Python之字符串的遍历的4种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. python的字符串遍历有4 ...

  8. PostgreSQL获取当前时间的方式

    PostgreSQL 当中有四种方式获取当前时间. 1. now() 通过 now() 获取的时间是最完整的时间,包括时区,秒也保留到了6位小数 select now(); 得到结果:'2014-12 ...

  9. python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...

最新文章

  1. Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言)
  2. 操作系统---Systemd
  3. Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解
  4. VTK:可视化之FlatShading
  5. 深度学习之基于Tensorflow2.0实现InceptionV3网络
  6. C++编程基础一 06-布尔类型
  7. 浮动div,回到顶部
  8. 外部函数能修改闭包内的变量_Python函数式编程,Python闭包
  9. SQL语句(二)创建带主键和约束的数据表
  10. c++将小数化为二进制_C++中的float内存存储、与十进制的转换
  11. 爱奇艺、芒果TV相继涨价,长视频开启新一轮“加价不加量”游戏?
  12. 高等数学(第七版)同济大学 习题2-5 个人解答
  13. Shopee平台很火爆,但是产品价格设置的不合理,努力都是白费的
  14. Excel文档中字符型数据转化为数字类型
  15. 动图文件太大怎么办?一招教你在线压缩GIF图片
  16. 将HEX文件通过Keil软件进行下载
  17. 带财神和白搭胡牌算法
  18. 查看已安装Tomcat的版本号
  19. 如何使用GitHub Desktop管理Gitlab库
  20. python内存管理三大技术——内存池技术,引用计数器,垃圾回收

热门文章

  1. bilibili手机视频下载目录整理脚本
  2. mysql 16g内存够用么_日常办公多大的内存够用 电脑内存8g和16g的区别
  3. Microsoft Visio 2010 安装失败 安装界面闪退
  4. 无老师作文巨讲堂连载【2015年上半年全集】|托福作文满分必备
  5. 如何用matlab在Excel中画画 附源代码
  6. 开源的跨平台AI模型部署总有一款是你的菜
  7. Macbook air小白装双系统
  8. 设计Course类:处理课程信息,每门课都有一个名字以及选课的学生,要能够向/从这个课程添加/删除一个学生
  9. 10. JavaScript
  10. STM32SPI通信原理