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

news2024/12/28 21:00:32

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)

图片

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SLAM从入门到精通(安全避障)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在工业生产中,安全是底线。没有安全性的技术,一般也不会在工业生产中进行部署、使用。对于slam来说,同样也是这…

机器人制作开源方案 | 行星探测车实现云端控制

1. 功能描述 本文示例所实现的功能为:手机端控制R261样机行星探测车的显示屏显示心形图。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 3. 功能实现 编程环境:Milxy 0.999及以上版本 下面提供一个手机…

TerraNoise for 3dMax插件教程

TerraNoise for 3dMax插件教程 创建地形: - 从列表中拖动生成器并将其放到画布上 - 将导出器拖放到画布上 - 通过将一条线从生成器黄色输出“拖动”到导出器绿色输入来连接 2 个组件 - 单击导出器中的“无”按钮用于选择输出名称和格式(导出 terragen 地…

Python装饰器的艺术

文章目录 装饰器基础示例代码:执行结果:参数化装饰器示例代码:执行结果:类装饰器示例代码:执行结果:装饰器的堆栈示例代码:执行结果:在Python中,装饰器是一种非常强大的特性,允许开发人员以一种干净、可读性强的方式修改或增强函数和方法。以下是一个关于Python装饰器…

聊聊定时器 setTimeout 的时延问题

给大家推荐一个实用面试题库 1、前端面试题库 (面试必备) 推荐:★★★★★ 地址:web前端面试题库 全局的 setTimeout() 方法设置一个定时器,一旦定时器到期,就会执行一个函数或指定的代码片…

【开源】前后端分离后台管理系统

系统环境 JDK 17Maven 3.0.0MySQL 5.7.0Spring Boot 3.0.10 演示 橙子官网:http://hengzq.cnGitHub 代码下载:https://github.com/mmd0308/orangeGitee 代码下载:https://gitee.com/hengzq/orange 项目截图

Algorithms_LSM树(Log-Structured Merge Tree)

文章目录 引言1. LSM树的原理1.1 写入日志1.2 内存组件1.3 磁盘上的SSTable文件1.4 合并操作 2. LSM树的使用场景2.1 分布式数据库系统2.2 云存储系统2.3 日志和时间序列数据2.4 数据备份和归档 LSM VS BTree结论 引言 在当今信息时代,数据的存储和管理变得越来越重…

信息系统项目管理师第四版--风险管理--可搜索可编辑版本

1. 对目录进行了细化,从目录可以清晰看到每个过程的输入输出工具技术都有哪些,直接点击目录就可以跳转到相应的章节,免得自己在pdf文件里面一直翻一直翻,非常方便。是可编辑版本,还可以进行全文搜索。 下图是目录的部…

LoRaWAN物联网架构

与其他网关一样,LoRaWAN网关也需要在规定的工作频率上工作。在特定国家部署网关时,必须要遵循LoRa联盟的区域参数。不过,它是没有通用频率的,每个国家对使用非授权MHZ频段都有不同的法律规定。例如,中国的LoRaWAN频段是…

Centos7下搭建H3C log服务器

一、rsyslogH3C 安装rsyslog服务器 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld关闭selinux sed -i s/enforcing/disabled/ /etc/selinux/config && setenforce 0centos7服务器,通过yum安装rsyslog yum -y install r…

如何用devtools快速开发一个R语言包?

如何用devtools快速开发一个R语言包? 1. 准备工作2. 如何完整开发一个R包3. 初始化新包4. 启用Git仓库5. 按照目标实现一个函数6. 在.R文件夹下创建文件并保存代码7. 函数测试8. 阶段性总结9. 时不时地检查完整工作状态10. 编辑DESCRIPTION文件11. 配置许可证12. 配…

vmware 启动qnx 环境下载配置

SDP QNX 安装手册 http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.qnxsdp.quickstart/topic/install_host.html qnxsdp-6.5.0-x86-201007091524-nto.iso https://dude6.com/q/a/4990303.html http://www.qnx.com/download/feature.html?programid23647 vmarea …

【Linux】补充:进程管理之手动控制进程,以及计划任务

目录 一、手动启动进程 1、理解前台启动与后台启动 2、如何完成前台启动后台启动的切换 3、完成并行执行多个任务 4、结束进程 1、kill 2、killall 2、pkill 二、计划任务 1、at一次性计划任务 2、实操 2、周期性计划任务 1、关于设置周期性任务的配置文件以及格式…

react 实现chatGPT的打印机效果 兼容富文本,附git地址

1、方式一 :使用插件 typed.js typed.js 网站地址,点我打开 1.1、核心代码如下: //TypeWriteEffect/index.tsx 组件 import React, { useEffect, useRef } from react; import Typed from typed.js; import { PropsType } from ./index.d;…

【STM32】定时器

systick定时器: 【STM32】Systick定时器-CSDN博客 0.通用定时器框图 1.时钟源 2.控制器 3.输入捕获 计数器实际上是与比较寄存器的影子寄存器进行比较的。 4.输出比较 1.STM32的定时器学习要点 参考手册 STM32F1xx中文参考手册.pdf 林何/STM32F103C8 - 码云 -…

【LIUNX】机器互访:免密登陆

服务器端 /etc/ssh/sshd_config 口常见SSH服务器监听的选项如下: Port 22//监听的端口为22 Protocol 2//使用SSH V2协议 ListenAdderss 0.0.0.0 //监听的地址为所有地址 UseDNS no//禁止DNS反向解析 客户端 /etc/ssh/ssh_config 口常见用户登录控制选项如下&#…

Red Giant Trapcode Suite 2024.0.1

Red Giant Trapcode Suite是一款ae视觉效果插件软件,适用于After Effects和Premiere Pro等流行的视频编辑软件。该软件集合了一系列强大而创新的工具,可以帮助用户创建令人惊叹的视觉效果和动态图形。 Red Giant Trapcode Suite包含多种插件&#xff0c…

3-知识补充-MVC框架

3-知识补充-MVC框架 文章目录 3-知识补充-MVC框架MVC概述M、V、C各自负责功能及常用包MVC框架图非前后端分离框架图前后端分离框架图 MVC概述 MVC(Model、View、Controller)是软件工程中的一种**软件架构模式,它把软件系统分为模型、视图和控…

SpringCloudAlibaba——Nacos

Nacos是服务注册中心服务配置中心。替换了以前的EurekaConfigBus。 1.Nacos作为服务注册中心 Nacos支持AP和CP模式的转换。 2.Nacos作为服务配置中心 服务要配置两个yml文件,bootstrap.yml和application.yml。因为Nacos同springcloud-config一样,在项…

NeRF神经辐射场渲染过程详解,三维重建渲染过程基本原理_光线采样sample_pdf()和光线渲染render_rays ()代码详解

目录 1 神经辐射场 1.1 基本原理 1.2 基本流程 1.3 数学解释 2 三维场景图像渲染详解 2.1射线采样 2.2 NeRF 模型预测 2.3 体积渲染 3 采样与渲染代码详解 (rending.py) 3.1 神经体积渲染代码解析 3.2 sample_pdf 函数 3.3 render_rays 函数 …