ORACLE實(shí)例和ORACLE數(shù)據(jù)庫詳解
導(dǎo)讀:oracle數(shù)據(jù)庫是一種大型數(shù)據(jù)庫系統(tǒng),一般應(yīng)用于商業(yè),政府部門,它的功能很強(qiáng)大,能夠處理大批量的數(shù)據(jù),在網(wǎng)絡(luò)方面也用的非常多。不過,一般的中小型企業(yè)都比較喜歡用mysql, SQL server等數(shù)據(jù)庫系統(tǒng),它的操作很簡單,功能也非常齊全。只是比較oracle數(shù)據(jù)庫而言,在處理大量數(shù)據(jù)方面有些不如。
一、ORACLE實(shí)例
1、ORACLE 實(shí)例——包括內(nèi)存結(jié)構(gòu)與后臺(tái)進(jìn)程
System Global Area(SGA) 和 Background Process 稱為數(shù)據(jù)庫的實(shí)例。
2、ORACLE 數(shù)據(jù)庫——物理操作系統(tǒng)文件的集合
一系列物理文件的集合(數(shù)據(jù)文件,控制文件,聯(lián)機(jī)日志,參數(shù)文件等)
3、系統(tǒng)全局共享區(qū)System Global Area(SGA)
System Global Area是一塊巨大的共享內(nèi)存區(qū)域,他被看做是Oracle數(shù)據(jù)庫的一個(gè)大緩沖池,這里的數(shù)據(jù)可以被ORACLE的各個(gè)進(jìn)程共用。其大小可以通過如下語句查看:
SQL> select * from v$sga;
NAME VALUE
-
Fixed Size 39816
Variable Size 259812784
Database Buffers 1.049E+09
Redo Buffers 327680
更詳細(xì)的信息可以參考V$sgastat、V$buffer_pool
主要包括以下幾個(gè)部分:
a、 共享池(Shared pool)
共享池是SGA中最關(guān)鍵的內(nèi)存片段,特別是在性能和可伸縮性上。一個(gè)太小的共享池會(huì)扼殺性能,使系統(tǒng)停止,太大的共享池也會(huì)有同樣的效果,將會(huì)消耗大量的CPU來管理這個(gè)共享池。不正確的使用共享池只會(huì)帶來災(zāi)難。共享池主要又可以分為以下兩個(gè)部分:
SQL語句緩沖(Library Cache)
當(dāng)一個(gè)用戶提交一個(gè)SQL語句,Oracle會(huì)將這句SQL進(jìn)行分析(parse),這個(gè)過程類似于編譯,會(huì)耗費(fèi)相對較多的時(shí)間。在分析完這個(gè)SQL,Oracle會(huì)把他的分析結(jié)果給保存在Sharedpool的LibraryCache中,當(dāng)數(shù)據(jù)庫第二次執(zhí)行該SQL時(shí),Oracle自動(dòng)跳過這個(gè)分析過程,從而減少了系統(tǒng)運(yùn)行的時(shí)間。這也是為什么***次運(yùn)行的SQL比第二次運(yùn)行的SQL要慢一點(diǎn)的原因。
下面舉例說明parse的時(shí)間
SQL> select count(*) fromscpass ;
COUNT(*)
--
243
Elapsed: 00:00:00.08
這是在Share_pool 和Data buffer 都沒有數(shù)據(jù)緩沖區(qū)的情況下所用的時(shí)間
SQL> alter system flush SHARED_POOL;
System altered.
清空Share_pool,保留Data buffer
SQL> select count(*) from scpass ;
COUNT(*)
--
243
Elapsed: 00:00:00.02
SQL> select count(*) from scpass ;
COUNT(*)
--
243
Elapsed: 00:00:00.00
從兩句SQL 的時(shí)間差上可以看出該SQL 的Parse 時(shí)間約為00:00:00.02
對于保存在共享池中的SQL語句,可以從V$Sqltext、v$Sqlarea中查詢到,對于編程者來說,要盡量提高語句的重用率,減少語句的分析時(shí)間。一個(gè)設(shè)計(jì)的差的應(yīng)用程序可以毀掉整個(gè)數(shù)據(jù)庫的Sharepool,提高SQL語句的重用率必須先養(yǎng)成良好的變成習(xí)慣,盡量使用Bind變量。
數(shù)據(jù)字典緩沖區(qū)(Data Dictionary Cache)
顯而易見,數(shù)據(jù)字典緩沖區(qū)是ORACLE特地為數(shù)據(jù)字典準(zhǔn)備的一塊緩沖池,供ORACLE內(nèi)部使用,沒有什么可以說的。
上文的內(nèi)容相對來說還是很基礎(chǔ)的,所以對于剛剛?cè)腴T的初學(xué)者來說,學(xué)習(xí)初期,好好的研究一下本文中介紹的內(nèi)容,相信對大家的入門學(xué)習(xí)會(huì)很有幫助的。
【編輯推薦】
- 在Oracle數(shù)據(jù)庫10g中跟蹤SQL
- 三招輕松確定Oracle數(shù)據(jù)庫表中重復(fù)的記錄
- Oracle數(shù)據(jù)庫中管理表空間和數(shù)據(jù)文件
- Oracle數(shù)據(jù)庫共享連接和專用連接方式比較