【PostgreSQL内核学习(六)—— 工具使用学习】

工具使用学习

  • 工具使用学习
  • 安装中出现的问题

声明:本文的工具学习内容来自于《小宇带你学pg内核分析》
工具的代码仓库链接为:
https://github.com/shenyuflying/pgNodeGraph
此外,我还参考了以下文章:
https://rng-songbaobao.blog.csdn.net/article/details/104023090
在此非常感谢以上博主所提供的资源!!!

工具使用学习

工具的用途:通过这个工具我们可以十分方便的把日志文件的输出(文字形式)转化为图片。

使用步骤:

  1. 在代码仓库中拉取代码
    在这里插入图片描述
  2. 获取日志文件中的抽象语法树

  要让 PostgreSQL 服务器在日志中打印解析和计划节点树,你可以按照以下步骤进行设置:

  • 打开 PostgreSQL 配置文件 postgresql.conf,可以通过以下命令定位到配置文件的位置:`psql -c “SHOW config_file;”
  • 编辑 postgresql.conf 文件,在文件中找到 logging_collector 配置项,并确保其值为 on,表示启用日志收集器。
  • 找到 log_destination 配置项,并确保其值中包含 csvlog,例如:log_destination = 'stderr,csvlog'
  • 找到 logging_collector 配置项,并确保其值为 on,表示启用日志收集器。
  • 找到 log_statement 配置项,并将其值设置为 all,表示记录所有类型的 SQL 语句。如果你只想记录解析和计划节点树的信息,可以将其设置为 parse
  • 找到 debug_print_parsedebug_print_rewrittendebug_print_plan 配置项,并将它们的值设置为 on,表示启用打印解析和计划节点树的调试输出。
  • 保存配置文件,并重新启动 PostgreSQL 服务器,使配置生效。

  完成上述步骤后,PostgreSQL 服务器将在日志中打印解析和计划节点树的详细信息。你可以通过查看日志文件来获取相应的输出信息。

  1. 进行gdb调试
  • 首先在exec_simple_query函数中打上断点:b exec_simple_query
  • 单步调试进入函数pg_analyze_and_rewrite
  • 单步调试进入函数parse_analyze
  • 单步调试进入函数transformTopLevelStmt
  • 单步调试进入函数transformOptionalSelectInto
  • 使用 bt 查看当前调用堆栈的回溯信息,即显示当前正在执行的函数以及它们的调用关系,如下所示:
    在这里插入图片描述
  • 得到分析树 parseTree
  • 随后在GDB调试中执行如下操作:call elog_node_display(15,”name”,要显示的结果的地址,1);
      这句代码是 PostgreSQL 中的调试输出语句,用于将查询树(parseTree)以更美观的格式打印出来,并输出到日志。该函数是由宏 elog_node_display 来实现的。具体参数的意思如下:
    (1)15:这是日志的日志级别,表示 LOG 级别,即输出为信息性消息。
    (2)name”:这是打印出来的查询树的标题,相当于给打印的内容起一个名称,可以用来区分不同的输出。
    (3)parseTree这是要打印的查询树,通常是 Query 结构体类型的指针。
    (4)1:这是打印的详细程度级别,为 1 表示最详细的打印方式
  1. 在日志文件中查找最新的记录(日志文件路径:postgresql/data/log
    在这里插入图片描述
  2. 将生成的文件在工具文件包的 “node” 文件夹下拷贝一份,文件后缀名为 .node
    在这里插入图片描述
  3. 运行命令:./pgNodeGraph
    在这里插入图片描述
  4. 最后在 pic 文件中可以查看生成的图片文件。
    在这里插入图片描述
    在这里插入图片描述

安装中出现的问题

  在执行命令./pgNodeGraph时出现报错如下:
在这里插入图片描述
原因:似乎是内存问题,通过查找资料了解到是说内存超过2G会出现问题。需要添加编译选项:-mcmodel。
解决办法:修改 pgNodeGraph 中的 gcc命令如下:gcc -mcmodel=medium -g node2dot.c -o node2dot

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

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

相关文章

Mac配置Latex环境教程2023

第一步:安装MacTex 官网:https://www.tug.org/mactex/ 第二步:安装编译器:Texpad xclient官网下载Texpad:https://xclient.info/s/texpad.html 第三步:开始使用 LeTex \documentclass{article}\begin{do…

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时,使用的是spring-cloud微服务构架,mq消息消费模块是单独一个模块,但启动这个模块一直报如下错误: java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错,刚开…

在Debian 12 上安装 PHP 5.6, 7.4

环境:Debian 12 Debian 12 默认的PHP版本为 8.2 如果直接安装php7.4就出现下面的报错: sudo apt-get install libapache2-mod-php7.4 php7.4 php7.4-gd php7.4-opcache php7.4-mbstring php7.4-xml php7.4-json php7.4-zip php7.4-curl php7.4-imap p…

Spring使用注解存储Bean对象

文章目录 一. 配置扫描路径二. 使用注解储存Bean对象1. 使用五大类注解储存Bean2. 为什么要有五大类注解?3.4有关获取Bean参数的命名规则 三. 使用方法注解储存Bean对象1. 方法注解储存对象的用法2. Bean的重命名 在前一篇博客中( Spring项目创建与Bean…

RS485/RS232自由转ETHERNET/IP网关rs485和232接口一样吗

你是否曾经遇到过这样的问题:如何将ETHERNET/IP网络和RS485/RS232总线连接起来呢? 远创智控的YC-EIP-RS485/232通讯网关,自主研发的ETHERNET/IP从站功能,完美解决了这个难题。这款网关不仅可以将ETHERNET/IP网络和RS485/RS232总线…

访客报警定位管理系统:提升安全管理水平的创新解决方案

在当前日益复杂的安全环境下,保障人员安全、提高安全响应能力和管理效率成为了各行各业的首要任务。 作为一种先进的安全管理解决方案,访客报警定位管理系统凭借其独特的优势和广泛的应用场景,正逐渐成为各行业安全管理的重要工具。 那么&a…

「深度学习之优化算法」(十七)灰狼算法

1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…

数学建模-时间序列分析 实例

实例1销量数据预测和实例2人口数据预测实例3上证指数预测和实例4gdp增长率预测 数据-定义时间 不加置信区间清晰点 例二 实例3

性能测试-Jmeter之Linux下压力测试

我们在做测试的时候,有时候要运行很久,公司用的测试服务器一般都是linux,就可以运行在linux下面,linux下面不能像windows一样有图形化界面,那怎么运行脚本呢,就先在windows上把脚本做好,然后在l…

云计算和云架构是什么 有什么用途?

云计算是一种基于互联网的计算方式,它通过网络将计算资源(如计算能力、存储、网络带宽等)以服务的形式提供给用户,并允许用户根据需求进行灵活的资源调配和管理。云计算通常分为三个层次,即基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服…

Spring学习记录----十二、Spring IoC注解式开发

目录 十二、Spring IoC注解式开发 12.1 回顾注解 注解怎么定义,注解中的属性怎么定义? 注解怎么使用? 1--通过反射机制怎么读取注解? 代码 运行结果 2--通过反射机制怎么读取注解? 代码 运行结果 12.2 声明…

时序数据库 TDengine 与金山云两大产品完成兼容互认证

万物互联时代,企业数字化转型和政企上云如火如荼。在云计算迎来重大发展机遇的同时,数据库在企业数字化转型中也扮演着重要的角色——随着业务量的激增,数据库的弹性扩容、容灾备份等需求逐渐显现,在此挑战下,时序数据…

哈希:探索快速的数据存储和搜索方法

哈希:探索快速的数据存储和搜索方法 哈希表作为一种高效的数据存储结构,可以使数据的存储位置与关键码之间建立一一映射的关系,从而加快元素的搜索速度。然而,哈希方法也面临着哈希冲突的问题,即不同的关键字通过相同…

MyBatis操作数据库

1.MyBatis是什么? MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO&#xf…

力扣 -- 918. 环形子数组的最大和

一、题目: 题目链接:918. 环形子数组的最大和 - 力扣(LeetCode) 二、解题步骤: 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码&#xff1…

Sevlet规范:HttpServlet类 和 HttpServletRequest接口 源码解析

1. HTTP协议解读 什么是协议? 协议实际上是某些人,或者某些组织提前制定好的一套规范,大家都按照这个规范来,这样可以做到沟通无障碍。协议就是一套规范,就是一套标准。由其他人或其他组织来负责制定的。我说的话你能…

辅助驾驶功能开发-功能规范篇(23)-2-Mobileye NOP功能规范

5.2 状态机要求 5.2.1 NOP/HWP 状态机 NOP/HWP状态机如下所示: 下表总结了这些状态: 状态描述Passive不满足功能条件,功能无法控制车辆执行器。Standby满足功能条件。该功能不是由驾驶员激活的。功能不控制车辆执行器。Active - Main功能由…

Mac 四大常用清理软件推荐,软件特色下载教程横向评测

Mac 一般来说基本是不会中毒的,而且像 现在的 windows 也是很少中毒,但我们可能还是需要一款杀毒清理软件,主要是为了清理垃圾,统一查看并管理软件开机自启、权限信息等,统一卸载清理等功能,另外我们可能还…

商城-学习整理-基础-分布式组件(三)

目录 一、前言二、Spring Cloud&Spring Cloud Alibaba1、Spring Cloud 与Spring Cloud Alibaba简介2、为什么使用Spring Cloud Alibaba3、版本选择4、项目中的依赖 三、Spring Cloud Alibaba-Nacos作为注册中心1、Nacos1)、下载 nacos-server2)、启动…

数据库运维——备份恢复

数据库备份,数据库为school,素材如下 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(…