版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、PostgreSQL內(nèi)核-Portal策略選擇機制詳解技術(shù)創(chuàng)新,變革未來Portal模塊介紹Portal模塊運行流程Portal模塊策略劃分原則分析查詢執(zhí)行器框架Portal策略選擇模塊根據(jù)sql語句類型選擇 不同執(zhí)行模塊Portal策略選擇模塊ProcessUtility數(shù)據(jù)定 義語句執(zhí)行模塊Executor可優(yōu)化語句 (DML)執(zhí)行模塊特定功能子 模塊Portal模塊也稱為策略選擇模塊,根據(jù)sql語句類型選擇不同執(zhí)行模塊 (ProcessUtility和Executor模塊)該部分完成了對于查詢編譯器輸出數(shù)據(jù)的解析,選擇預(yù)先設(shè)定好的執(zhí)行流程。Sql語句的分類: 可優(yōu)化語句 數(shù)據(jù)定義語 句一
2、般可優(yōu)化語句被轉(zhuǎn)換為 非可優(yōu)化語句被轉(zhuǎn)換為特殊的會被轉(zhuǎn)換為,操 作集合,比selectinto 包含select和創(chuàng)建表操作可優(yōu)化語句:主要包括DML語句,這類語句特點是需要查詢滿足條件的元組 , 然后返回給用戶或者在元組上進行某些操作后寫回到磁盤上。由于在執(zhí)行計劃樹的生成過程中會根據(jù)查詢優(yōu)化理論進行重寫和優(yōu)化,以 加快查詢速度,因此,這類語句被稱為可優(yōu)化語句。DML:insert/update/delete/select語句數(shù)據(jù)定義語句:主要是功能性語句,這類語句包含查詢數(shù)據(jù)元組以外的各種 操作 DDL:Create table、Drop table、Alter table等 DCL:Gra
3、nt語句、Revoke語句等兩者編譯后輸入到執(zhí)行器的結(jié)構(gòu)不同:可優(yōu)化語句編譯后輸入到執(zhí)行器的結(jié)構(gòu)為執(zhí)行計劃樹PlannedStmt數(shù)據(jù)定義語句編譯后輸入到執(zhí)行器的結(jié)構(gòu)為非計劃樹類型(如T_ViewStmt)SQL語句類型根據(jù)查詢編譯器給出的查詢計劃樹鏈表來為當前查詢選擇五種執(zhí)行策略。在這個過程中,執(zhí)行策略 選擇器會使用數(shù)據(jù)結(jié)構(gòu)PortalData來存儲查詢計劃樹鏈表以及最后選中的執(zhí)行策略等信息,我們通 常也把這個數(shù)據(jù)結(jié)構(gòu)稱為“Portal”。Const char*sourceTextList*stmtsPortalStrategystrategyPortalStatusstatusTuples
4、toreStateholdStoreQueryDescqueryDesc查詢計劃樹鏈表Portal執(zhí)行策略查詢描述符,存儲執(zhí)行查 詢需要的所有信息暫存的查詢結(jié)果portal執(zhí)行狀態(tài)原始SQL語句PlannedStmtQuery策略選擇器的工作原理是根據(jù)查詢編譯器給出的查詢計劃 樹來為當前查詢選擇執(zhí)行策略中的一種,如下圖所示:根據(jù)命令類型,原子操作個數(shù) 以及查詢樹、計劃樹上的某些 字段(比如hasModifyingCTE、 utilityStmt等等)來選擇策略兩種原子操作PlannedStmt和Query命令類型的數(shù)據(jù)結(jié)構(gòu)typedef enum CmdTypeCMD_UNKNOWN,CMD_
5、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的字段,用于標識該原子操作對應(yīng)的 命令類型。命令類型分為六類:C
6、MD_UNKNOW 表示沒有定義CMD_SELECT表示查詢操作CMD_UPDATE表示更新操作 CMD_INSERT表示插入操作 CMD_DELETE表示刪除操作 CMD_UTILITY表示功能性操作(數(shù)據(jù)定義語句) CMD_NOTHING用于由查詢編譯器新生成的操作Portal執(zhí)行過程對portal進 行初始化執(zhí)行portal 中的查詢釋放Portal運 行中占用的 資源,從 PortalHashTable中刪除 portalPortal執(zhí)行策略PORTAL_ONE_SELECT:處理用戶提交的SQL語句僅包含一個SELECT類型查詢的情況。該策略 調(diào)用Executor模塊進行處理,最后返
7、回查詢結(jié)果 如:SELECT * FROM s;stmts鏈表中只有一個PlannedStmt類型或是Query類型的節(jié)點。節(jié)點是CMD_SELECT類型的操作。節(jié)點的utilityStmt字段和intoClause字段為空。處理流程如下:初始化過程:直接調(diào)用ExecutorStart進行執(zhí)行計劃的初始化過程 ,接著設(shè)置portal返回元組的屬性描述信息執(zhí)行過程:使用PortalRunSelect直接調(diào)用ExecutorRun獲取查詢結(jié)果清理過程:最后在執(zhí)行完畢后釋放所占用的資源將結(jié)果返回 給用戶Portal執(zhí)行過程PORTAL_ONE_RETURNING:處理帶有RETURNING子句的IN
8、SERT/UPDATE/DELETE語句。如: INSERT INTO sc VALUES(1,1) RETURNING *;滿足條件:stmts鏈表中只有一個包含RETURNING字句(returningList不為空)的原子操作。PORTAL_UTIL_SELECT:處理一些需要返回結(jié)果的數(shù)據(jù)定義語句(FETCH、EXECUTE、EXPLAIN和SHOW)。如:EXPLAIN INSERT INTO sc VALUES(1,1) ;在第一次執(zhí)行時,運行Portal來完成并將主查詢的結(jié)果轉(zhuǎn)儲到Portal的tuplestore中; 然后根據(jù)需要將結(jié)果返回給客戶端。滿足條件:1.stmts鏈表
9、僅有一個Query類型的節(jié)點。2.節(jié)點是CMD_UTILITY類型操作。3.節(jié)點的utilityStmt字段保存的是FETCH語句(類型為T_FetchStmt)、EXECUTE語句(類 型為T_ExecuteStmt)、EXPLAIN語句(類型為T_ExplainStmt)或是SHOW語句(類型為 T_VariableShowStmt)之一。Portal執(zhí)行策略select * from T_Personwhere FAge=(select FAge from T_Person where FName=Sun) OR FSalary=(select FSalary from T_Person
10、 where FName=Sun)使用With子句后RETURNING子句的輸出,不是數(shù)據(jù)修改語句的目標表,它形成了剩余查詢可以引用的臨時表。WITH person_Sun ASselect * from T_Person where FName=Sunselect * from T_Personwhere FAge=person_Sun .FAge OR FSalary=person_Sun .FSalaryWith子查詢,也稱為公共表表達式,目的是通過查詢語句定義一 個 臨時集合,避免語句中多層嵌套查詢的情況。WITH中的數(shù)據(jù)修改語句通常具有RETURNING子句,而RETURNING子句
11、的輸出,不是數(shù)據(jù)修改語句的目標表,它形成了剩余查詢可以引用的臨時表。對于帶有INSERT/UPDATE/DELETE的WITH子句,會在公共表表達式中修改數(shù)據(jù)。我們 需要進行特事特辦,特殊處理形成PORTAL_ONE_MOD_WITH策略PORTAL_ONE_MOD_WITH:處理包含WITH子句查詢,其中包含修改數(shù)據(jù)的操作。如:WITH moved_rows AS ( DELETE FROM products WHEREdate = 2010-10-01 AND date 2010-11-01 RETURNING *)INSERT INTO products_log SELECT * FRO
12、M moved_rows; 滿足條件:Portal包含一個SELECT查詢,同時存在修改數(shù)據(jù)的公共表表達式。以上三種策略執(zhí)行流程如下:初始化過程:選擇執(zhí)行策略,并對返回元組類型描述進行初始化 執(zhí)行過程:用FillPortalStore創(chuàng)建緩存,根據(jù)策略調(diào)用PortalRunMulti或 PortalRunUtility,把執(zhí)行結(jié)果存放在緩存中,然后用PortalRunSelect調(diào)用 RunFromStore從緩存中獲取元組返回給用戶 清理過程:執(zhí)行完成后對 占用資源進行釋放Portal執(zhí)行策略執(zhí)行查詢 創(chuàng)建緩存存儲 用于返回給用 戶的處理結(jié)果將結(jié)果返回 給用戶Portal執(zhí)行過程PORTAL
13、_MULTI_QUERY:處理以上幾種策略以外的所有情況,一個或多個原子操作, 并根據(jù)操作類型選擇合適的處理部件。前面幾種策略的混合,可以處理多個原子操作。執(zhí)行流程如下:初始化過程:不進行任何處理,因為PORTAL_MULTI_QUERY策 略往往包含多個查詢計劃樹 執(zhí)行過程:調(diào)用 ProtalRunMulti根據(jù)執(zhí)行計劃的類型選擇Executor或ProcessUtility模塊清理過程:執(zhí)行完成后釋放占用資源Portal執(zhí)行策略PORTAL_MULTI_QUERY:處理以上幾種策略以外的所有情況,一個或多個原子操作,并根據(jù) 操作類型選擇合適的處理部件。執(zhí)行流程如下:初始化過程:不進行任何處理,因為PORTAL_MULTI_QUERY策略往往 包含多個查詢計劃樹執(zhí)行過程:調(diào)用ProtalRunMulti根據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙教版九年級地理下冊階段測試試卷
- 2025年粵教新版九年級歷史上冊月考試卷含答案
- 2025年中圖版選擇性必修3歷史上冊月考試卷含答案
- 2025年滬教版八年級歷史下冊階段測試試卷含答案
- 2025年人教新起點高一語文上冊月考試卷
- 遵義醫(yī)藥高等??茖W(xué)?!冬F(xiàn)代漢語語法研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度出租車行業(yè)駕駛員安全責任合同范本4篇
- 二零二五年度出租車公司車輛調(diào)度合同3篇
- 房屋贈與合同范本(2篇)
- 2025年度農(nóng)機保險代理銷售合同范本4篇
- 蛋糕店服務(wù)員勞動合同
- 土地買賣合同參考模板
- 2025高考數(shù)學(xué)二輪復(fù)習-專題一-微專題10-同構(gòu)函數(shù)問題-專項訓(xùn)練【含答案】
- 新能源行業(yè)市場分析報告
- 2025年天津市政建設(shè)集團招聘筆試參考題庫含答案解析
- 巖土工程勘察.課件
- 60歲以上務(wù)工免責協(xié)議書
- 滋補類用藥的培訓(xùn)
- 北師大版高三數(shù)學(xué)選修4-6初等數(shù)論初步全冊課件【完整版】
- 高職《勞動教育》指導(dǎo)綱要
- XX公司年會活動報價單
評論
0/150
提交評論