AIX和Oracle是企業(yè)級應(yīng)用中非常常見的兩個軟件,而在這兩個系統(tǒng)中,內(nèi)存的管理是非常重要的。這篇文章將針對AIX Oracle內(nèi)存進(jìn)行介紹,了解一下這兩個系統(tǒng)是如何處理內(nèi)存管理的。
在AIX中,內(nèi)存的管理是基于Virtual Memory Manager (VMM)的,VMM使得真實物理內(nèi)存被映射到進(jìn)程地址空間中。在AIX中,內(nèi)存可以被分為3個區(qū)域:
Text Segment:包含程序的代碼 Data Segment: 包含數(shù)據(jù)和全局變量 Stack Segment: 包含函數(shù)的堆棧
而在Oracle中,內(nèi)存的管理則以SGA和PGA為基礎(chǔ)。即使在一個單獨的客戶端連接中,都至少啟動了一個PGA。而對于Oracle SGA而言,它被分為4個區(qū)域:
Buffer Cache: 存儲行數(shù)據(jù) Shared Pool:存儲執(zhí)行SQL語句的請求的內(nèi)部結(jié)構(gòu) Large Pool: 存儲備份進(jìn)程所需的內(nèi)存 Java Pool : 存儲Java對象和Java類執(zhí)行所需的內(nèi)存
當(dāng)然,在Oracle SGA中,還有一些其他的記憶區(qū)域,比如 redo log buffer和fixed SGA,這篇文章就不再詳細(xì)介紹了。
在具體的應(yīng)用中,人們往往會對這些內(nèi)存的分配進(jìn)行調(diào)優(yōu),以達(dá)到更好的性能。比如,在AIX中,可以通過調(diào)整進(jìn)程的maxuproc屬性來增加系統(tǒng)的內(nèi)存使用,從而提高系統(tǒng)的并發(fā)性和負(fù)載容量。
chdev -l sys0 -a maxuproc='1000'
而在Oracle SGA中的內(nèi)存調(diào)優(yōu),則有很多不同的策略:
- 通過增加Oracle SGA緩存來改善性能。
觀察數(shù)據(jù)庫的性能,如果數(shù)據(jù)庫宏大,交易量大,通常需要增加SGA緩存,通過增加SGA緩存這種策略來改善數(shù)據(jù)庫的性能,但是這種策略不能一直持續(xù)下去,否則就需要增加整個新的內(nèi)存空間。
ALTER SYSTEM SET SGA_TARGET=2G SCOPE=BOTH;
可以通過設(shè)置PGA_AGGREGATE_TARGET實現(xiàn)。
alter system set pga_aggregate_target=500m scope=spfile;
可以設(shè)置SGA_MAX_SIZE和SGA_TARGET參數(shù)來控制共享池的大小。
alter system set sga_max_size=3500m scope=spfile; alter system set sga_target=3000m scope=spfile;
將一些數(shù)據(jù)放進(jìn)特定的內(nèi)存地址,以便于不同的計算機(jī)資源使用,這種方法被稱為內(nèi)存庫綁定。在Oracle中,也可以使用AMM(自動內(nèi)存管理)來管理這些策略。
在AIX和Oracle中,內(nèi)存的管理是非常重要的,這篇文章也只是簡單地介紹了一些內(nèi)存分配的基本知識,更深入的了解還需要讀者自己去實踐和探索。