上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

PostgreSQL内核分析之详析Portal策略选择机制 -企业应用专场 + 内核专场(20页).pdf

编号:87334 PDF 20页 1.48MB 下载积分:VIP专享
下载报告请您先登录!

PostgreSQL内核分析之详析Portal策略选择机制 -企业应用专场 + 内核专场(20页).pdf

1、 PostgreSQL内核分析 之详析Portal策略选择机制 报告人 吴煜 武汉大学珞珈图腾实验室Portal模块介绍Portal模块运行流程Portal模块策略划分原则分析查询执行器框架Portal策略选择模块根据sql语句类型选择不同执行模块Portal策略选择模块ProcessUtility数据定义语句执行模块Executor可优化语句(DML)执行模块特定功能子模块 Portal模块 也称为策略选择模块,根据也称为策略选择模块,根据sql语句类型选择不同执行模块语句类型选择不同执行模块 (ProcessUtility和和Executor模块模块)该部分完成了对于查询编译器输出数据的解

2、析,选择预先设定好的执行流程。该部分完成了对于查询编译器输出数据的解析,选择预先设定好的执行流程。Sql语句的分类:可优化语句可优化语句 数据定义语句数据定义语句一般可优化语句被转换为一般可优化语句被转换为非可优化语句被转换为非可优化语句被转换为特殊的会被转换为,操作集合,比selectinto包含select和创建表操作可优化语句:主要包括主要包括DMLDML语句,这类语句特点是需要查询满足条件的元组,语句,这类语句特点是需要查询满足条件的元组,然后返回给用户或者在元组上进行某些操作后写回到磁盘上。然后返回给用户或者在元组上进行某些操作后写回到磁盘上。由于在执行计划树的生成过程中会根据查询优

3、化理论进行重写和优化,以加快查询速度,因此,这类语句被称为可优化语句。DML:insert/update/delete/select语句语句数据定义语句:主要是功能性语句,这类语句包含查询数据元组以外的各种操作主要是功能性语句,这类语句包含查询数据元组以外的各种操作DDL:Create table、Drop table、Alter table等等DCL:Grant语句语句、Revoke语句等语句等两者编译后输入到执行器的结构不同:可优化语句编译后输入到执行器的结构为执行计划树可优化语句编译后输入到执行器的结构为执行计划树PlannedStmt数据定义语句编译后输入到执行器的结构为非计划树类型(

4、如数据定义语句编译后输入到执行器的结构为非计划树类型(如T_ViewStmt)SQL语句类型根据查询编译器给出的查询计划树链表来为当前查询选择五种执行策略。在这个过程中,执行策略选择器会使用数据结构PortalData来存储查询计划树链表以及最后选中的执行策略等信息,我们通常也把这个数据结构称为“Portal”。Const char*sourceTextList*stmtsPortalStrategystrategyPortalStatus statusTuplestoreStateholdStoreQueryDescqueryDesc查询计划树链表Portal执行策略查询描述符,存储执行查询

5、需要的所有信息暂存的查询结果portal执行状态原始SQL语句PlannedStmtQuery 策略选择器的工作原理是根据查询编译器给出的查询计策略选择器的工作原理是根据查询编译器给出的查询计划树来为当前查询选择执行策略中的一种,如下图所示:划树来为当前查询选择执行策略中的一种,如下图所示:根据命令类型,原子操作个数根据命令类型,原子操作个数以及查询树、计划树上的某些以及查询树、计划树上的某些字段字段(比如比如hasModifyingCTE、utilityStmt等等等等)来选择策略来选择策略两种原子操作PlannedStmt和Query命令类型的数据结构typedef enum CmdTyp

6、eCMD_UNKNOWN,CMD_SELECT,/*select stmt*/CMD_UPDATE,/*update stmt*/CMD_INSERT,/*insert stmt*/CMD_DELETE,CMD_UTILITY,/*cmds like create,destroy,copy,vacuum,*etc.*/CMD_NOTHING/*dummy command for instead nothing rules*with qual*/CmdType;由查询编译输出的每一个查询计划树都包含一个类型为CmdType的字段,用于标识该原子操作对应的命令类型。命令类型分为六类:CMD_UNK

7、NOW 表示没有定义CMD_SELECT表示查询操作CMD_UPDATE表示更新操作CMD_INSERT表示插入操作CMD_DELETE表示删除操作CMD_UTILITY表示功能性操作(数据定义语句)CMD_NOTHING用于由查询编译器新生成的操作 Portal执行过程对portal进行初始化执行portal中的查询释放Portal运行中占用的资源,从PortalHashTable中删除portalPortal执行策略PORTAL_ONE_SELECT:处理用户提交的处理用户提交的SQL语句仅包含一个语句仅包含一个SELECT类型查询的情况。该策略调类型查询的情况。该策略调用用Executo

8、r模块进行处理,最后返回查询结果模块进行处理,最后返回查询结果如:如:SELECT*FROM s;stmts链表中只有一个PlannedStmt类型或是Query类型的节点。节点是CMD_SELECT类型的操作。节点的utilityStmt字段和intoClause字段为空。处理流程如下:初始化过程:直接调用初始化过程:直接调用ExecutorStart进行执行计划的初始化过程,进行执行计划的初始化过程,接着设置接着设置portal返回元组的属性描述信息返回元组的属性描述信息执行过程:使用执行过程:使用PortalRunSelect直接调用直接调用ExecutorRun获取查询结果获取查询结果

9、清理过程:最后在执行完毕后释放所占用的资源清理过程:最后在执行完毕后释放所占用的资源将结果返回给用户Portal执行过程PORTAL_ONE_RETURNING:处理带有处理带有RETURNING子句的子句的INSERT/UPDATE/DELETE语句。语句。如:如:INSERT INTO sc VALUES(1,1)RETURNING*;满足条件:满足条件:stmts链表中只有一个包含RETURNING字句(returningList不为空)的原子操作。PORTAL_UTIL_SELECT:处理一些需要返回结果的数据定义语句处理一些需要返回结果的数据定义语句(FETCH、EXECUTE、EX

10、PLAIN和和SHOW)。)。如:如:EXPLAIN INSERT INTO sc VALUES(1,1);在第一次执行时,运行在第一次执行时,运行Portal来完成并将主查询的结果转储到来完成并将主查询的结果转储到Portal的的tuplestore中中;然后根据需要将结果返回给客户端。然后根据需要将结果返回给客户端。满足条件:满足条件:1.stmts链表仅有一个Query类型的节点。2.节点是CMD_UTILITY类型操作。3.节点的utilityStmt字段保存的是FETCH语句(类型为T_FetchStmt)、EXECUTE语句(类型为T_ExecuteStmt)、EXPLAIN语句(

11、类型为T_ExplainStmt)或是SHOW语句(类型为T_VariableShowStmt)之一。Portal执行策略 select*from T_Person where FAge=(select FAge from T_Person where FName=Sun)OR FSalary=(select FSalary from T_Person where FName=Sun)使用With子句后RETURNING子句的输出,不是数据修改语句的目标表,它形成了剩余查询可以引用的临时表。WITH person_Sun AS select*from T_Person where FName=

12、Sun select *from T_Person where FAge=person_Sun.FAge OR FSalary=person_Sun.FSalary With子查询,也称为公共表表达式,目的是通过查询语句定义一子查询,也称为公共表表达式,目的是通过查询语句定义一个个 临时集合,避免语句中多层嵌套查询的情况。临时集合,避免语句中多层嵌套查询的情况。对于带有INSERT/UPDATE/DELETE的WITH子句,会在公共表表达式中修改数据。我们需要进行特事特办,特殊处理形成PORTAL_ONE_MOD_WITH策略WITH中的数据修改语句通常具有RETURNING子句,而RETUR

13、NING子句的输出,不是数据修改语句的目标表,它形成了剩余查询可以引用的临时表。PORTAL_ONE_MOD_WITH:处理包含处理包含WITH子句查询,其中包含修改数据的操作。子句查询,其中包含修改数据的操作。如:如:WITH moved_rows AS(DELETE FROM products WHERE date=2010-10-01 AND date 2010-11-01 RETURNING*)INSERT INTO products_logSELECT*FROM moved_rows;满足条件:满足条件:Portal包含一个SELECT查询,同时存在修改数据的公共表表达式。以上三种策

14、略执行流程如下:初始化过程:选择执行策略,并对返回元组类型描述进行初始化初始化过程:选择执行策略,并对返回元组类型描述进行初始化执行过程:用执行过程:用FillPortalStore创建缓存,根据策略调用创建缓存,根据策略调用PortalRunMulti或PortalRunUtility,把执行结果存放在缓存中,然后用,把执行结果存放在缓存中,然后用PortalRunSelect调用调用RunFromStore从缓存中获取元组返回给用户从缓存中获取元组返回给用户清理过程:执行完成后对占用资源进行释放清理过程:执行完成后对占用资源进行释放Portal执行策略执行查询创建缓存存储用于返回给用户的处

15、理结果将结果返回给用户Portal执行过程PORTAL_MULTI_QUERY:处理以上几种策略以外的所有情况,处理以上几种策略以外的所有情况,一个或多个原子操作,并一个或多个原子操作,并根据操作类型选择合适的处理部件。根据操作类型选择合适的处理部件。前面几种策略的混合,可以处理多个原子操作。前面几种策略的混合,可以处理多个原子操作。执行流程如下:初始化过程:不进行任何处理,因为初始化过程:不进行任何处理,因为PORTAL_MULTI_QUERY策略策略往往包含多个查询计划树往往包含多个查询计划树执行过程:调用执行过程:调用ProtalRunMulti根据执行计划的类型选择根据执行计划的类型选

16、择Executor或或ProcessUtility模块模块清理过程:执行完成后释放占用资源清理过程:执行完成后释放占用资源Portal执行策略PORTAL_MULTI_QUERY:处理以上几种策略以外的所有情况,处理以上几种策略以外的所有情况,一个或多个原子操作,并根据操一个或多个原子操作,并根据操作类型选择合适的处理部件。作类型选择合适的处理部件。执行流程如下:初始化过程:不进行任何处理,因为初始化过程:不进行任何处理,因为PORTAL_MULTI_QUERY策略往往包策略往往包含多个查询计划树含多个查询计划树执行过程:调用执行过程:调用ProtalRunMulti根据执行计划的类型选择根据执行计划的类型选择Executor或或ProcessUtility模块模块清理过程:执行完成后释放占用资源清理过程:执行完成后释放占用资源对Executor模块的调用对ProcessUtility模块的调用Portal执行过程Portal执行策略选择的流程通过以上两种原子操作选择适当的Portal执行策略节点的utilityStmt字段保存的是FETCH(类型为T_FetchStmt),EXECUTE,EXPLAIN或者是SHOW语句之一。

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(PostgreSQL内核分析之详析Portal策略选择机制 -企业应用专场 + 内核专场(20页).pdf)为本站 (云闲) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部