openGauss邏輯架構(gòu)
- 了解openGauss邏輯架構(gòu)
參考文檔:https://blog.opengauss.org/zh/post/jiajunfeng/%E6%B5%85%E8%81%8Aopengauss%E9%80%BB%E8%BE%91%E6%9E%B6%E6%9E%84/
https://my.oschina.net/gaussdb/blog/5057889
openGauss邏輯架構(gòu)圖在openGauss源碼doc目錄下坟比,見下圖惭每。
線程管理
列舉了openGauss的后臺線程。
- 業(yè)務(wù)處理線程池
業(yè)務(wù)處理線程(gaussdb)負(fù)責(zé)處理客戶端請求的任務(wù)找颓。高并發(fā)場景下岳颇,推薦使用線程池照捡。
-- 線程模式在高并發(fā)下,線程切換頻繁會(huì)導(dǎo)致性能下降话侧;所有線程共享內(nèi)存栗精,可能出現(xiàn)線程把內(nèi)存寫壞了,其他線程感知不到瞻鹏,出現(xiàn)錯(cuò)誤悲立。openGauss實(shí)現(xiàn)線程池通過線程利用來解決線程頻繁切換的問題
線程池的實(shí)現(xiàn):
- 客戶端向數(shù)據(jù)庫發(fā)起連接請求,數(shù)據(jù)庫主線程創(chuàng)建會(huì)話乙漓,將會(huì)話分發(fā)給線程組级历,加入到線程組的epoll列表中
- 線程組的監(jiān)聽線程負(fù)責(zé)監(jiān)聽epoll列表中的所有客戶端連接
- 線程組監(jiān)聽線程監(jiān)聽到客戶端任務(wù)請求,將會(huì)話分配給空閑的線程組worker線程叭披。任務(wù)完成后寥殖,worker線程返還會(huì)話給監(jiān)聽線程玩讳,如無其他等待響應(yīng)請求的會(huì)話,則worker線程標(biāo)記為空閑狀態(tài)
- 線程組worker線程在客戶端斷開連接后嚼贡,關(guān)閉連接熏纯,并釋放相關(guān)資源
- 每個(gè)線程組可以與一個(gè)NUMA節(jié)點(diǎn)綁定
- 日志寫線程
日志寫線程(WALwriter)將WAL buffer的內(nèi)容刷新到磁盤并保存在WAL日志中,確保已提交的事務(wù)都被永久記錄粤策,不會(huì)丟失樟澜。 - 數(shù)據(jù)頁寫線程
數(shù)據(jù)頁寫線程包括:pagewriter和bgwriter。
pagewriter線程負(fù)責(zé)將臟頁寫入雙寫文件叮盘,推進(jìn)整個(gè)數(shù)據(jù)庫的檢查點(diǎn)秩贰。
bgwriter線程主要將pagewriter轉(zhuǎn)發(fā)過來的臟頁落盤。 - 檢查點(diǎn)線程
檢查點(diǎn)線程(checkpointer)柔吼,周期性發(fā)起數(shù)據(jù)庫檢查點(diǎn)毒费。
檢查點(diǎn)(checkpoint)是一個(gè)事務(wù)日志中的點(diǎn),所有數(shù)據(jù)文件都在該點(diǎn)被更新以反映日志中的信息愈魏,所有數(shù)據(jù)文件都將被刷新到磁盤觅玻。 - 統(tǒng)計(jì)線程
統(tǒng)計(jì)線程(statscollector)進(jìn)行數(shù)據(jù)庫統(tǒng)計(jì)信息收集,并將這些信息保存在pgstat.stat文件中培漏。 - 日志發(fā)送線程
日志發(fā)送線程(WALsender)溪厘,在主節(jié)點(diǎn)將預(yù)寫日志發(fā)送到備節(jié)點(diǎn)。 - 日志接收線程
日志接收線程(WALreceiver)牌柄,在備節(jié)點(diǎn)接收主節(jié)點(diǎn)發(fā)送過來的預(yù)寫日志畸悬。 - 清理線程
清理線程(autovacuum)主要負(fù)責(zé)清理dead tuples,凍結(jié)事務(wù)id友鼻,清理不需要的clog部分傻昙,更新目標(biāo)表的FSM、VM彩扔,更新部分統(tǒng)計(jì)信息妆档。 - 歸檔線程
歸檔線程,數(shù)據(jù)庫打開歸檔功能時(shí)啟動(dòng)的一個(gè)線程虫碉,此線程用于將數(shù)據(jù)庫日志歸檔到指定的路徑贾惦。 - 管理線程
管理線程可以看作是一個(gè)消息轉(zhuǎn)發(fā)中心,在接收到請求后敦捧,啟動(dòng)相應(yīng)的子線程完成相關(guān)操作须板。
通信管理
- 通信協(xié)議處理
openGauss數(shù)據(jù)庫使用的前端后端協(xié)議,根據(jù)連接狀態(tài)的不同兢卵,存在幾種不同的子協(xié)議习瑰。 - 控制命令信號處理
信號是一種軟件中斷機(jī)制,openGauss數(shù)據(jù)庫線程之間的通訊離不開這些信號秽荤。
SQL引擎
- SQL解析器
解析接收到的SQL命令甜奄,生成語法樹柠横。 - SQL查詢重寫
利用已有語句特征和關(guān)系代數(shù)運(yùn)算生成更高效的等價(jià)語句。 - SQL優(yōu)化
枚舉不同的候選執(zhí)行路徑课兄,根據(jù)代價(jià)估算牍氛,選擇最優(yōu)的執(zhí)行路徑。 - SQL執(zhí)行
SQL執(zhí)行器遍歷執(zhí)行計(jì)劃樹烟阐,根據(jù)計(jì)劃樹的具體邏輯完成操作搬俊。 - DDL命令處理
解析DDL命令語法,查詢數(shù)據(jù)字典執(zhí)行更新操作蜒茄。 - 存儲(chǔ)過程解析
存儲(chǔ)過程是一組可以完成特定功能的SQL語句集合唉擂,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中。對存儲(chǔ)過程的解析在SQL引擎中完成扩淀。
存儲(chǔ)引擎
- 行存
將表以行為單位存儲(chǔ)在硬盤楔敌。 - 列存
列存的基本單位是CU(壓縮單元),表中一列的一部分?jǐn)?shù)據(jù)組成的壓縮數(shù)據(jù)塊驻谆。 - 內(nèi)存表
基于全內(nèi)存態(tài)的數(shù)據(jù)存儲(chǔ),為openGauss提供了高吞吐的實(shí)時(shí)數(shù)據(jù)處理分析能力和極低的事務(wù)處理延時(shí)庆聘。 - CSN快照
CSN:在openGauss內(nèi)部胜臊,使用的一個(gè)全局自增的長整數(shù)作為邏輯的時(shí)間戳,它模擬數(shù)據(jù)庫內(nèi)部的時(shí)序伙判。openGauss事務(wù)啟動(dòng)時(shí)會(huì)創(chuàng)建CSN快照象对。 - 大內(nèi)存緩沖管理
與外部文件系統(tǒng)進(jìn)行page頁面交換并作緩沖,對內(nèi)存共享頁面的臟頁進(jìn)行LRU算法淘汰并刷盤宴抚。 - 日志管理
采用多個(gè)Log Writer線程并行寫的機(jī)制勒魔。 - 空閑空間管理
清理數(shù)據(jù)庫中的歷史版本數(shù)據(jù)。 - 索引管理
主要管理索引結(jié)構(gòu)菇曲,如索引創(chuàng)建冠绢,更新,刪除等常潮。 - 并行日志回放
將重做日志中已記錄的數(shù)據(jù)文件變更操作重新應(yīng)用到系統(tǒng)/頁面中的過程弟胀,主要發(fā)生在故障恢復(fù)或者主備數(shù)據(jù)同步的備節(jié)點(diǎn)上。 - 鎖管理
對事務(wù)并發(fā)訪問過程中數(shù)據(jù)庫對象的加鎖操作進(jìn)行管理喊式。 - 存儲(chǔ)管理適配
對存儲(chǔ)介質(zhì)層的管理孵户,對不同的存儲(chǔ)介質(zhì)進(jìn)行適配封裝,對上層數(shù)據(jù)頁面訪問屏蔽底層真正存儲(chǔ)系統(tǒng)的差異岔留,例如管理HDD的使用夏哭、管理SSD的使用。 - 增量檢查點(diǎn)
增量檢查點(diǎn)會(huì)小批量的分階段的滾筒式的去進(jìn)行臟頁刷盤献联,同時(shí)更新lsn信息竖配,回收不需要的xlog日志厕吉。 - NUMA 數(shù)據(jù)結(jié)構(gòu)
通過numa綁核,減少跨核內(nèi)存訪問的時(shí)延問題械念,提升CPU利用率头朱,提升多線程間同步性能,xlog日志批量插入龄减,熱點(diǎn)數(shù)據(jù)分散處理项钮。
安全管理
- 身份管理
openGauss使用了一系列的認(rèn)證機(jī)制來實(shí)現(xiàn),通過認(rèn)證模塊限制用戶對數(shù)據(jù)庫的訪問希停,通過口令認(rèn)證烁巫、證書認(rèn)證等機(jī)制保障認(rèn)證過程中的安全,通過黑白名單限制訪問IP宠能,通過數(shù)據(jù)庫屬性或用戶屬性限制連接數(shù)亚隙。 - 訪問控制
基于角色的訪問控制機(jī)制,控制數(shù)據(jù)庫資源和對象的訪問權(quán)限违崇。 - 通信加密
openGauss提供了數(shù)據(jù)加密阿弃、數(shù)據(jù)脫敏、加密數(shù)據(jù)導(dǎo)入導(dǎo)出等機(jī)制保障數(shù)據(jù)的隱私安全羞延。 - 審計(jì)
openGauss提供了基礎(chǔ)審計(jì)能力渣淳,審計(jì)內(nèi)容包括事件的發(fā)起者,事件的發(fā)生時(shí)間和事件的內(nèi)容伴箩。
通用組件
- 數(shù)據(jù)字典
數(shù)據(jù)庫的元數(shù)據(jù)入愧,可以通過查詢數(shù)據(jù)字典查看數(shù)據(jù)庫的相關(guān)信息,如數(shù)據(jù)庫對象的屬性等嗤谚。 - 內(nèi)存管理
根據(jù)openGauss的配置參數(shù)棺蛛,規(guī)劃數(shù)據(jù)庫各種內(nèi)存的分配。 - 數(shù)據(jù)類型
數(shù)據(jù)庫中數(shù)據(jù)的屬性巩步。 - 內(nèi)置函數(shù)
數(shù)據(jù)庫內(nèi)定義的子程序旁赊,實(shí)現(xiàn)特定的功能需求。
工具
- 客戶端命令行工具
gsql - 數(shù)據(jù)庫實(shí)例控制工具
實(shí)例初始化(gs_initdb)渗钉,實(shí)例啟停(gs_ctl) 等彤恶。 - 物理備份/恢復(fù)工具
gs_basebackup - 邏輯導(dǎo)入導(dǎo)出工具
gs_dump,gs_dumpall - OM安裝
gs_om
客戶端驅(qū)動(dòng)
- 命令行接口(CLI)
gsql客戶端 - Java數(shù)據(jù)庫連接(JDBC)
openGauss提供了對JDBC 4.0特性的支持 - 開放式數(shù)據(jù)庫連接(ODBC)
openGauss提供了對ODBC 3.5的支持