PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第1頁(yè)
PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第2頁(yè)
PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第3頁(yè)
PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第4頁(yè)
PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PostgreSQL內(nèi)核-Portal策略選擇機(jī)制詳解技術(shù)創(chuàng)新,變革未來(lái)Portal模塊介紹Portal模塊運(yùn)行流程Portal模塊策略劃分原則分析查詢(xún)執(zhí)行器框架Portal策略選擇模塊根據(jù)sql語(yǔ)句類(lèi)型選擇 不同執(zhí)行模塊Portal策略選擇模塊ProcessUtility數(shù)據(jù)定 義語(yǔ)句執(zhí)行模塊Executor可優(yōu)化語(yǔ)句 (DML)執(zhí)行模塊特定功能子 模塊Portal模塊也稱(chēng)為策略選擇模塊,根據(jù)sql語(yǔ)句類(lèi)型選擇不同執(zhí)行模塊 (ProcessUtility和Executor模塊)該部分完成了對(duì)于查詢(xún)編譯器輸出數(shù)據(jù)的解析,選擇預(yù)先設(shè)定好的執(zhí)行流程。Sql語(yǔ)句的分類(lèi): 可優(yōu)化語(yǔ)句 數(shù)據(jù)定義語(yǔ) 句一

2、般可優(yōu)化語(yǔ)句被轉(zhuǎn)換為 非可優(yōu)化語(yǔ)句被轉(zhuǎn)換為特殊的會(huì)被轉(zhuǎn)換為,操 作集合,比selectinto 包含select和創(chuàng)建表操作可優(yōu)化語(yǔ)句:主要包括DML語(yǔ)句,這類(lèi)語(yǔ)句特點(diǎn)是需要查詢(xún)滿(mǎn)足條件的元組 , 然后返回給用戶(hù)或者在元組上進(jìn)行某些操作后寫(xiě)回到磁盤(pán)上。由于在執(zhí)行計(jì)劃樹(shù)的生成過(guò)程中會(huì)根據(jù)查詢(xún)優(yōu)化理論進(jìn)行重寫(xiě)和優(yōu)化,以 加快查詢(xún)速度,因此,這類(lèi)語(yǔ)句被稱(chēng)為可優(yōu)化語(yǔ)句。DML:insert/update/delete/select語(yǔ)句數(shù)據(jù)定義語(yǔ)句:主要是功能性語(yǔ)句,這類(lèi)語(yǔ)句包含查詢(xún)數(shù)據(jù)元組以外的各種 操作 DDL:Create table、Drop table、Alter table等 DCL:Gra

3、nt語(yǔ)句、Revoke語(yǔ)句等兩者編譯后輸入到執(zhí)行器的結(jié)構(gòu)不同:可優(yōu)化語(yǔ)句編譯后輸入到執(zhí)行器的結(jié)構(gòu)為執(zhí)行計(jì)劃樹(shù)PlannedStmt數(shù)據(jù)定義語(yǔ)句編譯后輸入到執(zhí)行器的結(jié)構(gòu)為非計(jì)劃樹(shù)類(lèi)型(如T_ViewStmt)SQL語(yǔ)句類(lèi)型根據(jù)查詢(xún)編譯器給出的查詢(xún)計(jì)劃樹(shù)鏈表來(lái)為當(dāng)前查詢(xún)選擇五種執(zhí)行策略。在這個(gè)過(guò)程中,執(zhí)行策略 選擇器會(huì)使用數(shù)據(jù)結(jié)構(gòu)PortalData來(lái)存儲(chǔ)查詢(xún)計(jì)劃樹(shù)鏈表以及最后選中的執(zhí)行策略等信息,我們通 常也把這個(gè)數(shù)據(jù)結(jié)構(gòu)稱(chēng)為“Portal”。Const char*sourceTextList*stmtsPortalStrategystrategyPortalStatusstatusTuples

4、toreStateholdStoreQueryDescqueryDesc查詢(xún)計(jì)劃樹(shù)鏈表Portal執(zhí)行策略查詢(xún)描述符,存儲(chǔ)執(zhí)行查 詢(xún)需要的所有信息暫存的查詢(xún)結(jié)果portal執(zhí)行狀態(tài)原始SQL語(yǔ)句PlannedStmtQuery策略選擇器的工作原理是根據(jù)查詢(xún)編譯器給出的查詢(xún)計(jì)劃 樹(shù)來(lái)為當(dāng)前查詢(xún)選擇執(zhí)行策略中的一種,如下圖所示:根據(jù)命令類(lèi)型,原子操作個(gè)數(shù) 以及查詢(xún)樹(shù)、計(jì)劃樹(shù)上的某些 字段(比如hasModifyingCTE、 utilityStmt等等)來(lái)選擇策略?xún)煞N原子操作PlannedStmt和Query命令類(lèi)型的數(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;由查詢(xún)編譯輸出的每一個(gè)查詢(xún)計(jì)劃樹(shù)都包含一個(gè)類(lèi) 型為CmdType的字段,用于標(biāo)識(shí)該原子操作對(duì)應(yīng)的 命令類(lèi)型。命令類(lèi)型分為六類(lèi):C

6、MD_UNKNOW 表示沒(méi)有定義CMD_SELECT表示查詢(xún)操作CMD_UPDATE表示更新操作 CMD_INSERT表示插入操作 CMD_DELETE表示刪除操作 CMD_UTILITY表示功能性操作(數(shù)據(jù)定義語(yǔ)句) CMD_NOTHING用于由查詢(xún)編譯器新生成的操作Portal執(zhí)行過(guò)程對(duì)portal進(jìn) 行初始化執(zhí)行portal 中的查詢(xún)釋放Portal運(yùn) 行中占用的 資源,從 PortalHashTable中刪除 portalPortal執(zhí)行策略PORTAL_ONE_SELECT:處理用戶(hù)提交的SQL語(yǔ)句僅包含一個(gè)SELECT類(lèi)型查詢(xún)的情況。該策略 調(diào)用Executor模塊進(jìn)行處理,最后返

7、回查詢(xún)結(jié)果 如:SELECT * FROM s;stmts鏈表中只有一個(gè)PlannedStmt類(lèi)型或是Query類(lèi)型的節(jié)點(diǎn)。節(jié)點(diǎn)是CMD_SELECT類(lèi)型的操作。節(jié)點(diǎn)的utilityStmt字段和intoClause字段為空。處理流程如下:初始化過(guò)程:直接調(diào)用ExecutorStart進(jìn)行執(zhí)行計(jì)劃的初始化過(guò)程 ,接著設(shè)置portal返回元組的屬性描述信息執(zhí)行過(guò)程:使用PortalRunSelect直接調(diào)用ExecutorRun獲取查詢(xún)結(jié)果清理過(guò)程:最后在執(zhí)行完畢后釋放所占用的資源將結(jié)果返回 給用戶(hù)Portal執(zhí)行過(guò)程PORTAL_ONE_RETURNING:處理帶有RETURNING子句的IN

8、SERT/UPDATE/DELETE語(yǔ)句。如: INSERT INTO sc VALUES(1,1) RETURNING *;滿(mǎn)足條件:stmts鏈表中只有一個(gè)包含RETURNING字句(returningList不為空)的原子操作。PORTAL_UTIL_SELECT:處理一些需要返回結(jié)果的數(shù)據(jù)定義語(yǔ)句(FETCH、EXECUTE、EXPLAIN和SHOW)。如:EXPLAIN INSERT INTO sc VALUES(1,1) ;在第一次執(zhí)行時(shí),運(yùn)行Portal來(lái)完成并將主查詢(xún)的結(jié)果轉(zhuǎn)儲(chǔ)到Portal的tuplestore中; 然后根據(jù)需要將結(jié)果返回給客戶(hù)端。滿(mǎn)足條件:1.stmts鏈表

9、僅有一個(gè)Query類(lèi)型的節(jié)點(diǎn)。2.節(jié)點(diǎn)是CMD_UTILITY類(lèi)型操作。3.節(jié)點(diǎn)的utilityStmt字段保存的是FETCH語(yǔ)句(類(lèi)型為T(mén)_FetchStmt)、EXECUTE語(yǔ)句(類(lèi) 型為T(mén)_ExecuteStmt)、EXPLAIN語(yǔ)句(類(lèi)型為T(mén)_ExplainStmt)或是SHOW語(yǔ)句(類(lèi)型為 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ù)修改語(yǔ)句的目標(biāo)表,它形成了剩余查詢(xún)可以引用的臨時(shí)表。WITH person_Sun ASselect * from T_Person where FName=Sunselect * from T_Personwhere FAge=person_Sun .FAge OR FSalary=person_Sun .FSalaryWith子查詢(xún),也稱(chēng)為公共表表達(dá)式,目的是通過(guò)查詢(xún)語(yǔ)句定義一 個(gè) 臨時(shí)集合,避免語(yǔ)句中多層嵌套查詢(xún)的情況。WITH中的數(shù)據(jù)修改語(yǔ)句通常具有RETURNING子句,而RETURNING子句

11、的輸出,不是數(shù)據(jù)修改語(yǔ)句的目標(biāo)表,它形成了剩余查詢(xún)可以引用的臨時(shí)表。對(duì)于帶有INSERT/UPDATE/DELETE的WITH子句,會(huì)在公共表表達(dá)式中修改數(shù)據(jù)。我們 需要進(jìn)行特事特辦,特殊處理形成PORTAL_ONE_MOD_WITH策略PORTAL_ONE_MOD_WITH:處理包含WITH子句查詢(xún),其中包含修改數(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; 滿(mǎn)足條件:Portal包含一個(gè)SELECT查詢(xún),同時(shí)存在修改數(shù)據(jù)的公共表表達(dá)式。以上三種策略執(zhí)行流程如下:初始化過(guò)程:選擇執(zhí)行策略,并對(duì)返回元組類(lèi)型描述進(jìn)行初始化 執(zhí)行過(guò)程:用FillPortalStore創(chuàng)建緩存,根據(jù)策略調(diào)用PortalRunMulti或 PortalRunUtility,把執(zhí)行結(jié)果存放在緩存中,然后用PortalRunSelect調(diào)用 RunFromStore從緩存中獲取元組返回給用戶(hù) 清理過(guò)程:執(zhí)行完成后對(duì) 占用資源進(jìn)行釋放Portal執(zhí)行策略執(zhí)行查詢(xún) 創(chuàng)建緩存存儲(chǔ) 用于返回給用 戶(hù)的處理結(jié)果將結(jié)果返回 給用戶(hù)Portal執(zhí)行過(guò)程PORTAL

13、_MULTI_QUERY:處理以上幾種策略以外的所有情況,一個(gè)或多個(gè)原子操作, 并根據(jù)操作類(lèi)型選擇合適的處理部件。前面幾種策略的混合,可以處理多個(gè)原子操作。執(zhí)行流程如下:初始化過(guò)程:不進(jìn)行任何處理,因?yàn)镻ORTAL_MULTI_QUERY策 略往往包含多個(gè)查詢(xún)計(jì)劃樹(shù) 執(zhí)行過(guò)程:調(diào)用 ProtalRunMulti根據(jù)執(zhí)行計(jì)劃的類(lèi)型選擇Executor或ProcessUtility模塊清理過(guò)程:執(zhí)行完成后釋放占用資源Portal執(zhí)行策略PORTAL_MULTI_QUERY:處理以上幾種策略以外的所有情況,一個(gè)或多個(gè)原子操作,并根據(jù) 操作類(lèi)型選擇合適的處理部件。執(zhí)行流程如下:初始化過(guò)程:不進(jìn)行任何處理,因?yàn)镻ORTAL_MULTI_QUERY策略往往 包含多個(gè)查詢(xún)計(jì)劃樹(shù)執(zhí)行過(guò)程:調(diào)用ProtalRunMulti根據(jù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論