讓oracle 的 SGA 享受大於1.7的記憶體

來源:互聯網
上載者:User

總之,一般設定shmmax >=SGA(32Bit 系統是否支援到1.7G 以上SGA 需要注意) ,預設為32M,
如果是64Bit 的Linux 作業系統,shmmax 設定為大於SGA_MAX_SIZE即可。

Linux共用記憶體頁大小為4KB。共用記憶體段的大小都是共用記憶體頁大小的整數倍。

一個共用記憶體段的最大大小是16G,那麼需要共用記憶體頁數是16GB/4KB = 16777216KB/ 4KB = 4194304(頁),也就是64Bit 系統下16GB 實體記憶體,設定kernel.shmall =4194304才符合要求(幾乎是原來設定2097152的兩倍)。這時可以將shmmax 參數調整到16G 了,同時可以修改SGA_MAX_SIZE 和SGA_TARGET為12G(您想設定的SGA 最大大小,當然也可以是2G~14G 等,還要協調PGA參數及OS 等其他記憶體使用量,不能設定太滿,比如16G)。

其值應不小於shmmax/page_size.預設值就是2097152,如果伺服器上啟動並執行所有執行個體的SGA總和不超過8GB(通常系統可分配的共用記憶體的和最大值為8GB),通常不需要修改。

32位的CPU的在windows系統中2G給系統用2G給應用程式使用,oracle的SGA記憶體使用量不能超過1.7G,將sga擴大到1.7G以上需要下面的一些設定

一.OS上修改
1.修改boot.ini檔案,加/3GB /PAE:
在這行,multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows" /3GB /PAE
2.修改windows註冊表:
regedit到HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0這個目錄中找到AWE_WINDOW_MEMORY這個參數,將其修改為oracle需要記憶體的大小:例如:3G時為:3*1024*1024*1024
這個參數如不存大時,可以建立一個字串名為AWE_WINDOW_MEMORY,值為上面講過的大小,這個值需要足夠大,不夠時將報:
ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS 8) Not enough storage is available to process this command
3.修改windows控制台中的管理工具--> 域安全性原則-->本地安全性原則-->使用者權限分配-->鎖定記憶體頁(記憶體中鎖定頁面)中加入啟oracle資料庫的OS使用者名稱.

4.重啟電腦

SELECT NAME,VALUE FROM v$parameter WHERE NAME IN ('sga_max_size','db_cache_size','shared_pool_size','shared_pool_reserved_size','large_pool_size','java_pool_size','db_block_size','db_block_buffers','log_buffer','sort_area_size','sort_area_retained_size','hash_area_size','sessions','open_cursors')
ORDER BY NAME;

alter system set SGA_TARGET = 3749707776 scope=spfile;

二、oracle上的修改

1.備份spfile   D:\DiabloOracle\product\10.2.0\db_1\database\SPFILEDIA.ORA
create pfile='c:/initSID.ora' from spfile;

2.在pfile上修改參數
use_indirect_data_buffers=true
pre_page_sga=true
db_block_buffers=262144
sga_max_size=2147483648
sga_target=2147483648

3.用pfile啟動資料庫,將參數寫回spfile,重啟資料庫
startup pfile=''
create spfile from pfile
shutdown immeidate
startup

===============

方法2:

通過PAE選項讓Oracle在4G記憶體的32位windows伺服器上使用超過1.7G的SGA
大 | 中 | 小
[不指定 2009/02/23 14:35 | by zeus ]
1.測試環境:HP DL380 G5伺服器,4GB記憶體,32位Windows 2003企業版

2.修改c:\boot.ini檔案,添加/PAE選項後如下:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect /PAE
[code]
3.重新啟動Windows後,修改Oracle SGA參數,重啟Oracle即可生效:
[code]
alter system reset sga_max_size scope=spfile sid='*';
alter system reset sga_target scope=spfile sid='*';
alter system set shared_pool_size=256M scope=spfile;
alter system set db_block_buffers=320000 scope=spfile;
alter system set use_indirect_data_buffers=true scope=spfile;
shutdown immediate;
startup;

使用PAE模式後,無法再使用Oracle自動記憶體管理功能,因此需要將sga_max_size和sga_target參數去掉,改用手動管理各記憶體組 件,如上面的shared_pool_size參數和db_block_buffers參數分別指定的是共用池和資料緩衝區的大 小,use_indirect_data_buffers指定oracle可以使用超過32位平台限制4GB以上的記憶體段

4.通過查看Oracle sga統計資訊可以看到設定已生效:

PRE_PAGE_SGA
 oracle實例啓動時,會只載入各個內存區最小的大小。而其他SGA內存只作爲虛擬內存分配,只有當進程touch到相應的頁時,纔會置換到物理內存中。但我們也許希望實例一啓動後,所有SGA都分配到物理內存。這時就可以通過設置PRE_PAGE_SGA參數來達到目的了。
 這個參數的默認值爲FALSE,即不將全部SGA置入物理內存中。當設置爲TRUE時,實例啓動會將全部SGA置入物理內存中。它可以使實例啓動達到它的最大效能狀態,但是,啓動時間也會更長(因爲爲了使所有SGA都置入物理內存中,oracle進程需要touch所有的SGA頁)。
LOCK_SGA
爲了保證SGA都被鎖定在物理內存中,而不必頁入/頁出,可以通過參數LOCK_SGA來控制。這個參數默認值爲FALSE,當指定爲TRUE時,可以將全部SGA都鎖定在物理內存中。當然,有些系統不支援內存鎖定,這個參數也就無效了
 
SGA_TARGET /SGA_MAX_SIZE
 10G中不需要分別制定SGA的每個部分的大小,假設將SGA_TARGET設置爲200M,表明SGA最大爲200M所有SGA組件如share pool,buffer cache,large pool,javapool都需從其中分配,oracle會自動爲各組件指定初始值,並在運行過程中動態的調整各組件的大小。
 當使用SGA_TARGET時,若未設置SGA_MAX_SIZE 或設置小於SGA_TARGET則SGA_MAX_SIZE等於SGA-TARGET.SGA_TARGET是可動態調整的,其值不能大於SGA_MAX_SIZE目前推薦的參數配置:
LOCK_SGA = TRUE
SGA_TARGET>= 4G (在系統物理內存允許的情況下越大越好)
SGA_MAX_SIZE>= 4G (在系統物理內存允許的情況下越大越好)但是效率並沒有什麼提高,通過以下兩個查詢看,命中率分別爲99.2%和98.8%,說明在oracle程式層的優化已經達到了較高的效率:查詢高速數據緩存命中率:
select sum(pins) "data access",sum(pins)-sum(reloads) "cachehit",
(1-sum(reloads)/sum(pins)) * 100 "hit rate" fromv$librarycache查詢數據字典命中率:
select sum(gets) "dictionary access",sum(gets) - sum(getmisses)"dictionary cache hit",
(1-sum(getmisses)/sum(gets)) * 100 "hit rate" from v$rowcache

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.