![PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第1頁](http://file4.renrendoc.com/view/0c7fcc599b3810e22855ce227a70d43d/0c7fcc599b3810e22855ce227a70d43d1.gif)
![PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第2頁](http://file4.renrendoc.com/view/0c7fcc599b3810e22855ce227a70d43d/0c7fcc599b3810e22855ce227a70d43d2.gif)
![PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第3頁](http://file4.renrendoc.com/view/0c7fcc599b3810e22855ce227a70d43d/0c7fcc599b3810e22855ce227a70d43d3.gif)
![PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第4頁](http://file4.renrendoc.com/view/0c7fcc599b3810e22855ce227a70d43d/0c7fcc599b3810e22855ce227a70d43d4.gif)
![PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第5頁](http://file4.renrendoc.com/view/0c7fcc599b3810e22855ce227a70d43d/0c7fcc599b3810e22855ce227a70d43d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解技術(shù)創(chuàng)新,變革未來Portal模塊介紹Portal模塊運(yùn)行流程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)換為特殊的會(huì)被轉(zhuǎn)換為,操 作集合,比selectinto 包含select和創(chuàng)建表操作可優(yōu)化語句:主要包括DML語句,這類語句特點(diǎn)是需要查詢滿足條件的元組 , 然后返回給用戶或者在元組上進(jìn)行某些操作后寫回到磁盤上。由于在執(zhí)行計(jì)劃樹的生成過程中會(huì)根據(jù)查詢優(yōu)化理論進(jìn)行重寫和優(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í)行計(jì)劃樹PlannedStmt數(shù)據(jù)定義語句編譯后輸入到執(zhí)行器的結(jié)構(gòu)為非計(jì)劃樹類型(如T_ViewStmt)SQL語句類型根據(jù)查詢編譯器給出的查詢計(jì)劃樹鏈表來為當(dāng)前查詢選擇五種執(zhí)行策略。在這個(gè)過程中,執(zhí)行策略 選擇器會(huì)使用數(shù)據(jù)結(jié)構(gòu)PortalData來存儲(chǔ)查詢計(jì)劃樹鏈表以及最后選中的執(zhí)行策略等信息,我們通 常也把這個(gè)數(shù)據(jù)結(jié)構(gòu)稱為“Portal”。Const char*sourceTextList*stmtsPortalStrategystrategyPortalStatusstatusTuples
4、toreStateholdStoreQueryDescqueryDesc查詢計(jì)劃樹鏈表Portal執(zhí)行策略查詢描述符,存儲(chǔ)執(zhí)行查 詢需要的所有信息暫存的查詢結(jié)果portal執(zhí)行狀態(tài)原始SQL語句PlannedStmtQuery策略選擇器的工作原理是根據(jù)查詢編譯器給出的查詢計(jì)劃 樹來為當(dāng)前查詢選擇執(zhí)行策略中的一種,如下圖所示:根據(jù)命令類型,原子操作個(gè)數(shù) 以及查詢樹、計(jì)劃樹上的某些 字段(比如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;由查詢編譯輸出的每一個(gè)查詢計(jì)劃樹都包含一個(gè)類 型為CmdType的字段,用于標(biāo)識該原子操作對應(yīng)的 命令類型。命令類型分為六類:C
6、MD_UNKNOW 表示沒有定義CMD_SELECT表示查詢操作CMD_UPDATE表示更新操作 CMD_INSERT表示插入操作 CMD_DELETE表示刪除操作 CMD_UTILITY表示功能性操作(數(shù)據(jù)定義語句) CMD_NOTHING用于由查詢編譯器新生成的操作Portal執(zhí)行過程對portal進(jìn) 行初始化執(zhí)行portal 中的查詢釋放Portal運(yùn) 行中占用的 資源,從 PortalHashTable中刪除 portalPortal執(zhí)行策略PORTAL_ONE_SELECT:處理用戶提交的SQL語句僅包含一個(gè)SELECT類型查詢的情況。該策略 調(diào)用Executor模塊進(jìn)行處理,最后返
7、回查詢結(jié)果 如:SELECT * FROM s;stmts鏈表中只有一個(gè)PlannedStmt類型或是Query類型的節(jié)點(diǎn)。節(jié)點(diǎn)是CMD_SELECT類型的操作。節(jié)點(diǎn)的utilityStmt字段和intoClause字段為空。處理流程如下:初始化過程:直接調(diào)用ExecutorStart進(jìn)行執(zhí)行計(jì)劃的初始化過程 ,接著設(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鏈表中只有一個(gè)包含RETURNING字句(returningList不為空)的原子操作。PORTAL_UTIL_SELECT:處理一些需要返回結(jié)果的數(shù)據(jù)定義語句(FETCH、EXECUTE、EXPLAIN和SHOW)。如:EXPLAIN INSERT INTO sc VALUES(1,1) ;在第一次執(zhí)行時(shí),運(yùn)行Portal來完成并將主查詢的結(jié)果轉(zhuǎn)儲(chǔ)到Portal的tuplestore中; 然后根據(jù)需要將結(jié)果返回給客戶端。滿足條件:1.stmts鏈表
9、僅有一個(gè)Query類型的節(jié)點(diǎn)。2.節(jié)點(diǎn)是CMD_UTILITY類型操作。3.節(jié)點(diǎn)的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ù)修改語句的目標(biāo)表,它形成了剩余查詢可以引用的臨時(shí)表。WITH person_Sun ASselect * from T_Person where FName=Sunselect * from T_Personwhere FAge=person_Sun .FAge OR FSalary=person_Sun .FSalaryWith子查詢,也稱為公共表表達(dá)式,目的是通過查詢語句定義一 個(gè) 臨時(shí)集合,避免語句中多層嵌套查詢的情況。WITH中的數(shù)據(jù)修改語句通常具有RETURNING子句,而RETURNING子句
11、的輸出,不是數(shù)據(jù)修改語句的目標(biāo)表,它形成了剩余查詢可以引用的臨時(shí)表。對于帶有INSERT/UPDATE/DELETE的WITH子句,會(huì)在公共表表達(dá)式中修改數(shù)據(jù)。我們 需要進(jìn)行特事特辦,特殊處理形成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包含一個(gè)SELECT查詢,同時(shí)存在修改數(shù)據(jù)的公共表表達(dá)式。以上三種策略執(zhí)行流程如下:初始化過程:選擇執(zhí)行策略,并對返回元組類型描述進(jìn)行初始化 執(zhí)行過程:用FillPortalStore創(chuàng)建緩存,根據(jù)策略調(diào)用PortalRunMulti或 PortalRunUtility,把執(zhí)行結(jié)果存放在緩存中,然后用PortalRunSelect調(diào)用 RunFromStore從緩存中獲取元組返回給用戶 清理過程:執(zhí)行完成后對 占用資源進(jìn)行釋放Portal執(zhí)行策略執(zhí)行查詢 創(chuàng)建緩存存儲(chǔ) 用于返回給用 戶的處理結(jié)果將結(jié)果返回 給用戶Portal執(zhí)行過程PORTAL
13、_MULTI_QUERY:處理以上幾種策略以外的所有情況,一個(gè)或多個(gè)原子操作, 并根據(jù)操作類型選擇合適的處理部件。前面幾種策略的混合,可以處理多個(gè)原子操作。執(zhí)行流程如下:初始化過程:不進(jìn)行任何處理,因?yàn)镻ORTAL_MULTI_QUERY策 略往往包含多個(gè)查詢計(jì)劃樹 執(zhí)行過程:調(diào)用 ProtalRunMulti根據(jù)執(zhí)行計(jì)劃的類型選擇Executor或ProcessUtility模塊清理過程:執(zhí)行完成后釋放占用資源Portal執(zhí)行策略PORTAL_MULTI_QUERY:處理以上幾種策略以外的所有情況,一個(gè)或多個(gè)原子操作,并根據(jù) 操作類型選擇合適的處理部件。執(zhí)行流程如下:初始化過程:不進(jìn)行任何處理,因?yàn)镻ORTAL_MULTI_QUERY策略往往 包含多個(gè)查詢計(jì)劃樹執(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代辦公環(huán)境下的智能配送技術(shù)應(yīng)用實(shí)例
- 2024秋七年級數(shù)學(xué)上冊 第4章 一元一次方程4.2 解一元一次方程 3用合并同類項(xiàng)法解方程說課稿(新版)蘇科版001
- Unit 4 History And Traditions Reading for Writing 說課稿-2023-2024學(xué)年高中英語人教版(2019)必修第二冊
- Unit 4 Friends Forever Understanding ideas click for a friend 說課稿-2024-2025學(xué)年高中英語外研版必修第一冊
- 2024年五年級英語下冊 Unit 2 How do you come to school第1課時(shí)說課稿 譯林牛津版
- 6 魯濱遜漂流記(節(jié)選)(說課稿)-2023-2024學(xué)年語文六年級下冊統(tǒng)編版
- 16《夏天里的成長》(說課稿)2024-2025學(xué)年部編版語文六年級上冊001
- Unit 2 Wildlife Protection Reading and Thinking Language Focus 說課稿-2024-2025學(xué)年高一上學(xué)期英語人教版(2019)必修第二冊001
- 2023-2024學(xué)年粵教版(2019)高中信息技術(shù)必修一《數(shù)據(jù)與計(jì)算》第五章第二節(jié)《數(shù)據(jù)的采集》說課稿001
- 2025廣告發(fā)布代理合同
- 蛋糕店服務(wù)員勞動(dòng)合同
- 土地買賣合同參考模板
- 2025高考數(shù)學(xué)二輪復(fù)習(xí)-專題一-微專題10-同構(gòu)函數(shù)問題-專項(xiàng)訓(xùn)練【含答案】
- 四川省綿陽市2025屆高三第二次診斷性考試英語試題(含答案無聽力原文及音頻)
- 2025年天津市政建設(shè)集團(tuán)招聘筆試參考題庫含答案解析
- 公司安全事故隱患內(nèi)部舉報(bào)、報(bào)告獎(jiǎng)勵(lì)制度
- 人教版高中物理必修二同步練習(xí)及答案
- 企業(yè)更名通知函
- 經(jīng)大量臨床實(shí)驗(yàn)證明,空氣負(fù)離子能有效治療心腦血管疾病
- GB/T 12618-1990開口型扁圓頭抽芯鉚釘
- GA/T 458-2021居民身份證質(zhì)量要求
評論
0/150
提交評論