您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎樣解析mysql與oracle 體系結構,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
做為一個學習oracle的工程師,現在開始學習mysql。
mysql數據庫和oracle 相比作為一個開源數據庫,從學習的角度來說的話。他不像oracle的教育體系。文檔那么全面
學習oracle最好的方法是看oracle的官方文檔。本人由于英語水平有限。所以看了高性能mysql和深入淺出mysql
看了倆本書都不錯。所有的資料都是教你怎么干活的。對于體系架構等還是有點少。
我個人認為學習數據庫,要先了解數據庫的體系結構和sql的執行過程。經過查詢很多資料。感覺自己應該是明白了
先說oracle 體系結構,oracle的體系結構圖官方都有。網上也有好多講這個東西的。如果不明白可以查找下看一下。oracle的資料市面非常多。
提示:只做了innodb的比較,剩下的存儲引擎為在之中
1,數據庫(database): |—物理存儲:(os操作系統文件): |— datafile 數據文件(存儲的是實實在在數據的地方)業務數據、系統數據、臨時數據(order by。。)回退數據
| |—countralfile 控制文件(存儲的是數據庫的結構信息)
| |—logfile 日志文件(存儲的是改變的數據)做恢復用
|—邏輯存儲: |—表空間(table space)存數據字典的地方
|—段(磁盤/io,存儲各種類型的數據的地方)不能跨表空間
|—區(為段分配空間的)不能跨越段
|—塊(最小的單位是block)不能跨越區
2,實例(instance): |—sga:內存cpu: shard pool 共享池:最近使用的sql語句(程序)和最近使用的數據字典的信息
| buffer cache 數據庫緩沖區:最近使用的數據,大小由db_cache_size決定
| redo log buffer 日志緩沖區:最近改變的數據log buffer。按順序寫,循環寫
| java pool
| large pool
|—后臺進程: |—數據庫寫進程dbwr:把數據由數據庫緩沖區寫入數據文件里
|—日志寫進程lgwr:把數據由日志緩沖區寫入日志文件里
|—檢查點進程ckpt:1,數據庫同步的標志。三大核心文件必須保證在同一檢查點上,數據庫才能起來,最先寫在日志文件里,寫在數據文件的頭里
| 2,觸發數據庫寫進程,把數據由數據庫緩沖區寫入數據文件里
|—系統監控進程smon:1,歷程恢復
| 2,釋放臨時段的空間
| 3,合并相鄰的空間碎片
|—程序監控進程pmon:釋放資源(包括正常和異常資源)
| MMON監視進程每到指定時間去訪問統計數據,這樣就知道表空間使用量到警告或邊界沒有
下面看一下mysql的結構圖
對于mysql來說他是線程模式。所以對應的上面oracle進程
master thread 主要負責將臟緩存頁刷新到數據文件,執行purge操作,觸發檢查點,合并插入緩沖區
insert buffer thread 負責插入緩沖區的合并操作
read thread 負責數據庫 讀讀操作,可配置多個讀線程
write theead 負責數據庫 讀寫操作,可配置多個寫線程
log theead 用于數據庫的重做日志刷新到logfile 中
purage theead mysql5.5之后單獨的purage theead 執行purge操作
事務被提交后,其所使用的undolog可能不再需要,因此需要PurgeThread來回收已經使用并分配的undo頁。在InnoDB 1.1版本之前,purge操作僅在InnoDB存儲引擎的Master Thread中完成。而從InnoDB 1.1版本開始,purge操作可以獨立到單獨的線程中進行,以此來減輕Master Thread的工作,從而提高CPU的使用率以及提升存儲引擎的性能。用戶可以在MySQL數據庫的配置文件中添加如下命令來啟用獨立的Purge Thread:
look thread 負責鎖控制和死鎖檢測等
錯誤檢測線程: 主要負責錯誤監控和錯誤處理
write theead master thread 相當于 dbwr
數據庫寫進程dbwr:把數據由數據庫緩沖區寫入數據文件里
master thread 主要負責將臟緩存頁刷新到數據文件,執行purge操作,觸發檢查點,合并插入緩沖區
write theead 負責數據庫 讀寫操作,可配置多個寫線程
insert buffer thread 類似于 smon
系統監控進程smon:
1,歷程恢復
2,釋放臨時段的空間
3,合并相鄰的空間碎片
insert buffer thread 負責插入緩沖區的合并操作
log theead
日志寫進程lgwr:把數據由日志緩沖區寫入日志文件里
log theead 用于數據庫的重做日志刷新到logfile 中
上述基本是我總結的mysql和oracle的instace中進程線程的結構
現在分析mysql的內存結構
共享池
shard pool 共享池:最近使用的sql語句(程序)和最近使用的數據字典的信息
QueryCache(下面簡稱QC)是根據SQL語句來cache的。一個SQL查詢如果以select開頭,那么MySQL服務器將嘗試對其使用QC。每個Cache都是以SQL文本作為key來存的。在應用QC之前,SQL文本不會被作任何處理
mysql的QC 很簡陋啊只要數據進行更改就會清除qc里的數據。原來我非常不理解的東西。現在明白了。不過深入解析沒有看
buffer cache 和innodb buffer cache
存儲數據的地方。mysql 是在innodb層處理這個問題。
buffer cache 數據庫緩沖區:最近使用的數據,大小由db_cache_size決定redo log buffer 和innodb redo log buffer
寫入數據庫時候先寫入redo log buffer 順序寫入內存,刷新到硬盤,順序寫。最后通過寫進程刷新到datafile里面
保證寫入的io。
綜上所述:mysql 和mysql innodb的別也就上述幾點基本差不多。只是mysql簡陋了好多。
學習mysql是可以更好的了解數據庫。
關于怎樣解析mysql與oracle 體系結構就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。