本書是針對openGauss開源數(shù)據(jù)庫的源碼進行分模塊解析的書籍。 全書共分為10章。第1章對openGauss進行簡介。第2章介紹了內(nèi)核開發(fā)所需的入門知識,包括 openGauss的安裝、基本使用、開發(fā)、編譯、參與社區(qū)開源項目等。第3~10章針對openGauss不同的功能 模塊分別進行源碼介紹。第3章針對系統(tǒng)表、多線程架構(gòu)、內(nèi)存管理等作用于整個數(shù)據(jù)庫系統(tǒng)的公共組件 從定義、原理、流程等方面進行源碼介紹; 第4章介紹openGauss滿足OLTP、OLAP不同業(yè)務(wù)場景的存儲 引擎實現(xiàn)及對應(yīng)的源碼; 第5章介紹保證數(shù)據(jù)庫ACID屬性的事務(wù)機制的原理和源碼; 第6章介紹SQL 引擎的SQL解析和查詢優(yōu)化代碼主流程; 第7章介紹openGauss執(zhí)行器的整體架構(gòu)和各類執(zhí)行算子的源 碼; 第8章介紹openGauss在人工智能與數(shù)據(jù)庫結(jié)合領(lǐng)域探索的源碼; 第9章從系統(tǒng)整體角度出發(fā),針對 基礎(chǔ)和高階的安全能力進行全面介紹和源碼解讀; 第10章介紹openGauss的備份恢復(fù)機制的源碼,包括 全量備份、增量備份所涉及的工具、交互流程和主要文件等。 本書可以作為內(nèi)核開發(fā)者了解openGauss數(shù)據(jù)庫并基于openGauss進行數(shù)據(jù)庫開發(fā)的參考教程,也 可以作為廣大高校計算機專業(yè)數(shù)據(jù)庫設(shè)計課程的參考教材。
數(shù)據(jù)庫是組織、存儲、管理、分析數(shù)據(jù)的系統(tǒng),目前各行各業(yè)幾乎所有的信息系統(tǒng)都需要使用數(shù)據(jù)庫系統(tǒng)來管理業(yè)務(wù)數(shù)據(jù)。數(shù)據(jù)庫在硬件和應(yīng)用之間起到了承上啟下的重要作用,是IT行業(yè)不可或缺的基礎(chǔ)軟件。
20世紀50年代,隨著計算機技術(shù)的成熟,計算機開始運用于數(shù)據(jù)管理,然而傳統(tǒng)的文件系統(tǒng)難以應(yīng)對數(shù)據(jù)增長的挑戰(zhàn),也無法滿足多用戶共享數(shù)據(jù)和快速查詢數(shù)據(jù)的需求。因此,20世紀60年代,數(shù)據(jù)庫應(yīng)運而生。經(jīng)過60余年的發(fā)展,數(shù)據(jù)庫發(fā)生了翻天覆地的變化,從網(wǎng)狀數(shù)據(jù)庫的提出到關(guān)系數(shù)據(jù)庫的蓬勃發(fā)展,從單機數(shù)據(jù)庫、集群數(shù)據(jù)庫到分布式數(shù)據(jù)庫,從本地部署形態(tài)到云數(shù)據(jù)庫部署形態(tài),從交易型行存引擎到分析型列存引擎,從SQL到NoSQL再到NewSQL的不同應(yīng)用形態(tài),從手工運維到AI自運維,數(shù)據(jù)庫技術(shù)出現(xiàn)了百家爭鳴、百花齊放的大繁榮和大發(fā)展。近年來,我國數(shù)據(jù)庫領(lǐng)域無論在學(xué)術(shù)界還是在工業(yè)界都得到了快速發(fā)展。
華為公司在2020年6月30日推出了開源關(guān)系數(shù)據(jù)庫openGauss,它是GaussDB云數(shù)據(jù)庫服務(wù)的開源版本,采用木蘭寬松許可證v2發(fā)行,深度融合了華為公司在數(shù)據(jù)庫領(lǐng)域多年的經(jīng)驗,是結(jié)合企業(yè)級場景打造的一款高安全性、高可用性的數(shù)據(jù)庫。本書對openGauss開源社區(qū)上的源碼進行解析,從系統(tǒng)表、多線程架構(gòu)等公共組件到存儲引擎、SQL引擎、執(zhí)行引擎、安全、AI等模塊,全方位地介紹源碼主流程和重要文件,以幫助讀者更快地了解openGauss的源碼并掌握其具體實現(xiàn)。
本書主要由李國良、張樹杰編寫。此外,參與本書編寫的還包括華為公司多位數(shù)據(jù)庫專家。
感謝清華大學(xué)出版社的盛東亮老師、鐘志芳老師和崔彤老師在本書編輯審校工作中所作出的貢獻。
編者
2021年5月
李國良 清華大學(xué)計算機系副主任、教授、博士生導(dǎo)師。在數(shù)據(jù)庫會議和期刊上發(fā)表論文150余篇,他引10000余次。先后主持國家杰出青年科學(xué)基金、優(yōu)秀青年基金、青年973等多個項目。獲得VLDB青年貢獻獎,IEEE數(shù)據(jù)工程杰出新人獎,國家科學(xué)技術(shù)進步二等獎,VLDB、KDD、ICDE、CIKM論文獎(提名獎)。擔任SIGMOD 2021大會主席。
張樹杰 華為數(shù)據(jù)庫技術(shù)專家,長期從事數(shù)據(jù)庫內(nèi)核開發(fā)工作,精通數(shù)據(jù)庫內(nèi)核原理和架構(gòu)設(shè)計,目前在華為高斯實驗室負責GaussDB SQL引擎的開發(fā)和技術(shù)規(guī)劃,著有《PostgreSQL技術(shù)內(nèi)幕:查詢優(yōu)化深度探索》《PostgreSQL技術(shù)內(nèi)幕:事務(wù)處理深度探索》等圖書。
第1章openGauss簡介00
1.1openGauss概述00
1.2應(yīng)用場景00
1.3系統(tǒng)架構(gòu)00
1.4代碼結(jié)構(gòu)00
1.4.1通信管理00
1.4.2SQL引擎00
1.4.3存儲引擎0
1.5價值特性0
1.5.1高性能0
1.5.2高擴展0
1.5.3高可用0
1.5.4可維護性0
1.5.5數(shù)據(jù)庫安全0
1.5.6AI能力0
1.6本章小結(jié)0
第2章openGauss開發(fā)快速入門0
2.1安裝部署0
2.1.1了解安裝流程0
2.1.2準備軟硬件安裝環(huán)境0
2.1.3修改操作系統(tǒng)配置0
2.1.4設(shè)置root用戶遠程登錄0
2.1.5獲取安裝包0
2.1.6創(chuàng)建XML配置文件0
2.1.7初始化安裝環(huán)境0
2.1.8執(zhí)行安裝0
2.1.9安裝驗證0
2.2基本使用0
2.2.1連接數(shù)據(jù)庫0
2.2.2使用數(shù)據(jù)庫0
2.3開發(fā)和編譯0
2.3.1搭建開發(fā)環(huán)境0
2.3.2搭建編譯環(huán)境0
2.3.3版本編譯0
2.4參與openGauss社區(qū)開源項目0
2.4.1開源社區(qū)概述0
2.4.2社區(qū)環(huán)境準備0
2.4.3提交Issue0
2.4.4貢獻代碼和文檔0
2.4.5Git使用0
2.5本章小結(jié)
openGauss數(shù)據(jù)庫源碼解析
目錄
第3章公共組件源碼解析
3.1系統(tǒng)表
3.1.1系統(tǒng)表的定義
3.1.2系統(tǒng)表的訪問
3.2數(shù)據(jù)庫初始化
3.3多線程架構(gòu)
3.3.1openGauss主要線程
3.3.2線程間通信
3.3.3線程初始化流程
3.4線程池技術(shù)
3.4.1線程池原理
3.4.2線程池實現(xiàn)
3.5內(nèi)存管理
3.6多維監(jiān)控
3.7模擬信號機制
3.8本章小結(jié)
第4章存儲引擎源碼解析
4.1存儲引擎整體架構(gòu)與代碼
4.2磁盤引擎
4.2.1磁盤引擎整體框架與代碼
4.2.2行存儲統(tǒng)一訪存接口
4.2.3astore
4.2.4ustore
4.2.5行存儲索引機制
4.2.6行存儲緩存機制
4.2.7cstore
4.2.8日志系統(tǒng)
4.2.9持久化及故障恢復(fù)機制
4.2.10主備機制
4.3內(nèi)存表
4.3.1總體架構(gòu)與代碼
4.3.2FDW
4.3.3內(nèi)存表的存儲
4.3.4索引
4.3.5事務(wù)
4.3.6并發(fā)控制
4.3.7重做日志
4.3.8檢查點
4.3.9恢復(fù)
4.4本章小結(jié)
第5章事務(wù)機制源碼解析
5.1事務(wù)整體架構(gòu)與代碼
5.2事務(wù)并發(fā)控制
5.2.1事務(wù)狀態(tài)機
5.2.2事務(wù)ID分配及CLOG/CSNLOG
5.2.3MVCC可見性判斷機制
5.2.4進程內(nèi)多線程管理機制
5.3鎖機制
5.3.1自旋鎖
5.3.2輕量級鎖
5.3.3常規(guī)鎖
5.3.4死鎖檢測機制
5.3.5無鎖原子操作
5.3.6基于鯤鵬服務(wù)器的性能優(yōu)化
5.4本章小結(jié)
第6章SQL引擎源碼解析
6.1概述
6.2SQL解析
6.2.1詞法分析
6.2.2語法分析
6.2.3語義分析
6.2.4解析流程分析
6.3查詢優(yōu)化
6.3.1查詢重寫
6.3.2統(tǒng)計信息與代價估算
6.3.3物理路徑
6.3.4動態(tài)規(guī)劃
6.3.5遺傳算法
6.4本章小結(jié)
第7章執(zhí)行器解析
7.1執(zhí)行器整體架構(gòu)與代碼
7.1.1執(zhí)行器整體架構(gòu)
7.1.2火山模型
7.1.3代碼
7.2執(zhí)行流程
7.2.1Portal策略選擇模塊
7.2.2ProcessUtility模塊
7.2.3executor模塊
7.3執(zhí)行算子
7.3.1控制算子
7.3.2掃描算子
7.3.3物化算子
7.3.4連接算子
7.4表達式計算
7.4.1初始化階段
7.4.2執(zhí)行階段
7.5編譯執(zhí)行
7.5.1VecExprCode類
7.5.2VecHashAggCodeGen類
7.5.3VecHashJoinCodeGen類
7.5.4VecSortCodeGen類
7.6向量化引擎
7.6.1控制算子
7.6.2掃描算子
7.6.3物化算子
7.6.4連接算子
7.7本章小結(jié)
第8章 AI技術(shù)
8.1概述
8.2自調(diào)優(yōu)
8.2.1參數(shù)自調(diào)優(yōu)的使用場景
8.2.2現(xiàn)有的參數(shù)調(diào)優(yōu)技術(shù)
8.2.3XTuner的調(diào)優(yōu)策略
8.2.4openGauss關(guān)鍵源碼解析
8.2.5使用示例
8.2.6對XTuner的二次開發(fā)
8.2.7XTuner的演進路線
8.3慢SQL發(fā)現(xiàn)
8.3.1慢SQL發(fā)現(xiàn)的功能
8.3.2現(xiàn)有技術(shù)
8.3.3慢SQL發(fā)現(xiàn)采取的策略
8.3.4關(guān)鍵源碼解析
8.3.5使用示例
8.4智能索引推薦
8.4.1使用場景
8.4.2現(xiàn)有技術(shù)
8.4.3實現(xiàn)原理
8.4.4關(guān)鍵源碼解析
8.4.5使用示例
8.5指標采集、預(yù)測與異常檢測
8.5.1使用場景
8.5.2實現(xiàn)原理
8.5.3關(guān)鍵源碼解析
8.5.4使用示例
8.5.5演進路線
8.6AI查詢時間預(yù)測
8.6.1使用場景
8.6.2現(xiàn)有技術(shù)
8.6.3實現(xiàn)原理
8.6.4關(guān)鍵源碼解析
8.6.5使用示例
8.6.6演進路線
8.7DeepSQL
8.7.1使用場景
8.7.2現(xiàn)有技術(shù)
8.7.3關(guān)鍵源碼解析
8.7.4基于MADlib框架的擴展
8.7.5MADlib在openGauss上的使用示例
8.7.6演進路線
8.8本章小結(jié)
第9章安全管理源碼解析
9.1安全管理整體架構(gòu)與代碼
9.2安全認證
9.2.1身份認證
9.2.2口令存儲
9.2.3認證機制
9.2.4Kerberos安全認證
9.3角色創(chuàng)建與角色管理
9.3.1角色創(chuàng)建
9.3.2角色管理
9.4權(quán)限管理與權(quán)限檢查
9.4.1權(quán)限管理
9.4.2權(quán)限檢查
9.5審計與追蹤
9.5.1審計日志設(shè)計
9.5.2審計執(zhí)行
9.6數(shù)據(jù)安全技術(shù)
9.6.1數(shù)據(jù)加解密接口
9.6.2數(shù)據(jù)動態(tài)脫敏
9.6.3密態(tài)等值查詢
9.7本章小結(jié)
第10章備份恢復(fù)機制
10.1openGauss全量備份技術(shù)
10.1.1gs_basebackup備份工具
10.1.2gs_basebackup備份交互流程
10.2openGauss增量備份技術(shù)
10.2.1gs_probackup子命令
10.2.2gs_probackup主要文件
10.2.3gs_probackup備份恢復(fù)流程
10.2.4redo日志增量備份恢復(fù)流程
10.3本章小結(jié)