postgres后端处理流程

我们都知道pg在启动后会有一个管理后端的常驻进程,被称为"Postmaster",默认会监听5432端口,等待连接请求,前端可以通过libpq或者JDBC来与后端进行通信,每个客户端的连接请求进来的时候,Postmaster都会fork出如下一个postgres工作进程,也就是真正的后端处理进程,来与客户端进行直接交互。
 
 
下面介绍下postgres后端处理的整个流程:
1. 客户端发送过来查询请求(文本的sql语句)给postgres工作进程;
2. 计算机是没办法直接识别sql文本的,所以需要将sql文本根据scan.l和gram.y中预先定义的sql词法规则(Lexcial Rules)以及语法规则(Grammatic Rules)生成数据库查询引擎系统内部的查询语法树形式(AST),此阶段处理的入口函数为raw_parser(parser/parser.c)
3. 查询引擎会将2中得到的语法树进行预处理转换成查询引擎可处理的形式----查询树(Query Tree),这个阶段会将查询语句中的某些部分进行转换,例如“*”会被转换成对应表的所有列,会访问数据库,检查表是否存在,若存在,将表名字转成oid等等。这个阶段被称作分析处理,分析处理模块是analyzer,分析处理模块的入口是在parse_analyze ,主要由do_parse_analyze完成(parser/analyze.c)
4. 查询引擎使用pg_rewrite中所设定的规则进行所谓的基于规则的转换,重写模块的入口在QueryRewrite (rewrite/rewriteHandler.c)
5. 查询引擎进行查询优化,查询优化主要分为两步,生成路径(optimizer/path)和生成计划(optimizer/plan),此模块的入口在standard_planner (optimizer/plan/planner.c)
6. 将生成的最优执行计划发送给executor执行已达到查询的目的,这个模块被称作executor,执行器的入口为ExecutorRun (executor/execMain.c)
7. 将查询得到的结果返回给客户端
 
 

转载于:https://www.cnblogs.com/LyndonYoung/articles/11107887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值