程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle內存結構的相關篇SGA

Oracle內存結構的相關篇SGA

編輯:Oracle數據庫基礎

以下的文章主要介紹的是Oracle內存結構的相關研究-SGA篇,前兩天我在《Oracle內存結構研究-PGA篇》中看到有關於PGA的介紹。PGA作為一個服務器進程的專用的私有內存區,而SGA則是共享內存區。

在《Oracle內存結構研究-PGA篇》一文中提到,PGA是一個服務器進程的專用的私有內存區,而SGA則是共享內存區。

SGA由多個部分組成:

1, 固定SGA(Fixed SGA)

2, 塊緩沖區(Db cache)

3, 重做日志緩沖區(Redo log buffer)

4, Java池(Java pool)

5, 大池(Large pool)

6, 共享池(Shared pool)

7, 流池(Stream pool)

有如下參數控制共享池相關組件大小:

1, JAVA_POOL_SIZE:控制Java池大小。

2, SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。

3, LARGE_POOL_SIZE:控制大池大小。

4, DB_*K_CACHE_SIZE:控制不同塊大小的緩沖區大小。

5, LOG_BUFFER:控制重做日志緩沖區大小。

6, SGA_TARGET:10g以上控制自動SGA內存管理的總內存大小。

7, SGA_MAX_SIZE:控制SGA可以達到的最大大小,改變需重啟數據庫。

下面將詳細介紹在Oracle內存結構研究-SGA篇 中各個部分的作用和推薦設置。

二、SGA各組件作用

1, 固定SGA:

顧名思義,是一段不變的內存區,指向SGA中其他部分,Oracle通過它找到SGA中的其他區,可以簡單理解為用於管理的一段內存區。

2, 塊緩沖區:

查詢時,Oracle會先把從磁盤讀取的數據放入內存,以後再查詢相關數據時不用再次讀取磁盤。插入和更新時,Oracle會現在該區中緩存數據,之後批量寫到硬盤中。通過塊緩沖區,Oracle可以通過內存緩存提高磁盤的I/O性能。

塊緩沖區中有三個區域:

默認池(Default pool):所有數據默認都在這裡緩存。

保持池(Keep pool):用來緩存需要多次重用的數據。

回收池(Recycle pool):用來緩存很少重用的數據。

原來只有一個默認池,所有數據都在這裡緩存。這樣會產生一個問題:大量很少重用的數據會把需重用的數據“擠出”緩沖區,造成磁盤I/O增加,運行速度下降。後來分出了保持池和回收池根據是否經常重用來分別緩存數據。

這三部分內存區需要手動確定大小,並且之間沒有共享。例如:保持池中已經滿了,而回收池中還有大量空閒內存,這時回收池的內存不會分配給保持池。

9i開始,還可以設置db_nk_cache。9i之前數據庫只能使用相同的塊大小。9i開始同一個數據庫可以使用多種塊大小(2KB,4KB,8KB,16KB,32KB),這些塊需要在各自的db_nk_cache中緩存。如果為不同的表空間指定了不同的塊大小,需要為其設置各自的緩沖區。

3, 重做日志緩沖區(Redo log buffer):

數據寫到重做日志文件之前在這裡緩存,在以下情況中觸發:

每隔3秒

緩存達到1MB或1/3滿時

用戶提交時

緩沖區的數據寫入磁盤前

上述的相關內容就是對Oracle內存結構研究-SGA篇的描述,希望會給你帶來一些幫助在此方面。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved