国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

openGauss內(nèi)核分析(二):簡單查詢的執(zhí)行

2022-06-09 10:15 作者:Gauss松鼠會  | 我要投稿

上一期酷哥分析了openGauss數(shù)據(jù)庫的啟動過程,包括主線程,輔助線程及業(yè)務處理線程的啟動過程,這一期主要分析簡單查詢語句在業(yè)務處理線程Postgres上的執(zhí)行流程,并介紹如何利用gdb梳理代碼邏輯。

???簡單查詢的執(zhí)行

SQL引擎是數(shù)據(jù)庫系統(tǒng)的入口,執(zhí)行用戶簡單查詢的入口函數(shù)是exec_simple_query。運行在業(yè)務處理線程Postgres。

通??梢园裇QL引擎分成SQL解析和查詢優(yōu)化兩個主要的模塊,SQL引擎對輸入的SQL語言進行詞法分析、語法分析、語義分析,從而生成邏輯執(zhí)行計劃,邏輯執(zhí)行計劃經(jīng)過代數(shù)優(yōu)化和代價優(yōu)化之后,產(chǎn)生物理執(zhí)行計劃。

在SQL引擎將用戶的查詢解析優(yōu)化成可執(zhí)行的計劃之后,數(shù)據(jù)庫進入查詢執(zhí)行階段。執(zhí)行器基于執(zhí)行計劃對相關(guān)數(shù)據(jù)進行提取、運算、更新、刪除等操作,以達到用戶查詢想要實現(xiàn)的目的。


???exec_simple_query



1.start_xact_command():開始一個事務。

2.pg_parse_query():對查詢語句進行詞法和語法分析,生成一個或者多個初始的語法分析樹。

3. 進入foreach (parsetree_item, parsetree_list)循環(huán),對每個語法分析樹執(zhí)行查詢。

4. pg_analyze_and_rewrite():根據(jù)語法分析樹生成基于Query數(shù)據(jù)結(jié)構(gòu)的邏輯查詢樹,并進行重寫等操作。

5. pg_plan_queries():對邏輯查詢樹進行優(yōu)化,生成查詢計劃。

6. CreatePortal():創(chuàng)建Portal, Portal是執(zhí)行SQL語句的載體,每一條SQL對應唯一的Portal。

7. PortalStart():負責進行Portal結(jié)構(gòu)體初始化工作,包括執(zhí)行算子初始化、內(nèi)存上下文分配等。

8. PortalRun():負責真正的執(zhí)行和運算,它是執(zhí)行器的核心。

9. PortalDrop():負責最后的清理工作,主要是數(shù)據(jù)結(jié)構(gòu)、緩存的清理。

10. finish_xact_command():完成事務提交。

11. EndCommand():通知客戶端查詢執(zhí)行完成。

???gdb調(diào)試

調(diào)試需要用到符號信息,configure使用如下命令

gdb attach 進程號,這里進程號為17012

info threads查看所有線程,t 線程號切換線程,bt可以查看線程調(diào)用棧。

也可以使用linux工具gstack 打印函數(shù)調(diào)用棧。

以調(diào)試select語句為例,gdb attach?進程號,在exec_simple_query打上斷點,執(zhí)行select語句即可開始調(diào)試


openGauss內(nèi)核分析(二):簡單查詢的執(zhí)行的評論 (共 條)

分享到微博請遵守國家法律
长兴县| 绥德县| 丹巴县| 兴仁县| 广饶县| 永春县| 遂宁市| 南投县| 突泉县| 通化县| 普洱| 稷山县| 维西| 科尔| 霍州市| 大竹县| 洛南县| 东丽区| 大关县| 张北县| 隆回县| 桦川县| 安化县| 新蔡县| 贵阳市| 扬中市| 顺义区| 昭平县| 巴中市| 晋江市| 桐乡市| 亚东县| 宜阳县| 西乡县| 林州市| 图们市| 德保县| 侯马市| 县级市| 平顶山市| 天柱县|