PostgreSQL Select源碼解析

來源:互聯網
上載者:User

PostgreSQL Select源碼解析

這張時序圖比較大,但是大致上描述了PG 處理簡單SQL的大致流程。

由用戶端發起SQL 陳述式,PG服務端進程backend接收到語句後,開始執行exec_simple_query()代碼。後面所有方法調用均有exec_simple_query()函數直接或者間接發起。

大體上分為以下幾個過程:pg_parse_query()->pg_analyze_and_rewrite()->pg_plan_queries()->… ExecutePlan() … ->pg_report_stat()。

pg_parse_query

只是簡單的產生raw parse tree,這個裡面不涉及語義檢查。只是做文法掃描,是一個Bison parser。

pg_analyze_and_rewrite

這塊會進行語義分析,會訪問資料庫中的對像,需要持有鎖。這個過程會將簡單的一個select 語句拆分成多個部分,將parse tree轉換成query tree。如將整個select語句轉換成:from 部分,

where條件部分,group by 部分,order by 部分以及having 部分等。是任何資料庫都需要操作的,並且非常重要的一環。

pg_plan_queries

在這個環節,將根據上面的query tree產生執行計畫。這部分核心代碼在planner.c中,是PG的Query Optimizer。會根據表和索引的統計資訊去計算不同路徑的可能代價值,最後選出最優者。

這裡先不展開,後面會寫文章,專門講這塊,即“PG 的Cost-based Optimizer原理”。

ExecutePlan

執行plan,它會遍曆每個節點,以致完成。最後將查詢結果返回給用戶端。

pg_report_stat

將統計資訊發送給collector。比如說表和索引掃描了多少次,返回多少記錄等。如果是DML語句,還會有增刪除改多少記錄的統計資訊。原始資訊以表為維度,後面匯總到庫層級或者執行個體層級。

這對於健全狀態檢查或者監控PG的效能有非常重要的作用。

從下面時序圖中,可以看出,每個源碼檔案的任務非常清晰。

postgres.c: 為backend進程,負責打雜和調度,是與用戶端對應的server進程。因為PG是C/S架構的,每個用戶端串連到PG後,postmaster都會fork出一個backend進程與之進行互動。

xact.c:是與事務相關的操作。事務的狀態標誌,隔離等級,是否有嵌套事務等。

utility.c: 語句或者命令的類型,主要包含delete,insert,update,select,explain,create,alter等。

execMain.c:是執行語句的總調度入口。

pgstat.c:負責資料庫統計收集和展示。

portalmem.c:負責語句執行時,記憶體申請與釋放。PG中,專門取了一個名字叫portal,相當於workspace。

------------------------------------華麗麗的分割線------------------------------------

CentOS 6.3環境下yum安裝PostgreSQL 9.3

PostgreSQL緩衝詳述

Windows平台編譯 PostgreSQL

Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)環境的配置與安裝

Ubuntu上的phppgAdmin安裝及配置

CentOS平台下安裝PostgreSQL9.3

PostgreSQL配置Streaming Replication叢集

如何在CentOS 7/6.5/6.4 下安裝PostgreSQL 9.3 與 phpPgAdmin 

------------------------------------華麗麗的分割線------------------------------------

PostgreSQL 的詳細介紹:請點這裡
PostgreSQL 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.