以下的文章主要是介紹Oracle事例 ,其中包括Oracle 的兩大實例的介紹,Oracle 數據庫 、以及系統共享區System Global Area(SGA) ,的相關內容的介紹,以下是文章的詳細內容望你會有所了解。
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事例中Oracle會將這句SQL進行分析(parse),這個過程類似於編譯,會耗費相對較多的時間。在分析完這個SQL,Oracle會把他的分析結果給保存在Shared pool的Library Cache中,當數據庫第二次執行該SQL時,Oracle自動跳過這個分析過程,從而減少了系統運行的時間。這也是為什麼第一次運行的SQL 比第二次運行的SQL要慢一點的原因。
對於保存在共享池中的SQL語句,可以從V$Sqltext、v$Sqlarea中查詢到,對於編程者來說,要盡量提高語句的重用率,減少語句的分析時間。一個設計的差的應用程序可以毀掉整個數據庫的Share pool,提高SQL語句的重用率必須先養成良好的變成習慣,盡量使用Bind變量。
·數據字典緩沖區(Data Dictionary Cache)顯而易見,數據字典緩沖區是Oracle特地為數據字典准備的一塊緩沖池,供Oracle內部使用,沒有什麼可以說的。
b、塊緩沖區高速緩存(Database Buffer Cache)
這些緩沖是對應所有數據文件中的一些被使用到的數據塊。讓他們能夠在內存中進行操作。在這個級別裡沒有系統文件,,戶數據文件,臨時數據文件,回滾段文件之分。也就是任何文件的數據塊都有可能被緩沖。數據庫的任何修改都在該緩沖裡完成,並由DBWR進程將修改後的數據寫入磁盤。
這個緩沖區的塊基本上在兩個不同的列表中管理。一個是塊的“髒”表(Dirty List),需要用數據庫塊的書寫器(DBWR)來寫入,另外一個是不髒的塊的列表(Free List),一般的情況下,是使用最近最少使用(Least Recently Used,LRU)算法來管理。
塊緩沖區高速緩存又可以細分為以下三個部分(Default pool,Keep pool,Recycle pool)。如果不是人為設置初始化參數(Init.ora),Oracle將默認為Default pool。
由於操作系統尋址能力的限制,不通過特殊設置,在32位的系統上,塊緩沖區高速緩存最大可以達到1.7G,在64位系統上,塊緩沖區高速緩存最大可以達到10G。
c、重做日志緩沖區(Redo log buffer)
重做日志文件的緩沖區,對數據庫的任何修改都按順序被記錄在該緩沖,然後由LGWR進程將它寫入磁盤。這些修改信息可能是DML語句,如(Insert,Update,Delete),或DDL語句,如(Create,Alter,Drop等)。
在Oracle事例中重做日志緩沖區的存在是因為內存到內存的操作比較內存到硬盤的速度快很多,所以重作日志緩沖區可以加快數據庫的操作速度,但是考慮的數據庫的一致性與可恢復性,數據在重做日志緩沖區中的滯留時間不會很長。所以重作日志緩沖區一般都很小,大於3M之後的重作日志緩沖區已經沒有太大的實際意義。