返回顶部
首页 > 资讯 > 数据库 >PostgreSQL中PlannedStmt结构的日志分析
  • 551
分享到

PostgreSQL中PlannedStmt结构的日志分析

2024-04-02 19:04:59 551人浏览 泡泡鱼
摘要

这篇文章主要介绍了postgresql中PlannedStmt结构的日志分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。APPEND-&g

这篇文章主要介绍了postgresql中PlannedStmt结构的日志分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

PostgreSQL中PlannedStmt结构的日志分析

APPEND->appendplans

APPEND->appendplans是链表结构,有2个元素,每个元素的类型为T_NESTLOOP(内嵌循环),通常的信息与其他节点类型类似,重点是lefttree和righttree均不为空,jointype为0表示INNER_JOIN

LIMIT->SORT->APPEND->appendplans->head
lefttree
进入第一个元素的左树

              :lefttree 
                  {SEQSCAN /T_SEQSCAN类型的node,顺序扫描
                  :startup_cost 0.00 
                  :total_cost 12.00 
                  :plan_rows 1 //涉及的行数
                  :plan_width 256 //平均行宽
                  :parallel_aware false 
                  :parallel_safe true 
                  :plan_node_id 5 //Plan id
                  :targetlist (...) //省略
                  :qual (
                     {OPEXPR 
                     :opno 98  //PG_OPERATOR OID of the operator,texteq字符串相等
                     :opfuncid 67 //PG_PROC OID of underlying function,texteq字符串相等
                     :opresulttype 16 //PG_TYPE OID of result value,bool值
                     :opretset false 
                     :opcollid 0 //pg_collation
                     :inputcollid 100 //输入的collation(default)
                     :args (//参数,链表类型
                        {RELABELTYPE //第1个参数为RelabelType类型
                        :arg //指向Expr的指针,实际类型为VAR
                           {VAR //第
                           :varno 4 //在rtable中处于第4个位置的RTE
                           :varattno 2 //属性编号
                           :vartype 1043 //类型,pg_type OID,varchar
                           :vartypmod 14 
                           :varcollid 100 
                           :varlevelsup 0 
                           :varnoold 4 //原始的varno
                           :varoattno 2 //原始的varattno
                           :location 110//token位置(在sql语句中)
                           }
                        :resulttype 25 
                        :resulttypmod -1 
                        :resultcollid 100 
                        :relabelfORMat 2 
                        :location -1
                        }
                        {CONST //第2个参数为Const类型
                        :consttype 25 //pg_type OID
                        :consttypmod -1 //
                        :constcollid 100 //
                        :constlen -1 
                        :constbyval false //传值?如为false,则constvalue中的前4个字节为value的说明,在这个案例中,为32(即2的4次方),从第5个字节开始,长度为4的字符串
                        :constisnull false 
                        :location 205 //token所在位置
                        :constvalue 8 [ 32 0 0 0 49 48 48 49 ]//即字符串"1001"
                        }
                     )
                     :location -1
                     }
                  )
                  :lefttree <> //左树为空
                  :righttree <> //右树为空
                  :initPlan <> //无初始化Plan
                  :extParam (b)
                  :allParam (b)
                  :scanrelid 4 //扫描第4号RTE
                  }

rigthtree
进入第一个元素的右树

               :righttree 
                  {HASHJOIN //NestLoop右树节点类型是HashJoin(t_grxx join t_jfxx)
                  :startup_cost 16.15 
                  :total_cost 36.12 
                  :plan_rows 7 //涉及的行数
                  :plan_width 180 //平均行大小
                  :parallel_aware false 
                  :parallel_safe true 
                  :plan_node_id 6 //计划节点id
                  :targetlist (...) //投影列,省略
                  :qual <> //表达式
                  :lefttree //左树,暂时折叠
                     {...}
                  :righttree //右树,暂时折叠
                     {...}
                  :initPlan <> //初始化Plan
                  :extParam (b)
                  :allParam (b)
                  :jointype 0 //INNER_JOIN
                  :inner_unique false //非唯一inner join
                  :joinqual <> 
                  :hashclauses (//hash信息,类型为OpExpr
                     {OPEXPR 
                     :opno 98 //pg_operator Oid,"=",texteq
                     :opfuncid 67 //pg_proc Oid,texteq
                     :opresulttype 16 
                     :opretset false 
                     :opcollid 0 //default collation
                     :inputcollid 100 
                     :args (//参数链表
                        {RELABELTYPE//第1个元素 RelabelType
                        :arg 
                           {VAR //VAR类型
                           :varno 65001 //TODO
                           :varattno 1 //第1列
                           :vartype 1043 //字符串,varchar
                           :vartypmod 14 
                           :varcollid 100 
                           :varlevelsup 0 
                           :varnoold 7 //原varno,7号RTE,即t_jfxx
                           :varoattno 1 //原属性no
                           :location 171//SQL语句中的token位置
                           }
                        :resulttype 25 
                        :resulttypmod -1 
                        :resultcollid 100 
                        :relabelformat 2 
                        :location -1
                        }
                        {RELABELTYPE //第1个元素 RelabelType
                        :arg 
                           {VAR //VAR类型
                           :varno 65000 
                           :varattno 1 
                           :vartype 1043 
                           :vartypmod 14 
                           :varcollid 100 
                           :varlevelsup 0 
                           :varnoold 5 //5号RTE,即t_grxx
                           :varoattno 2 //2号属性
                           :location 157
                           }
                        :resulttype 25 
                        :resulttypmod -1 
                        :resultcollid 100 
                        :relabelformat 2 
                        :location -1
                        }
                     )
                     :location -1
                     }
                  )
                  }
               :initPlan <> //无初始化Plan
               :extParam (b)
               :allParam (b)
               :jointype 0 //INNER_JOIN
               :inner_unique false 
               :joinqual <> 
               :nestParams <>

下面考察HashJoin的左树和右树,首先看左树
...head(Plan)->righttree(HashJoin)->lefttree

                  :lefttree 
                     {SEQSCAN //顺序扫描
                     :startup_cost 0.00 
                     :total_cost 17.20 
                     :plan_rows 720 
                     :plan_width 84 
                     :parallel_aware false 
                     :parallel_safe true 
                     :plan_node_id 7 //计划id
                     :targetlist (...)
                     :qual <> 
                     :lefttree <> 
                     :righttree <> 
                     :initPlan <> 
                     :extParam (b)
                     :allParam (b)
                     :scanrelid 7//编号为7的RTE即t_jfxx
                     }

再看HashJoin右树
...head(Plan)->righttree(HashJoin)->righttree

                  :righttree 
                     {HASH //Hash操作(创建Hash表)
                     :startup_cost 16.12 
                     :total_cost 16.12 
                     :plan_rows 2 //涉及2行
                     :plan_width 134 
                     :parallel_aware false 
                     :parallel_safe true 
                     :plan_node_id 8 
                     :targetlist (...)
                     :qual <> 
                     :lefttree //左树也是一个Plan
                        {SEQSCAN //左树为顺序扫描
                        :startup_cost 0.00 
                        :total_cost 16.12 
                        :plan_rows 2 
                        :plan_width 134 
                        :parallel_aware false 
                        :parallel_safe true 
                        :plan_node_id 9 
                        :targetlist (...)
                        :qual (
                           {OPEXPR //OpExpr类型
                           :opno 98 
                           :opfuncid 67 
                           :opresulttype 16 
                           :opretset false 
                           :opcollid 0 
                           :inputcollid 100 
                           :args (
                              {RELABELTYPE 
                              :arg 
                                 {VAR 
                                 :varno 5 //5号RTE,即t_grxx
                                 :varattno 1 //第1个列,即dwbh
                                 :vartype 1043 
                                 :vartypmod 14 
                                 :varcollid 100 
                                 :varlevelsup 0 
                                 :varnoold 5 
                                 :varoattno 1 
                                 :location 124
                                 }
                              :resulttype 25 
                              :resulttypmod -1 
                              :resultcollid 100 
                              :relabelformat 2 
                              :location -1
                              }
                              {CONST 
                              :consttype 25 
                              :consttypmod -1 
                              :constcollid 100 
                              :constlen -1 
                              :constbyval false //非参数传递
                              :constisnull false 
                              :location 205 
                              :constvalue 8 [ 32 0 0 0 49 48 48 49 ]//字符串"1001"
                              }
                           )
                           :location -1
                           }
                        )
                        :lefttree <> //子左树的左树为空
                        :righttree <> //子左树的右树为空
                        :initPlan <> 
                        :extParam (b)
                        :allParam (b)
                        :scanrelid 5//扫描的RTE,5号即t_grxx
                        }
                     :righttree <> //右树为空
                     :initPlan <> 
                     :extParam (b)
                     :allParam (b)
                     :skewTable 16397 //HashJoin的表Oid
                     :skewColumn 1 //列序号
                     :skewInherit false 
                     :rows_total 0
                     }

LIMIT->SORT->APPEND->appendplans->head->next

子查询中的第2个NestLoop
参照LIMIT->SORT->APPEND->appendplans->head即可,
条件变为dwbh="1002",其他与链表中的head元素无异,不再累述

三、小结

1、计划树结构:通过日志输出分析计划树结构;
2、重要的数据结构:RTE、Plan等。

四、附录

如何开启跟踪日志?postgresql.conf配置文件设置参数:

log_destination = 'csvlog'
log_directory = 'pg_log' #与postgresql.conf文件在同一级目录
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 2d
log_rotation_size = 100MB
#
debug_print_parse = on  #打印parse树
debug_print_rewritten = on #打印parse rewrite树
debug_print_plan = on #打印plan树
debug_pretty_print = on #以pretty方式显示

感谢你能够认真阅读完这篇文章,希望小编分享的“PostgreSQL中PlannedStmt结构的日志分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL中PlannedStmt结构的日志分析

本文链接: https://lsjlt.com/news/64867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PostgreSQL中PlannedStmt结构的日志分析
    这篇文章主要介绍了PostgreSQL中PlannedStmt结构的日志分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。APPEND-&g...
    99+
    2024-04-02
  • PostgreSQL中PlannedStmt的跟踪分析
    这篇文章主要为大家展示了“PostgreSQL中PlannedStmt的跟踪分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PostgreSQL中Planne...
    99+
    2024-04-02
  • 分析PostgreSQL中的数据结构HTAB
    这篇文章主要讲解了“分析PostgreSQL中的数据结构HTAB”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析PostgreSQL中的数据结构HTAB”...
    99+
    2024-04-02
  • PostgreSQL中WAL文件结构分析
    本篇内容介绍了“PostgreSQL中WAL文件结构分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!WA...
    99+
    2024-04-02
  • PostgreSQL中PGPROC数据结构分析
    本篇内容介绍了“PostgreSQL中PGPROC数据结构分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • PostgreSQL中WAL segment file内部结构分析
    本篇内容介绍了“PostgreSQL中WAL segment file内部结构分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔...
    99+
    2024-04-02
  • 分析PostgreSQL日志相关的配置参数log_XXX
    本篇内容主要讲解“分析PostgreSQL日志相关的配置参数log_XXX”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析PostgreSQL日志相关的配置参...
    99+
    2024-04-02
  • PostgreSQL 的分槽页结构
    在PostgreSQL中,表存储在堆文件中,这些文件采用分槽的页(slotted-page)格式,该结构便于存储变长记录。 尽管这种架构允许向一页中添加或删除元组,基于PostgreSQL的MVCC方式,这...
    99+
    2024-04-02
  • PostgreSQL DBA(3) - 日志分析工具pgbadger简介
    ...
    99+
    2024-04-02
  • mysql日志结构是怎样的
    这篇文章主要讲解了“mysql日志结构是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql日志结构是怎样的”吧! 一...
    99+
    2024-04-02
  • 如何在PostgreSQL中进行故障排除和日志分析
    在PostgreSQL中进行故障排除和日志分析可以通过以下步骤进行: 查看日志文件:PostgreSQL会记录各种信息和错误日志...
    99+
    2024-04-09
    PostgreSQL
  • Linux中日志的示例分析
    这篇文章主要介绍Linux中日志的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!日志的三种类型#内核及系统日志:这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf...
    99+
    2023-06-27
  • PHP中的日志分析工具
    随着应用程序的复杂度逐渐增加,日志分析工具已经成为了每个开发人员的必备工具之一。在PHP应用程序中,记录和分析日志是一项非常重要的任务,尤其是在一个多用户、高并发的应用程序中。在本文中,我们将介绍PHP中的一些日志记录和分析工具,以帮助开发...
    99+
    2023-05-25
    PHP编程 PHP日志分析 日志工具
  • mysqlsla中怎么分析mysql日志
    这期内容当中小编将会给大家带来有关mysqlsla中怎么分析mysql日志,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysqlsla的安装 wget http:/...
    99+
    2024-04-02
  • Bash 中如何分析 ASP 日志?
    ASP(Active Server Pages)是一种动态网页技术,常用于构建基于 Microsoft Windows 操作系统的 Web 应用程序。在 ASP 应用程序中,日志是一种非常重要的信息来源,可以帮助开发人员和运维人员了解应用...
    99+
    2023-11-06
    日志 windows bash
  • mysqldumpslow日志分析的案例
    小编给大家分享一下mysqldumpslow日志分析的案例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、mysqldumpslow官方文档:http://dev.mysql.com/d...
    99+
    2024-04-02
  • Python 关于日志的分析
    项目情况介绍:基于Python 3.6.6 ,实现对nginx访问的日志分析代码,实现了对日志中code的占比统计和浏览器类型和访问情况统计实现的代码段有:1.编写窗户函数,实现在一定的时间内对数据进行分析2.通过正则表达式对日志进行匹配,...
    99+
    2023-01-31
    日志 Python
  • MySQL的基础架构和日志系统实例分析
    这篇文章主要介绍了MySQL的基础架构和日志系统实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL的基础架构和日志系统实例分析文章都会有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • mysql中日志体系的示例分析
    这篇文章主要介绍了mysql中日志体系的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 一、 mysql...
    99+
    2024-04-02
  • MySQL中日志记录的示例分析
    小编给大家分享一下MySQL中日志记录的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、SQL命令历史~/.mysql_history 记录了...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作