云贝教育 |【PostgreSQL PGCA】pg15安装pg_hint_plan扩展包

pg15安装pg_hint_plan扩展包

pg当前是支持HINT固定执行计划,需要通过扩展包pg_hint_plan来实现

一、扩展包下载:

Releases · ossc-db/pg_hint_plan · GitHub

二、选择v15版本
pg_hint_plan15 1.5.1 is released
pg_hint_plan15 1.5.1 is released. This version only supports PostgreSQL 15.
Some changes are made in this release:
    Fix hint stack corruption on ERROR when setting GUCs from Set hints (Michael Paquier: 61a3a55)
    Fix handling of unavailable indexes in Scan hints (Sami Imseih: 33adb40)
    Reset more aggressively hints for queries executed via extended query protocol (tanujnay112: de709e6)
    Add EXPLAIN (COSTS false) to some tests (Masahiro Ikeda: ffd7f62)
    Bootstrap a new documentation (Julien Rouhaud: 287e9b5, and more). This removes the HTML documentation, switching to a set of markdown files with support for multiple languages possible.
    Fix and improve documentation (Michael Paquier: ea8616b)

下载源码包(任选其一)

图片

三、上传postgres用户下
[postgres@ora19c02 ~]$ ll -d pg_hint_plan-REL15_1_5_1.zip 
-rw-r--r-- 1 postgres postgres 227951 Nov  1 15:21 pg_hint_plan-REL15_1_5_1.zip

四、解压包
unzip pg_hint_plan-REL15_1_5_1.zip

五、进入解压目录,并编绎
[postgres@ora19c02 pg_hint_plan-REL15_1_5_1]$ make 
[postgres@ora19c02 pg_hint_plan-REL15_1_5_1]$ make install

编绎可能会碰到的问题:

1)make时提示命令找不到

/bin/sh: rpmbuild: command not found

解决
  yum install rpm-build

2)权限不足

[postgres@ora19c02 pg_hint_plan-REL15_1_5_1]$ make install
/usr/bin/mkdir -p '/usr/local/postgres/share/extension'
/usr/bin/mkdir -p '/usr/local/postgres/share/extension'
/usr/bin/mkdir -p '/usr/local/postgres/lib'
/usr/bin/install -c -m 644 .//pg_hint_plan.control '/usr/local/postgres/share/extension/'
/usr/bin/install: cannot create regular file ‘/usr/local/postgres/share/extension/pg_hint_plan.control’: Permission denied
make: *** [install] Error 1

授权解决

[root@ora19c02 ]# chmod 777 /usr/local/postgres -R

六、验证安装
[postgres@ora19c02 pg_hint_plan-REL15_1_5_1]$ ls -l /usr/local/postgres/lib/ | grep hint
-rwxr-xr-x 1 postgres postgres  357016 Nov  1 15:31 pg_hint_plan.so

[postgres@ora19c02 pg_hint_plan-REL15_1_5_1]$ ls -l /usr/local/postgres/share/extension/ | grep hint
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.0--1.3.1.sql
-rw-r--r-- 1 postgres postgres   684 Nov  1 15:31 pg_hint_plan--1.3.0.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.1--1.3.2.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.2--1.3.3.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.3--1.3.4.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.4--1.3.5.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.5--1.3.6.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.6--1.3.7.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.7--1.3.8.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.3.8--1.3.9.sql
-rw-r--r-- 1 postgres postgres   433 Nov  1 15:31 pg_hint_plan--1.3.9--1.4.sql
-rw-r--r-- 1 postgres postgres   437 Nov  1 15:31 pg_hint_plan--1.4.1--1.4.2.sql
-rw-r--r-- 1 postgres postgres   435 Nov  1 15:31 pg_hint_plan--1.4--1.4.1.sql
-rw-r--r-- 1 postgres postgres   434 Nov  1 15:31 pg_hint_plan--1.4.2--1.5.sql
-rw-r--r-- 1 postgres postgres   436 Nov  1 15:31 pg_hint_plan--1.5--1.5.1.sql
-rw-r--r-- 1 postgres postgres   104 Nov  1 15:31 pg_hint_plan.control

七、设置插件

7.1 会话级别设置

postgres=# LOAD 'pg_hint_plan';
LOAD

如果报错,在template1数据库下执行以下SQL

testdb=# \c template1
template1=# create extension pg_hint_plan;
CREATE EXTENSION

7.2 用户级别设置

postgres=# alter user postgres set session_preload_libraries='pg_hint_plan';
ALTER ROLE

7.3 数据库级别设置

postgres=# alter database postgres set session_preload_libraries='pg_hint_plan';
ALTER DATABASE

7.4 集群级别设置

修改参数文件

[postgres@ora19c02 data]$ vi postgresql.conf 
shared_preload_libraries = 'pg_hint_plan'       # (change requires restart)

重启数据库

pg_ctl restart

7.5 重置配置

配置错了的话就连不上数据库,如果配置错了,连接template1库执行

alter database postgres reset session_preload_libraries;
alter user postgres reset session_preload_libraries;

八、测试HINT功能

8.1 查看参数

testdb=# show session_preload_libraries;
 session_preload_libraries 
---------------------------
 pg_hint_plan

8.2 、模拟数据

CREATE TABLE
IF NOT EXISTS dept (
    -- 部门编号
    deptno serial PRIMARY KEY,
    -- 部门名称
    dname VARCHAR (15),
    -- 部门所在位置
    loc VARCHAR (50)
);
CREATE TABLE
IF NOT EXISTS emp (
    -- 雇员编号
    empno serial,
    -- 雇员姓名
    ename VARCHAR (15),
    -- 雇员职位
    job VARCHAR (10),
    -- 雇员对应的领导的编号
    mgr INT,
    -- 雇员的雇佣日期
    hiredate DATE,
    -- 雇员的基本工资
    sal DECIMAL (7, 2),
    -- 奖金
    comm DECIMAL (7, 2),
    -- 所在部门
    deptno INT,
    FOREIGN KEY (deptno) REFERENCES dept (deptno)
);
-- dept表中的数据
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
-- emp表中的数据
INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('1980-12-17','yyyy-mm-dd'),800,NULL,20);
INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('1981-2-20','yyyy-mm-dd'),1600,300,30);
INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('1981-2-22','yyyy-mm-dd'),1250,500,30);
INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('1981-4-2','yyyy-mm-dd'),2975,NULL,20);
INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('1981-9-28','yyyy-mm-dd'),1250,1400,30);
INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1981-5-1','yyyy-mm-dd'),2850,NULL,30);
INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('1981-6-9','yyyy-mm-dd'),2450,NULL,10);
INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('87-7-13','yyyy-mm-dd'),3000,NULL,20);
INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('1981-11-17','yyyy-mm-dd'),5000,NULL,10);
INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('1981-9-8','yyyy-mm-dd'),1500,0,30);
INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('87-7-13','yyyy-mm-dd'),1100,NULL,20);
INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('1981-12-3','yyyy-mm-dd'),950,NULL,30);
INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('1981-12-3','yyyy-mm-dd'),3000,NULL,20);
INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('1982-1-23','yyyy-mm-dd'),1300,NULL,10);

8.3 执行SQL,查看默认执行计划

testdb=# explain analyze select * from emp a,dept b where a.deptno=b.deptno;
                                                   QUERY PLAN                                    
                
-----------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=19.23..35.67 rows=510 width=300) (actual time=0.088..0.098 rows=14 loops=1)
   Hash Cond: (a.deptno = b.deptno)
   ->  Seq Scan on emp a  (cost=0.00..15.10 rows=510 width=130) (actual time=0.012..0.015 rows=14
 loops=1)
   ->  Hash  (cost=14.10..14.10 rows=410 width=170) (actual time=0.016..0.017 rows=4 loops=1)
         Buckets: 1024  Batches: 1  Memory Usage: 9kB
         ->  Seq Scan on dept b  (cost=0.00..14.10 rows=410 width=170) (actual time=0.009..0.009 
rows=4 loops=1)
 Planning Time: 1.149 ms
 Execution Time: 0.182 ms
(8 rows)

以上输出可以看到,默认的执行计划走HJ

8.4 模拟NL

testdb=# explain analyze select /*+ nestloop(a b)*/* from emp a,dept b where a.deptno=b.deptno;
                                                        QUERY PLAN                               
                          
---------------------------------------------------------------------------------------------------------------------------
 Nested Loop  (cost=0.15..147.14 rows=510 width=300) (actual time=0.040..0.056 rows=14 loops=1)
   ->  Seq Scan on emp a  (cost=0.00..15.10 rows=510 width=130) (actual time=0.009..0.011 rows=14
 loops=1)
   ->  Index Scan using dept_pkey on dept b  (cost=0.15..0.26 rows=1 width=170) (actual time=0.00
2..0.002 rows=1 loops=14)
         Index Cond: (deptno = a.deptno)
 Planning Time: 0.166 ms
 Execution Time: 0.113 ms
(6 rows)

8.5 模拟MJ

testdb=# explain analyze select /*+ mergejoin(a b)*/* from emp a,dept b where a.deptno=b.deptno;
                                                   QUERY PLAN                                    
                
-----------------------------------------------------------------------------------------------------------------
 Merge Join  (cost=69.93..79.63 rows=510 width=300) (actual time=0.168..0.178 rows=14 loops=1)
   Merge Cond: (a.deptno = b.deptno)
   ->  Sort  (cost=38.04..39.31 rows=510 width=130) (actual time=0.142..0.146 rows=14 loops=1)
         Sort Key: a.deptno
         Sort Method: quicksort  Memory: 26kB
         ->  Seq Scan on emp a  (cost=0.00..15.10 rows=510 width=130) (actual time=0.014..0.019 r
ows=14 loops=1)
   ->  Sort  (cost=31.89..32.92 rows=410 width=170) (actual time=0.020..0.020 rows=3 loops=1)
         Sort Key: b.deptno
         Sort Method: quicksort  Memory: 25kB
         ->  Seq Scan on dept b  (cost=0.00..14.10 rows=410 width=170) (actual time=0.010..0.011 
rows=4 loops=1)
 Planning Time: 1.826 ms
 Execution Time: 0.417 ms
(12 rows)

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124317.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络第4章-通用转发和SDN

引子: 在前面,我们将基于目的地转发的特征总结为两个步骤: 查找目的IP地址(匹配),然后将分组发送到有特定输出端口的交换结构(“动作”)。 但是这种转发特征会带来许多问题&#…

软件测试面试会问哪些问题?

软件测试面试,一般会被问到下面这九类问题。 1、基础问题 2、Linux命令 3、数据库 4、功能测试 5、Python基础 6、接口测试 7、自动化测试 8、性能测试 9、人事问题 接下来,以上9类问题,我都会分别结合2个案例,附上答案&#xff0…

【gltf-pipeline】安装gltf-pipeline 进行文件格式转换

问题 想使用gltf-pipeline进行gltf和glb格式转换。简单记录一下安装过程。 解决 1、安装Node.js Node.js下载路径:https://nodejs.org/en 建议默认设置安装。 添加系统环境变量: 测试安装是否成功: 在cmd.exe中运行: no…

self.register_buffer方法使用解析(pytorch)

self.register_buffer就是pytorch框架用来保存不更新参数的方法。 列子如下: self.register_buffer("position_emb", torch.randn((5, 3)))第一个参数position_emb传入一个字符串,表示这组参数的名字,第二个就是tensor形式的参数…

虚拟机网络没有有效的ip配置

虚拟机网络没有有效的ip配置: 原因猜测:或许是之前使用的操作系统把网络给占了。 解决方法:点击虚拟机的 遍历->网络编辑器->移除不要的网络,然后添加网络。(下面的图就是我把虚拟网络全部移除,然后…

png怎么转jpg?这款图片转格式工具一学就会用

虽然png图片格式是一种无损压缩格式,但是png图片的内存大小也是比较大的,而且兼容性上也没有jpg图片好,许多平台推荐的也都是jpg格式,所以当我们需要把png转jpg格式的时候,就需要用到图片格式转换器,今天推…

【Qt绘制小猪】以建造者模式绘制小猪

效果 学以致用&#xff0c;使用设计模式之建造者模式绘制小猪。 代码 接口&#xff1a;申明绘制的步骤 PigBuilder.h #ifndef PIGBUILDER_H #define PIGBUILDER_H#include <QObject> #include <QPainter>class PigBuilder : public QObject {Q_OBJECT public:ex…

解密Elasticsearch:深入探究这款搜索和分析引擎

•开篇 最近使用Elasticsearch实现画像系统&#xff0c;实现的dmp的数据中台能力。同时调研了竞品的架构选型。以及重温了redis原理等。特此做一次es的总结和回顾。网上没看到有人用Elasticsearch来完成画像的。我来做第一次尝试。 背景说完&#xff0c;我们先思考一件事&…

计算机中丢失mfc140u.dll怎么解决

mfc140u.dll是一个Microsoft Visual C库文件&#xff0c;主要用于MFC&#xff08;Microsoft Foundation Class&#xff09;应用程序的开发。它包含了MFC应用程序所需的一些常用功能&#xff0c;如对话框、窗口、菜单等。当mfc140u.dll丢失时&#xff0c;可能会导致MFC应用程序无…

Android MotionLayout

MotionLayout exends ConstraintLayout(动画框架 过渡) View动画 API1 属性动画API11 过渡动画API18 root.width RootViewWidth TransitionManager.beginDelayedTransition(view) 过渡动画 可以改变其大小和流畅性 Fade 可以改变透明度 通过TrasitinManager管理 Go:动态替…

vue前端实现多个url下载并合并为zip文件

一、安装 npm install jszip npm install file-saver 二、引入 import axios from axios import JSZip from "jszip"; import FileSaver from "file-saver"; 三、核心代码 videoData:[/video/26519f026fc012521605563015227403.mp4,/video/f7b9cdae14…

数字通信和fpga概述——杜勇版本学习笔记

1数字通信处理流程 脉冲调制是每个数字通信系统中间必不可少的环节&#xff0c;通常是使用升余弦滚降滤波器来实现。 超外差接收机原理是利用本地产生的振荡波与输入信号混频&#xff0c;将输入信号频率变换为某个预先确定的频率的方法。超外差原理最早是由E.H.阿姆斯特朗于1…

2023年云计算发展趋势:生活的智能未来

目录 引言1 智能家居的崭新时代2 无人驾驶的崭新时代3 虚拟现实的扩展与改进4 人工智能的综合应用5 云计算的可持续性结语 引言 时光荏苒&#xff0c;科技的飞速发展已经成为当今社会的标志之一。在这个数字化时代&#xff0c;云计算已经成为推动技术革新和生活方式改变的关键…

软件测试|Python Faker库使用指南

简介 Faker是一个Python库&#xff0c;用于生成虚假&#xff08;假的&#xff09;数据&#xff0c;用于测试、填充数据库、生成模拟数据等目的。它可以快速生成各种类型的虚假数据&#xff0c;如姓名、地址、电子邮件、电话号码、日期等&#xff0c;非常适合在开发和测试过程中…

CSS实现鼠标移至图片上显示遮罩层及文字效果

效果图&#xff1a; 1、将遮罩层html代码与图片放在一个div 我是放在 .proBK里。 <div class"proBK"><img src"../../assets/image/taskPro.png" class"proImg"><div class"imgText"><h5>用户在线发布任务&l…

FreeRTOS学习笔记(二)

一、时间片调度 1、同等优先级任务轮流地享有相同的 CPU 时间(可设置)&#xff0c; 叫时间片&#xff0c;在FreeRTOS中&#xff0c;一个时间片就等于SysTick 中断周期 /* 任务一&#xff0c;实现LED0每500ms翻转一次 */ void task1( void * pvParameters ) {uint32_t task1_n…

Java算法(六):模拟评委打分案例 方法封装抽离实现 程序的节流处理

Java算法&#xff08;六&#xff09; 评委打分 需求&#xff1a; 在编程竞赛中&#xff0c;有 6 个评委为参赛选手打分&#xff0c;分数为 0 - 100 的整数分。 选手的最后得分为&#xff1a;去掉一个最高分和一个最低分后 的 4个评委的平均值。 注意程序的节流 package c…

Spring-循环依赖简述

什么是循环依赖 // A依赖了B class A {public B b; } ​ // B依赖了A class B {public A a; } ​ // 循环依赖 A a new A(); B b new B(); a.b b; b.a a; 对象之间的相互依赖很正常&#xff0c;但是在Spring中由于对象创建要经过Bean的生命周期&#xff0c;所以就有了循环…

【广州华锐互动】气象卫星监测AR互动教学软件为气象学习带来更多乐趣

由VR制作公司广州华锐互动开发的气象卫星监测AR互动教学软件是一款结合了增强现实(AR)技术与气象监测技术的教育软件。它通过直观、互动的方式&#xff0c;帮助学生更好地理解和掌握气象监测的基本知识和技能。本文将从气象卫星监测AR互动教学软件的应用场景、优势分析、实际意…

c#如何把字符串中的指定字符删除

可以使用以下四种方法&#xff1a; 一、使用关键字&#xff1a;Replace public string Replace(char oldChar,char newChar); 在对象中寻找oldChar&#xff0c;如果寻找到&#xff0c;就用newChar将oldChar替换掉。 1、实例代码&#xff1a; 2、执行结果&#xff1a; 二、Rem…