瞭解oracle資料庫體系結構(1)

edwardking888發表於2010-04-12
今天開始學習oracle  OCA教材
oracle伺服器由2個實體構成,即例項和資料庫。
例項是由記憶體結構和程式組成。資料庫是由物理檔案構成(構成oralce資料庫的物理結構是資料檔案,重做日誌檔案和控制檔案組成)。
11g的記憶體管理可完全自動完成:DBA只需指定SGA和PGA大體上的記憶體分配,並讓oracle按其認定的最佳方式管理記憶體。DBA也可以控制記憶體分配。有一種折衷的技術,即由DBA定義一些實施自動記憶體管理時的限制。
物理結構和邏輯結構的關聯在資料字典中維護和記錄,資料字典包含用來描述整個資料庫的後設資料。
控制檔案儲存資料物理結構的詳細資訊,並且是連線到邏輯結構的起點。當某個例項開啟資料庫時,他首先要讀取控制檔案,使用控制檔案中的資訊,例項可以連線到資料庫的其餘部分及其中的資料欄位。
總結一下單例項資料庫體系結構,可瞭解到它由四個互動元件構成:
1.使用者與使用者程式互動。
2.使用者程式與伺服器程式互動。
3.伺服器程式與例項互動。
4.例項與資料庫互動。
 
 
可以使用下列語句確定例項是否是RAC資料庫的一部分:
select parallel from v$instance;
 
可以使用下列語句確定資料庫是否受到備用資料庫的保護以防丟失資料:
select protection_level from  v$database;
 
可以使用以下語句確定是否使用了流複製:
select * from dba_streams_administrator;
 
 
SGA至少包含三個資料結構:
1)資料庫高速緩衝區
2)日誌緩衝區
3)共享池
還可能包含有:
1)大池
2)java池
3)流池
 
在資料庫高速緩衝區中,緩衝區的更新頻率(或COMMIT數量)與何時寫回資料檔案沒有任何關係。對資料檔案執行寫操作由資料庫寫入程式後臺程式完成。
 
資料庫緩衝區大小會對效能產生至關重要的影響。快取應足夠大,以便能快取所有頻繁訪問的快(髒塊或乾淨塊),但也不能過大,以至於它會快取極少使用的塊。如果快取過小,將導致磁碟活動過多,因為頻繁訪問的塊持續從磁碟讀取,並由其它塊使用和覆蓋,然後再從磁碟讀取。如果記憶體較大,情況不回太差(只要它不是太大,不會導致作業系統必須在資料記憶體中交還虛擬記憶體也就行),但也可能導致問題,例如,如果需要設定極大資料庫高速緩衝區格式,則例項的啟動速度會變慢。
 
在oracle體系結構中,將日誌緩衝區轉儲到磁碟是基本瓶頸之一。DML的速度不能超過LGWR將更改向量轉儲到聯機重做日誌檔案的速度。
 
提示:
如果重做生成是限制資料庫效能的因數,唯一的選項是使用RAC,在RAC資料庫中,每個例項都有自己的日誌緩衝區,自己的LGWR,這是將重做資料平行寫入磁碟的唯一方法。
 
共享池是最複雜的SGA結構,
在這裡將分析4個共享池元件:
1)庫快取
2)資料字典快取
3)PL/SQL區域
4)SQL查詢和PL/SQL函式結果快取
 
1.庫快取
庫快取是記憶體區域,按其已解析的格式儲存最近執行的程式碼。
通過將程式碼快取在共享池,以便可以在不重新解析的情況下重用,極大地提高了效能。
 
提示:
用於在庫快取中查詢SQL的演算法基於構建此語句的字元的ASCII值。最不起眼的差別(例如,是SELECT,而非select)也意味著語句不匹配,將要再次解析。
 
2.資料字典快取
資料字典有時稱為“行快取”。它儲存最近使用的物件定義:表,索引,使用者和其它後設資料定義的描述。
提示:
調整共享池的方向是使庫快取的大小合理化。這是因為,oracle使用的用於在SGA中分配記憶體的演算法是首先分配字典快取,因此,如果庫快取正確無誤,字典快取必然是正確的。
 
3.PL/SQL區域
儲存的PL/SQL物件是過程,函式,打包的過程,打包的函式,物件型別定義和觸發器。當會話呼叫儲存的PL/SQL物件時,他必須從資料字典讀取,為了避免重複讀取,物件被快取到共享池的PL/SQL區域。
提示:
PL/SQL可以從使用者程式發出,而不儲存在資料字典中。這稱為匿名PL/SQL,匿名PL/SQL不能被快取和重用,但必須動態便宜。與儲存的PL/SQL相比,其效能表現始終較差。應該鼓勵開發人員將所有的匿名PL/SQL轉換為儲存的PL/SQL。
 
4.SQL查詢和PL/SQL函式結果快取
結果快取是11G版本的新功能。在很多應用程式中,同一查詢將由同一會話或多個會話執行多次,通過建立結果快取,oracle伺服器可以將此類查詢的結果儲存在記憶體中。在下次發出查詢(而不是執行查詢)時,伺服器可以檢索快取的結果。
預設方式下,將禁用SQL查詢和PL/SQL函式結果快取,但如果以程式設計方式將其啟用的話,可以極大提高效能。
 
5.設定共享池大小
設定共享池大小將對效能產生重要影響,它應該足夠大,以便快取所有頻繁執行的程式碼和頻繁訪問的物件定義(在庫快取和資料欄位快取中),但也不能過大,以至於連執行一次的語句也要快取。過大的共享池也會對效能產生不良影響,因為搜尋需要的時間過長。
 
大池
大池是一個可選區域,如果建立了大池,那些在不建立大池的情況下使用共享池記憶體的不同程式將自動使用大池。大池的一個主要用途是供共享的伺服器程式使用。
 
顯示可以動態重設大小的SGA元件的當前,最大和最小的容量:
select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE  from  v$sga_dynamic_components;
 
確定以為程式全域性區域分配了多少記憶體:
select name,value from v$pgastat where name in ('maximum PGA allocated','total PGA allocated');

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659506/,如需轉載,請註明出處,否則將追究法律責任。

相關文章