2024-05-08 postgres-火山模型-执行-记录

摘要:

2024-05-08 postgres-火山模型-执行-记录

上下文: 2024-05-08 postgres-调试及分析-记录-CSDN博客

火山模型:

  1. 数据流是在查询树上,自上而下进行拉取,由上而下的调用。树本身就表明了数据的流动。
  2. 每次执行一个元组,也就类似于迭代器的模式。
  3. 执行到最底层,是scan table算子,一次获取一行数据。
  4. 上层的算子不断地GetNext的调用下层算子,在本算子进行运算。

查询执行计划:

d1=# EXPLAIN ANALYZE VERBOSE    
d1-# SELECT * FROM  t1 LEFT JOIN t2 ON t2.a = t1.a WHERE t2.b < 5;
***(Single step mode: verify command)*******************************************
EXPLAIN ANALYZE VERBOSE    
SELECT * FROM  t1 LEFT JOIN t2 ON t2.a = t1.a WHERE t2.b < 5;
***(press return to proceed or enter x and return to cancel)********************

                                                    QUERY PLAN                                                     
-------------------------------------------------------------------------------------------------------------------
 Merge Join  (cost=232.74..364.14 rows=8509 width=16) (actual time=0.032..0.035 rows=1 loops=1)
   Output: t1.a, t1.b, t2.a, t2.b
   Merge Cond: (t2.a = t1.a)
   ->  Sort  (cost=74.23..76.11 rows=753 width=8) (actual time=0.020..0.020 rows=2 loops=1)
         Output: t2.a, t2.b
         Sort Key: t2.a
         Sort Method: quicksort  Memory: 25kB
         ->  Seq Scan on public.t2  (cost=0.00..38.25 rows=753 width=8) (actual time=0.010..0.012 rows=2 loops=1)
               Output: t2.a, t2.b
               Filter: (t2.b < 5)
   ->  Sort  (cost=158.51..164.16 rows=2260 width=8) (actual time=0.008..0.008 rows=2 loops=1)
         Output: t1.a, t1.b
         Sort Key: t1.a
         Sort Method: quicksort  Memory: 25kB
         ->  Seq Scan on public.t1  (cost=0.00..32.60 rows=2260 width=8) (actual time=0.002..0.003 rows=2 loops=1)
               Output: t1.a, t1.b
 Planning Time: 0.407 ms
 Execution Time: 0.080 ms
(18 rows)

函数调用堆栈:

#0  heapgettup_pagemode (scan=0x1443958, dir=ForwardScanDirection, nkeys=0, key=0x0) at heapam.c:917
#1  0x00000000004db32a in heap_getnextslot (sscan=0x1443958, direction=ForwardScanDirection, slot=0x1432a78) at heapam.c:1398
#2  0x0000000000730ec5 in table_scan_getnextslot (sscan=0x1443958, direction=ForwardScanDirection, slot=0x1432a78) at ../../../src/include/access/tableam.h:1044
#3  0x0000000000730f97 in SeqNext (node=0x14328d8) at nodeSeqscan.c:80
#4  0x00000000006f860d in ExecScanFetch (node=0x14328d8, accessMtd=0x730efe <SeqNext>, recheckMtd=0x730fa8 <SeqRecheck>) at execScan.c:133
#5  0x00000000006f86b3 in ExecScan (node=0x14328d8, accessMtd=0x730efe <SeqNext>, recheckMtd=0x730fa8 <SeqRecheck>) at execScan.c:199
#6  0x0000000000730ff3 in ExecSeqScan (pstate=0x14328d8) at nodeSeqscan.c:112
#7  0x0000000000732343 in ExecProcNode (node=0x14328d8) at ../../../src/include/executor/executor.h:257
#8  0x000000000073248a in ExecSort (pstate=0x14326c8) at nodeSort.c:108
#9  0x00000000006f4ca9 in ExecProcNodeFirst (node=0x14326c8) at execProcnode.c:463
#10 0x0000000000726e97 in ExecProcNode (node=0x14326c8) at ../../../src/include/executor/executor.h:257
#11 0x0000000000727af0 in ExecMergeJoin (pstate=0x14322b8) at nodeMergejoin.c:656
#12 0x00000000006f4ca9 in ExecProcNodeFirst (node=0x14322b8) at execProcnode.c:463
#13 0x00000000006ea204 in ExecProcNode (node=0x14322b8) at ../../../src/include/executor/executor.h:257
#14 0x00000000006ec6bb in ExecutePlan (estate=0x1432078, planstate=0x14322b8, use_parallel_mode=false, operation=CMD_SELECT, sendTuples=true, numberTuples=0, 
    direction=ForwardScanDirection, dest=0x1423f98, execute_once=true) at execMain.c:1551
#15 0x00000000006ea76a in standard_ExecutorRun (queryDesc=0x136dfc8, direction=ForwardScanDirection, count=0, execute_once=true) at execMain.c:361
#16 0x00000000006ea602 in ExecutorRun (queryDesc=0x136dfc8, direction=ForwardScanDirection, count=0, execute_once=true) at execMain.c:305
#17 0x000000000090c03e in PortalRunSelect (portal=0x13ad5d8, forward=true, count=0, dest=0x1423f98) at pquery.c:921
#18 0x000000000090bd2d in PortalRun (portal=0x13ad5d8, count=9223372036854775807, isTopLevel=true, run_once=true, dest=0x1423f98, altdest=0x1423f98, qc=0x7ffff3ea58b0)
    at pquery.c:765
#19 0x0000000000905d39 in exec_simple_query (query_string=0x134a598 "SELECT * FROM  t1 LEFT JOIN t2 ON t2.a = t1.a WHERE t2.b < 5;") at postgres.c:1214
#20 0x000000000090a0ef in PostgresMain (argc=1, argv=0x7ffff3ea5b40, dbname=0x13775d8 "d1", username=0x1345a48 "kevin") at postgres.c:4496
#21 0x0000000000857a54 in BackendRun (port=0x136f010) at postmaster.c:4530
#22 0x00000000008573c1 in BackendStartup (port=0x136f010) at postmaster.c:4252
#23 0x0000000000853b10 in ServerLoop () at postmaster.c:1745
#24 0x00000000008533c9 in PostmasterMain (argc=1, argv=0x1343a00) at postmaster.c:1417
#25 0x0000000000760270 in main (argc=1, argv=0x1343a00) at main.c:209

分析:

  1. 从查询执行的函数调用堆栈,可以看到很明确的在查询树中,由上层算子,调用下层算子,数据的流动,在查询树中由上而下的进行拉取
  2. 最底层执行的算子是ExecScanFetch,一次获取一行的数据
  3. pg的查询执行的抽象程度很好,每个算子抽象成node, 整体大的框架确定后,每个算子单独进行物理执行的实现

参考:

PostgreSQL 基于heap表 存储引擎实现原理 - 知乎 (zhihu.com)

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

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

相关文章

OpenHarmony 4.0 实战开发——分布式任务调度浅析

1 概述 OpenHarmony 分布式任务调度是一种基于分布式软总线、分布式数据管理、分布式 Profile 等技术特性的任务调度方式。它通过构建一种统一的分布式服务管理机制&#xff0c;包括服务发现、同步、注册和调用等环节&#xff0c;实现了对跨设备的应用进行远程启动、远程调用、…

ChatPPT开启高效办公新时代,AI赋能PPT创作

目录 一、前言二、ChatPPT的几种用法1、通过在线生成2、通过插件生成演讲者模式最终成品遇到问题改进建议 三、ChatPPT其他功能 一、前言 想想以前啊&#xff0c;为了做个PPT&#xff0c;我得去网上找各种模板&#xff0c;有时候还得在某宝上花钱买。结果一做PPT&#xff0c;经…

拼多多投产比怎么逐步调高

提高拼多多的投产比&#xff08;ROI&#xff09;需要综合考虑多个因素&#xff0c;包括点击量、转化率、客单价以及点击花费。以下是一些有效的方法&#xff1a; 拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营销工具&#xff0c;由商家自…

Aigtek安泰电子邀您莅临2024中国微米纳米技术学会柔性电子技术与应用创新论坛

2024年5月18日-20日&#xff0c;中国微米纳米技术学会柔性电子技术与应用创新论坛将于深圳登席路国际酒店举办&#xff0c;届时Aigtek安泰电子将携一众明星产品及专业测试解决方案亮相本次论坛&#xff0c;我们诚邀您莅临No.A39展位参观、洽谈与观摩&#xff01; - 时间&#x…

8-3 html中的表单标签 select和textarea

跟学b站黑马程序员pink老师&#xff0c;之前发过长篇&#xff0c;太长不好阅读&#xff0c;拆分成短篇 8.4.3 select下拉表单元素 如果在页面中有多个选项让用户选择&#xff0c;并且想要节约页面空间&#xff0c;我们可以用<select>标签来定义下拉列表 1.<select&g…

HawkEye—高效、细粒度的大页管理算法

文章目录 HawkEye—高效、细粒度的大页管理算法1.作者简介2.文章简介与摘要3.简介(1).当时的SOTA系统概述LinuxFreeBSDIngens (2).HawkEye 4.动机(1).地址翻译开销与内存膨胀(2).缺页中断延迟与缺页中断次数(3).多处理器大页面分配(4).如何测算地址翻译开销&#xff1f; 5.设计…

搜维尔科技:OptiTrack是基于LED墙虚拟制作舞台的最佳选择

OptiTrack因其绝对精度、易用性、可靠性以及与现场工具的完美集成而被选中&#xff0c;仍然是全球首屈一指的基于 LED 墙的虚拟制作舞台的选择。 当今虚拟制作阶段的低延迟、超精确摄像机跟踪标准 /- 0.2 毫米 位置精度1 < 10 毫秒 系统延迟 /- 0.1 度 旋转精度2 电影…

Spring Boot集成Ldap快速入门Demo

1.Ldap介绍 LDAP&#xff0c;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议. LDAP是一种特殊的服务器&#xff0c;可以存储数据数据的存储是目录形式的&#xff0c;或者可以理解为树状结构&#xff08;一层套一层&#xff09;一般存储关于用户、用户…

Linux实验 系统管理(一)

实验目的&#xff1a; 掌握Linux系统文件检索、排序、查找命令&#xff1b;掌握Linux系统文件的特殊权限及文件默认权限umask掩码&#xff1b;掌握Linux系统用户和组管理、配置文件和常用命令。 实验内容&#xff1a; 在VMware中启动已经安装好的CentOS&#xff0c;本地登录r…

Docker Compose常用命令与属性

大家好&#xff0c;今天给大家分享Docker Compose的常用命令&#xff0c;以及docker-compose文件的属性。Docker Compose 是一个用于定义和运行多容器 Docker 应用应用的重要工具。它通过一个配置文件&#xff08;docker-compose.yml&#xff09;来详细定义多个容器之间的关联、…

拼多多投产比高了好还是低了好

投产比是衡量店铺经济效益和可行性的重要指标&#xff0c;它通过比较投入和产出&#xff08;销售额&#xff09;来反映店铺的盈利能力&#xff0c;一个高的投产比意味着相对较小的投入获得了较大的销售额&#xff0c;表明店铺的经济效益较好。要提升投产比&#xff0c;商家可以…

模型查询器在使用别名后不能使用tp6

在我们定义了模型的查询器时&#xff0c;再通过模型进行连表加别名的时候&#xff0c;使用查询器&#xff0c;查询器会没办法使用&#xff1b; 那我们可以将查询器前缀增加表名或者__TABLE__ 以上两种方式都可以&#xff0c;个人建议使用__TABLE__&#xff0c;因为这个查询器可…

蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app

本文来自&#xff1a;蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下&#xff0c;大量礼品卡、优惠券因各种原因未能有效…

网络工程师必备:静态路由实验指南

大家好&#xff0c;这里是G-LAB IT实验室。今天带大家学习一下华为静态路由实验配置 01、实验拓扑 02、实验需求 1.R1环回口11,1,1.1模拟PC1 2.R2建立2个环回口模拟Server server-1: 22,1,1.1 server-2: 44.1.1.1 3.要求使用静态路由实现全网互通 PC1去往server-1从R3走…

HA-MAc,透明质酸-甲基丙烯酸酯可用于制备具有交联能力的透明质酸基材料

【基本信息】 Hyaluronate Methacrylate&#xff08;甲基丙烯酸酯化透明质酸&#xff0c;简称HA-MAc&#xff09;是一种重要的生物材料 中文名称&#xff1a;甲基丙烯酸酯化透明质酸、透明质酸-甲基丙烯酸酯 英文名称&#xff1a;Hyaluronate Methacrylate、HA-MAc 分子量&…

电能表采用无线通信的好处

电能表采用无线通信的好处涉及多个方面&#xff0c;从提高数据传输的效率和实时性、增强系统的灵活性和可扩展性&#xff0c;到优化能源管理和提高安全性等方面&#xff0c;都展现了其独特的优势。 一、提高数据传输的效率和实时性 传统的有线通信方式在电能表数据传输中存在…

阿赵UE引擎C++编程学习笔记——信息打印输出

大家好&#xff0c;我是阿赵。   在之前介绍HelloWorld的时候&#xff0c;使用了一个打印的命令&#xff0c;把HelloWorld输出到输出日志里面。   对于我们编写程序代码来说&#xff0c;有2个手段是对程序差错非常重要的&#xff0c;一个是断点&#xff0c;另外一个是输出日…

地下水位自动监测设备:矿井水文监测系统

TH-DSW2地下水位自动监测设备具有实时性、连续性和自动化等特点&#xff0c;广泛应用于地下水深井水位测量、矿山深井水位测量、地热井水位测量。可以实现对地下水位的24小时不间断监测。它在城市供水和水资源管理、农业灌溉、地质和地下探测等领域具有广泛的应用。 在城市供水…

【python】基于岭回归算法对学生成绩进行预测

前言 在数据分析和机器学习领域&#xff0c;回归分析是一种预测连续数值的监督学习技术。当数据特征与目标变量之间存在线性关系时&#xff0c;线性回归模型尤其有用。然而&#xff0c;当特征数量多于样本数量&#xff0c;或者特征之间存在多重共线性时&#xff0c;普通最小二…

液压阀比例电磁铁控制放大器

液压阀比例电磁铁控制放大器是一种将电信号精确转换为液压动力的技术&#xff0c;用于实现对液压系统的精细控制。与传统的开关型电磁铁不同&#xff0c;比例电磁铁可以实现连续控制&#xff0c;允许进行微调以适应不同的控制需求。比例液压阀包括比例压力阀、比例流量阀等&…
最新文章