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