您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎樣解析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的比較,剩下的存儲引擎為在之中
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的結(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ò),可以把它分享出去讓更多的人看到。
免責(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)容。