壹、ORACLE實例
1、ORACLE 實例——包括內存結構與後臺進程
System Global Area(SGA) 和 Background Process 稱為數據庫的實例。
2、ORACLE 數據庫——物理操作系統文件的集合
壹系列物理文件的集合(數據文件,控制文件,聯機日誌,參數文件等)
3、系統全局***享區System Global Area(SGA)
System Global Area是壹塊巨大的***享內存區域,他被看做是Oracle數據庫的壹個大緩沖池,這裏的數據可以被ORACLE的各個進程***用。其大小可以通過如下語句查看:
SQL select * from v$sga;
NAME VALUE
-
Fixed Size 39816
Variable Size 259812784
Database Buffers 1.049E+09
Redo Buffers 327680
更詳細的信息可以參考V$sgastat、V$buffer_pool
主要包括以下幾個部分:
a、 ***享池(Shared pool)
***享池是SGA中最關鍵的內存片段,特別是在性能和可伸縮性上。壹個太小的***享池會扼殺性能,使系統停止,太大的***享池也會有同樣的效果,將會消耗大量的CPU來管理這個***享池。不正確的使用***享池只會帶來災難。***享池主要又可以分為以下兩個部分:
SQL語句緩沖(Library Cache)
當壹個用戶提交壹個SQL語句,Oracle會將這句SQL進行分析(parse),這個過程類似於編譯,會耗費相對較多的時間。在分析完這個SQL,Oracle會把他的分析結果給保存在Sharedpool的LibraryCache中,當數據庫第二次執行該SQL時,Oracle自動跳過這個分析過程,從而減少了系統運行的時間。這也是為什麽第壹次運行的SQL比第二次運行的SQL要慢壹點的原因。
下面舉例說明parse的時間
SQL select count(*) fromscpass ;
COUNT(*)
--
243
Elapsed: 00:00:00.08
這是在Share_pool 和Data buffer 都沒有數據緩沖區的情況下所用的時間
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 的時間差上可以看出該SQL 的Parse 時間約為00:00:00.02
對於保存在***享池中的SQL語句,可以從V$Sqltext、v$Sqlarea中查詢到,對於編程者來說,要盡量提高語句的重用率,減少語句的分析時間。壹個設計的差的應用程序可以毀掉整個數據庫的Sharepool,提高SQL語句的重用率必須先養成良好的變成習慣,盡量使用Bind變量。
數據字典緩沖區(Data Dictionary Cache)
顯而易見,數據字典緩沖區是ORACLE特地為數據字典準備的壹塊緩沖池,供ORACLE內部使用,沒有什麽可以說的。
上文的內容相對來說還是很基礎的,所以對於剛剛入門的初學者來說,學習初期,好好的研究壹下本文中介紹的內容,相信對大家的入門學習會很有幫助的。