oracle 体系结构认识,Oracle数据库体系结构简单认识一
1、為什么使用數據庫軟件
為什么我們不直接使用硬盤管理數據而要使用數據庫,最主要的原因還是效率問題,直接采取硬盤管理數據的效率遠遠低于數據庫軟件,因為數據庫軟件是把數據加載至內存中進行修改,而硬盤則是需要直接進行大量的IO,非常耗時耗資源,大大拖累系統性能;并且,硬盤的安全系數較之數據庫軟件較低,相比數據庫的備份還原、日志記錄、日志挖掘等等防衛手段,硬盤還是存在短缺。
總而言之,使用數據庫軟件,是由于它的便捷、高效、安全,這也適用于其他優秀的軟件產品。
2、Oracle數據庫對ACID特性的實現
一個優良的數據庫必須能夠保證事務的ACID特性,而Oracle則是完美的實現了事務的ACID,簡單介紹如下:
(1)原子性(Atomicity):所有操作要么全部成功、要么全部失敗,所有操作是一個整體,為此Oracle數據庫引入了commit和rollback機制;
(2)一致性(Consistency):查詢結果是查詢開始時的結果集,與查詢耗時及查詢結束時刻無關,為此Oracle數據庫引入了UNDO機制;
(3)隔離性(Isolation):一個session上做的未提交操作,其他session無法查看,為此Oracle數據庫引入了鎖機制;
(4)持久性(Durability):在數據庫上做的任何有效修改(commit),都會持久保存,不會因為其他因素導致丟失,為此Oracle數據庫引入了REDO機制。
3、Oracle數據庫高效的體現
在實際生產中,對于數據庫最多的操作則是DQL和DML,以DQL語句和DML語句為例,簡單描述Oracle數據庫的高效體現:
select id ,name from test where id=123;
如上為一條DQL語句,我們知道SELECT語句的工作過程主要分為三個階段:
(1)?分析階段
解析階段主要包含語法分析、語義分析、生成執行計劃、權限檢查等階段性?任務。
(2)?執行階段
執行階段主要根據執行計劃從數據庫中獲取?所需的結果集,主要是從磁盤上的數據文件中加載數據至內存中,這個過程由Server Process完成。
(3)?Fetch
Fetch階段則是把獲取的結果集返回給用戶。
在實際的生產中,如上的SELECT語句執行頻率大、并發性高?,如每次都要進行分析、執行、Fetch,那么會導致非常低下的工作效率。所以,Oracle數據庫針對此類型的查詢語句做了很多優化。
首先,關于分析階段的優化如下:
每次進行語義分析,都需要從數據字典中獲取數據庫對象的定義,而數據字典又存放在操作系統上的磁盤文件中,即SYSTEM表空間下的數據文件中,每次進行語義分析都要將對象定義從磁盤文件加載至內存,高并發場景下拖累性能,而Oracle數據庫對此提供了Data Dictionary Cache組件,會把第一次語義分析的數據庫對象的字典信息緩存在其中,再次對相同的數據對象進行?語義分析時可以直接從Data Dictionary Cache組件中獲取到相關字典信息,大大提升語法分析的效率。
而生成執行計劃同樣如此,如果可以生成的執行計劃緩存在內存中進行保存,則下次執行相同語句時可以直接復用執行計劃可以大大提升效率。所以,Oracle數據庫提供了Library Cache組件,用于緩存執行計劃。同理,權限等信息同樣緩存在Data Dictionary Cache組件中。
其次,對于執行階段的優化如下:
根據生成的執行計劃,從磁盤文件中獲取結果集,需要進行大量的物理IO,需要耗費大量的系統資源,拖慢性能;并且,每次執行都要重復這樣的動作,所以,Oracle數據庫提供了Database Buffer Cache組件提前緩存磁盤中的數據鏡像,后續對目的數據的讀寫可以直接在內存中進行,大大降低了物理IO,提升了系統性能。
最后,對于Fetch階段,則是:
每個進程都有自己的PGA,即進程全局區,可以在PGA中緩存會話數據,以及輔助排序等,便于結果集的快速返回。
update test set id1=1 and id2=2 and id3=1;
如上為一條DML語句,同DQL語句相似,DML語句的執行流程僅包括兩個階段:分析階段和執行階段。
和DQL語句的流程相似,但是在執行階段則是存在差異,為了保證數據的持久性和安全性,數據庫數據的修改需要記錄日志,對每個數據塊的修改動作都會被記錄到日志文件中,這個過程由Server Process進程完成。為了防止大量DML產生的海量日志信息造成的巨大的物理IO,Oracle數據庫提供了Redo Log Buffer組件用于緩存數據塊修改產生的日志信息,Redo Log Buffer組件中的日志信息會在特定時機下分批次寫入到聯機REDO日志文件中,這個過程由LGWR進程完成,大大降低了物理IO。
而?Database Buffer Cache組件中的數據變更完成后,會在下一次刷檢查點時由DBWR進程寫入到磁盤文件中,DBWR會觸發LGWR先寫REDO日志,REDO日志寫完后才會進行灰數據的刷盤。
CKPT進程觸發DBWR進行灰數據刷盤后,還會更新數據文件頭和控制文件中的SCN信息,保持數據的一致性,并且??在控制文件中記錄數據刷盤的位置信息,為故障恢復降低工作量。
?
?
?
?
總結
以上是生活随笔為你收集整理的oracle 体系结构认识,Oracle数据库体系结构简单认识一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle批处理参数调用,bat调用j
- 下一篇: phpstorm调试php配置,PhpS