openGauss邏輯架構(gòu)

openGauss邏輯架構(gòu)

openGauss邏輯架構(gòu)圖在openGauss源碼doc目錄下坟比,見下圖惭每。


openGauss-architecture.png

線程管理

列舉了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):
  1. 客戶端向數(shù)據(jù)庫發(fā)起連接請求,數(shù)據(jù)庫主線程創(chuàng)建會(huì)話乙漓,將會(huì)話分發(fā)給線程組级历,加入到線程組的epoll列表中
  2. 線程組的監(jiān)聽線程負(fù)責(zé)監(jiān)聽epoll列表中的所有客戶端連接
  3. 線程組監(jiān)聽線程監(jiān)聽到客戶端任務(wù)請求,將會(huì)話分配給空閑的線程組worker線程叭披。任務(wù)完成后寥殖,worker線程返還會(huì)話給監(jiān)聽線程玩讳,如無其他等待響應(yīng)請求的會(huì)話,則worker線程標(biāo)記為空閑狀態(tài)
  4. 線程組worker線程在客戶端斷開連接后嚼贡,關(guān)閉連接熏纯,并釋放相關(guān)資源
  5. 每個(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的支持
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳄橘,一起剝皮案震驚了整個(gè)濱河市声离,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘫怜,老刑警劉巖术徊,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鲸湃,居然都是意外死亡赠涮,警方通過查閱死者的電腦和手機(jī)子寓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笋除,“玉大人斜友,你說我怎么就攤上這事±” “怎么了鲜屏?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長国拇。 經(jīng)常有香客問我洛史,道長,這世上最難降的妖魔是什么酱吝? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任也殖,我火速辦了婚禮,結(jié)果婚禮上务热,老公的妹妹穿的比我還像新娘忆嗜。我一直安慰自己,他們只是感情好陕习,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布霎褐。 她就那樣靜靜地躺著,像睡著了一般该镣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上响谓,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天损合,我揣著相機(jī)與錄音,去河邊找鬼娘纷。 笑死嫁审,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赖晶。 我是一名探鬼主播律适,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遏插!你這毒婦竟也來了捂贿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤胳嘲,失蹤者是張志新(化名)和其女友劉穎厂僧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體了牛,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颜屠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年辰妙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甫窟。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡密浑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粗井,到底是詐尸還是另有隱情尔破,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布背传,位于F島的核電站呆瞻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏径玖。R本人自食惡果不足惜痴脾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梳星。 院中可真熱鬧赞赖,春花似錦、人聲如沸冤灾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽韵吨。三九已至匿垄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間归粉,已是汗流浹背椿疗。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糠悼,地道東北人届榄。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像倔喂,于是被迫代替她去往敵國和親铝条。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容