溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎樣解析mysql與oracle 體系結(jié)構(gòu)

發(fā)布時(shí)間:2021-11-16 11:42:44 來源:億速云 閱讀:215 作者:柒染 欄目:MySQL數(shù)據(jù)庫

這篇文章給大家介紹怎樣解析mysql與oracle 體系結(jié)構(gòu),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

做為一個(gè)學(xué)習(xí)oracle的工程師,現(xiàn)在開始學(xué)習(xí)mysql。

  mysql數(shù)據(jù)庫和oracle 相比作為一個(gè)開源數(shù)據(jù)庫,從學(xué)習(xí)的角度來說的話。他不像oracle的教育體系。文檔那么全面

學(xué)習(xí)oracle最好的方法是看oracle的官方文檔。本人由于英語水平有限。所以看了高性能mysql和深入淺出mysql

看了倆本書都不錯(cuò)。所有的資料都是教你怎么干活的。對于體系架構(gòu)等還是有點(diǎn)少。

我個(gè)人認(rèn)為學(xué)習(xí)數(shù)據(jù)庫,要先了解數(shù)據(jù)庫的體系結(jié)構(gòu)和sql的執(zhí)行過程。經(jīng)過查詢很多資料。感覺自己應(yīng)該是明白了

先說oracle 體系結(jié)構(gòu),oracle的體系結(jié)構(gòu)圖官方都有。網(wǎng)上也有好多講這個(gè)東西的。如果不明白可以查找下看一下。oracle的資料市面非常多。
提示:只做了innodb的比較,剩下的存儲引擎為在之中
怎樣解析mysql與oracle 體系結(jié)構(gòu)

   1,數(shù)據(jù)庫(database):     |—物理存儲:(os操作系統(tǒng)文件):        |— datafile      數(shù)據(jù)文件(存儲的是實(shí)實(shí)在在數(shù)據(jù)的地方)業(yè)務(wù)數(shù)據(jù)、系統(tǒng)數(shù)據(jù)、臨時(shí)數(shù)據(jù)(order by。。)回退數(shù)據(jù)

                                                |                                                               |—countralfile  控制文件(存儲的是數(shù)據(jù)庫的結(jié)構(gòu)信息)

                                                |                                                               |—logfile         日志文件(存儲的是改變的數(shù)據(jù))做恢復(fù)用

                                                |—邏輯存儲: |—表空間(table space)存數(shù)據(jù)字典的地方

                                                                      |—段(磁盤/io,存儲各種類型的數(shù)據(jù)的地方)不能跨表空間                                                                         

                                                                      |—區(qū)(為段分配空間的)不能跨越段                                                                        

                                                                      |—塊(最小的單位是block)不能跨越區(qū)

   2,實(shí)例(instance): |—sga:內(nèi)存cpu: shard pool 共享池:最近使用的sql語句(程序)和最近使用的數(shù)據(jù)字典的信息

                                        |                         buffer cache  數(shù)據(jù)庫緩沖區(qū):最近使用的數(shù)據(jù),大小由db_cache_size決定

                                        |                         redo log buffer  日志緩沖區(qū):最近改變的數(shù)據(jù)log buffer。按順序?qū)?,循環(huán)寫

                                        |                         java pool

                                        |                         large pool

                                        |—后臺進(jìn)程: |—數(shù)據(jù)庫寫進(jìn)程dbwr:把數(shù)據(jù)由數(shù)據(jù)庫緩沖區(qū)寫入數(shù)據(jù)文件里

                                                              |—日志寫進(jìn)程lgwr:把數(shù)據(jù)由日志緩沖區(qū)寫入日志文件里

                                                              |—檢查點(diǎn)進(jìn)程ckpt:1,數(shù)據(jù)庫同步的標(biāo)志。三大核心文件必須保證在同一檢查點(diǎn)上,數(shù)據(jù)庫才能起來,最先寫在日志文件里,寫在數(shù)據(jù)文件的頭里

                                                              |                           2,觸發(fā)數(shù)據(jù)庫寫進(jìn)程,把數(shù)據(jù)由數(shù)據(jù)庫緩沖區(qū)寫入數(shù)據(jù)文件里

                                                              |—系統(tǒng)監(jiān)控進(jìn)程smon:1,歷程恢復(fù)

                                                              |                               2,釋放臨時(shí)段的空間

                                                              |                               3,合并相鄰的空間碎片

                                                              |—程序監(jiān)控進(jìn)程pmon:釋放資源(包括正常和異常資源)

                                                              |  MMON監(jiān)視進(jìn)程每到指定時(shí)間去訪問統(tǒng)計(jì)數(shù)據(jù),這樣就知道表空間使用量到警告或邊界沒有

怎樣解析mysql與oracle 體系結(jié)構(gòu)

下面看一下mysql的結(jié)構(gòu)圖
怎樣解析mysql與oracle 體系結(jié)構(gòu)


對于mysql來說他是線程模式。所以對應(yīng)的上面oracle進(jìn)程

master thread 主要負(fù)責(zé)將臟緩存頁刷新到數(shù)據(jù)文件,執(zhí)行purge操作,觸發(fā)檢查點(diǎn),合并插入緩沖區(qū)

insert buffer thread 負(fù)責(zé)插入緩沖區(qū)的合并操作

read thread 負(fù)責(zé)數(shù)據(jù)庫 讀讀操作,可配置多個(gè)讀線程

write theead 負(fù)責(zé)數(shù)據(jù)庫 讀寫操作,可配置多個(gè)寫線程

log theead 用于數(shù)據(jù)庫的重做日志刷新到logfile 中

purage theead   mysql5.5之后單獨(dú)的purage theead  執(zhí)行purge操作 

事務(wù)被提交后,其所使用的undolog可能不再需要,因此需要PurgeThread來回收已經(jīng)使用并分配的undo頁。在InnoDB 1.1版本之前,purge操作僅在InnoDB存儲引擎的Master Thread中完成。而從InnoDB 1.1版本開始,purge操作可以獨(dú)立到單獨(dú)的線程中進(jìn)行,以此來減輕Master Thread的工作,從而提高CPU的使用率以及提升存儲引擎的性能。用戶可以在MySQL數(shù)據(jù)庫的配置文件中添加如下命令來啟用獨(dú)立的Purge Thread:

look thread 負(fù)責(zé)鎖控制和死鎖檢測等

錯(cuò)誤檢測線程: 主要負(fù)責(zé)錯(cuò)誤監(jiān)控和錯(cuò)誤處理

write theead master thread 相當(dāng)于 dbwr 
數(shù)據(jù)庫寫進(jìn)程dbwr:把數(shù)據(jù)由數(shù)據(jù)庫緩沖區(qū)寫入數(shù)據(jù)文件里
master thread 主要負(fù)責(zé)將臟緩存頁刷新到數(shù)據(jù)文件,執(zhí)行purge操作,觸發(fā)檢查點(diǎn),合并插入緩沖區(qū)
write theead 負(fù)責(zé)數(shù)據(jù)庫 讀寫操作,可配置多個(gè)寫線程

insert buffer thread 類似于  smon

系統(tǒng)監(jiān)控進(jìn)程smon:

1,歷程恢復(fù)     

2,釋放臨時(shí)段的空間    

3,合并相鄰的空間碎片
insert buffer thread 負(fù)責(zé)插入緩沖區(qū)的合并操作

log theead  
日志寫進(jìn)程lgwr:把數(shù)據(jù)由日志緩沖區(qū)寫入日志文件里
log theead 用于數(shù)據(jù)庫的重做日志刷新到logfile 中

上述基本是我總結(jié)的mysql和oracle的instace中進(jìn)程線程的結(jié)構(gòu)

現(xiàn)在分析mysql的內(nèi)存結(jié)構(gòu)

共享池
shard pool 共享池:最近使用的sql語句(程序)和最近使用的數(shù)據(jù)字典的信息
QueryCache(下面簡稱QC)是根據(jù)SQL語句來cache的。一個(gè)SQL查詢?nèi)绻詓elect開頭,那么MySQL服務(wù)器將嘗試對其使用QC。每個(gè)Cache都是以SQL文本作為key來存的。在應(yīng)用QC之前,SQL文本不會被作任何處理
mysql的QC 很簡陋啊只要數(shù)據(jù)進(jìn)行更改就會清除qc里的數(shù)據(jù)。原來我非常不理解的東西?,F(xiàn)在明白了。不過深入解析沒有看

buffer cache 和innodb buffer cache
存儲數(shù)據(jù)的地方。mysql 是在innodb層處理這個(gè)問題。

      buffer cache  數(shù)據(jù)庫緩沖區(qū):最近使用的數(shù)據(jù),大小由db_cache_size決定redo log buffer 和innodb redo log buffer              

寫入數(shù)據(jù)庫時(shí)候先寫入redo log buffer  順序?qū)懭雰?nèi)存,刷新到硬盤,順序?qū)憽W詈笸ㄟ^寫進(jìn)程刷新到datafile里面
保證寫入的io。
綜上所述:mysql 和mysql innodb的別也就上述幾點(diǎn)基本差不多。只是mysql簡陋了好多。
學(xué)習(xí)mysql是可以更好的了解數(shù)據(jù)庫。

關(guān)于怎樣解析mysql與oracle 體系結(jié)構(gòu)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI