POSTGRESQL index advisor 4种方式 (国内,国外,远程,云)那个更好
索引建议,在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种方式 (国内,国外,远程,云)那个更好相关推荐
- GIS矢量数据上传到postgresql数据库的三种方式
**前提工作:**新建自己的数据库用于存放数据,如:test.在数据库上建立查询语句:CREATE EXTENSION postgis; 运行即可在扩展中出现,其他扩展的建立类似. 一.通过QGIS数 ...
- python 遍历字符串的每一个字符_Python之字符串的遍历的4种方式
python的字符串遍历有4种方式: 1. 下标法 2. for in 3. iter内置函数 4. enumerate 其中下标法和enumerate适合需要判断后续字符的场景,比如循环到下标ind ...
- 遍历字符串的每个字符python_Python之字符串的遍历的4种方式
python的字符串遍历有4种方式: 1. 下标法 2. for in 3. iter内置函数 4. enumerate 其中下标法和enumerate适合需要判断后续字符的场景,比如循环到下标ind ...
- pandas创建DataFrame的几种方式(建议收藏)
pandas创建DataFrame的几种方式 如果你是一个pandas初学者,那么不知道你会不会像我一样.在学用列表或者数组创建DataFrame时理不清怎样用数据生成以及想要形状的的Datafram ...
- python遍历字符串存入列表_Python遍历字符串的4种方式
码农公社 210.net.cn 210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python遍历字符串的4种方式 1.下标法 2.for in 3.iter内 ...
- python遍历字符串的每个字符_Python遍历字符串的4种方式
码农公社 210.net.cn 210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python遍历字符串的4种方式 1.下标法 2.for in 3.iter内 ...
- python for遍历字符串_Python之字符串的遍历的4种方式
本文主要介绍了Python之字符串的遍历的4种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. python的字符串遍历有4 ...
- PostgreSQL获取当前时间的方式
PostgreSQL 当中有四种方式获取当前时间. 1. now() 通过 now() 获取的时间是最完整的时间,包括时区,秒也保留到了6位小数 select now(); 得到结果:'2014-12 ...
- python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式
1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...
最新文章
- Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言)
- 操作系统---Systemd
- Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解
- VTK:可视化之FlatShading
- 深度学习之基于Tensorflow2.0实现InceptionV3网络
- C++编程基础一 06-布尔类型
- 浮动div,回到顶部
- 外部函数能修改闭包内的变量_Python函数式编程,Python闭包
- SQL语句(二)创建带主键和约束的数据表
- c++将小数化为二进制_C++中的float内存存储、与十进制的转换
- 爱奇艺、芒果TV相继涨价,长视频开启新一轮“加价不加量”游戏?
- 高等数学(第七版)同济大学 习题2-5 个人解答
- Shopee平台很火爆,但是产品价格设置的不合理,努力都是白费的
- Excel文档中字符型数据转化为数字类型
- 动图文件太大怎么办?一招教你在线压缩GIF图片
- 将HEX文件通过Keil软件进行下载
- 带财神和白搭胡牌算法
- 查看已安装Tomcat的版本号
- 如何使用GitHub Desktop管理Gitlab库
- python内存管理三大技术——内存池技术,引用计数器,垃圾回收