11g記憶體管理新特性的internal表現
11g中自動記憶體管理(Automatic Memory Management ,amm), 令dba在資料庫記憶體配置的相關工作更加簡單. AMM現在將SGA與PGA整合到一起管理,而您只需要設定memory_target引數即可限定Oracle將使用到的記憶體尺寸,Oracle將自動分配這些記憶體空間.
您一定很困惑Oracle在unix平臺上是如何對共享的sga記憶體空間與私有的pga記憶體空間進行切換的?這意味著Oracle需要經常釋放sga中的部分記憶體以便允許pga去使用它們.傳統的sys V 使用的共享記憶體shm介面不具備如此的靈活性.我們來看看Oracle是如何做到的?
先來獲取我們需要的11g例項共享記憶體id(shared memory id)
[oracle@rh2 ~]$ sysresv // 該命令需要設定了正確的LD_LIBRARY_PATH
IPC Resources for ORACLE_SID “T11” :
Shared Memory:
ID KEY
65537 0x95c84bb8
Semaphores:
ID KEY
327681 0xdf521034
Oracle Instance alive for sid “T11”
試著找出對應的sys V共享記憶體段:
[oracle@rh2 ~]$ ipcs -m
—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0x95c84bb8 65537 oracle 660 4096 0
對應的存在著共享記憶體段,但該段很小隻有 4096 byte哦,既然Oracle不再把sga放到共享段中,那藏到哪裡去了呢?
我們接下來檢查Oracle例項程式的記憶體影射狀況.
[oracle@rh2 ~]$ pmap `pgrep -f lgwr`|less
14889: ora_lgwr_T11
0000000000400000 155016K r-x– /usr/oracle/product/11g/db_1/bin/oracle
0000000009c62000 12404K rw— /usr/oracle/product/11g/db_1/bin/oracle
000000000a87f000 732K rwx– [ anon ]
0000000060000000 4K r–s- /dev/shm/ora_T11_65537_0
0000000060001000 16380K rw-s- /dev/shm/ora_T11_65537_0
0000000061000000 16384K rw-s- /dev/shm/ora_T11_65537_1
0000000062000000 16384K rw-s- /dev/shm/ora_T11_65537_2
0000000063000000 16384K rw-s- /dev/shm/ora_T11_65537_3
0000000064000000 16384K rw-s- /dev/shm/ora_T11_65537_4
0000000065000000 16384K rw-s- /dev/shm/ora_T11_65537_5
0000000066000000 16384K rw-s- /dev/shm/ora_T11_65537_6
0000000067000000 16384K rw-s- /dev/shm/ora_T11_65537_7
0000000068000000 16384K rw-s- /dev/shm/ora_T11_65537_8
0000000069000000 16384K rw-s- /dev/shm/ora_T11_65537_9
000000006a000000 16384K rw-s- /dev/shm/ora_T11_65537_10
000000006b000000 16384K rw-s- /dev/shm/ora_T11_65537_11
000000006c000000 16384K rw-s- /dev/shm/ora_T11_65537_12
000000006d000000 16384K rw-s- /dev/shm/ora_T11_65537_13
000000006e000000 16384K rw-s- /dev/shm/ora_T11_65537_14
000000006f000000 16384K rw-s- /dev/shm/ora_T11_65537_15
............
0000003e79109000 4K rw— /lib64/tls/librt-2.3.4.so
0000003e7910a000 64K rw— [ anon ]
0000003e79600000 84K r-x– /lib64/libnsl-2.3.4.so
0000003e79615000 1020K —– /lib64/libnsl-2.3.4.so
0000003e79714000 4K r—- /lib64/libnsl-2.3.4.so
0000003e79715000 4K rw— /lib64/libnsl-2.3.4.so
0000003e79716000 8K rw— [ anon ]
0000007fbfff3000 52K rwx– [ stack ]
ffffffffff600000 4K r-x– [ anon ]
total 2497724K
pmap工具詮釋了程式相關共享記憶體的情況,可以看到許多個16MB的"檔案"對應了Oracle服務程式的空間地址.這是linux上POSIX風格的共享記憶體管理模式,使用"檔案"形式包含共享記憶體段.
藉助於將sga分割成許多塊,Oracle可以很容易地把sga部分記憶體返回給OS,而伺服器程式即可以利用到這些記憶體.(當memory_max_target>1024時,顆粒為16MB,否則為4MB).
接下來我們測試下Oracle是如何釋放部分sga記憶體的.
對比例項啟動前後:
啟動前:
[oracle@rh2 ~]$ ls -l /dev/shm
總用量 0
啟動後:
[oracle@rh2 ~]$ ls -l /dev/shm
總用量 1373704
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_0
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_1
-rw-r—– 1 oracle oinstall 0 9月 27 18:59 ora_T11_327680_10
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_100
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_101
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_102
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_103
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_104
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_105
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_106
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_107
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_108
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_109
-rw-r—– 1 oracle oinstall 0 9月 27 18:59 ora_T11_327680_11
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_110
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_111
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_112
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_113
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_114
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_115
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_116
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_117
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_118
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_119
-rw-r—– 1 oracle oinstall 0 9月 27 18:59 ora_T11_327680_12
可以看到啟動後出現的16MB檔案形式共享記憶體中部分大小為0,這些塊被選出當發生記憶體交換時來被’destory’.使用pmap工具仍可以看到該部分影射,而實際上已經被Oracle釋放了.
現在我們加大pga,觀察其交換情況.
SQL> alter system set pga_aggregate_target=1900M ;
System altered.
[oracle@rh2 ~]$ ls -l /dev/shm
總用量 289984
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_0
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_1
-rw-r—– 1 oracle oinstall 0 9月 27 18:59 ora_T11_327680_10
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_100
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_101
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_102
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_103
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_104
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_105
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_106
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_107
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_108
-rw-r—– 1 oracle oinstall 16777216 9月 27 18:59 ora_T11_327680_109
-rw-r—– 1 oracle oinstall 0 9月 27 18:59 ora_T11_327680_11
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_110
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_111
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_112
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_113
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_114
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_115
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_116
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_117
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_118
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_119
-rw-r—– 1 oracle oinstall 0 9月 27 18:59 ora_T11_327680_12
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_120
-rw-r—– 1 oracle oinstall 0 9月 27 19:09 ora_T11_327680_121
可以看到出現了大量size為0的"檔案",期許的交換出現了.
可見在11g中Oracle採用了新的共享記憶體實現方式,區別於舊的"一塊式"共享段,更為靈活了.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26753337/viewspace-2093707/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將手動記憶體管理變為自動管理記憶體 ORACLE 11G記憶體Oracle
- 記憶體管理篇——實體記憶體的管理記憶體
- oracle 11g自動記憶體管理Oracle記憶體
- 新書《記憶體資料管理》新書記憶體
- 記憶體管理 記憶體管理概述記憶體
- C++記憶體管理:簡易記憶體池的實現C++記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Aerospike的bin記憶體管理--即列記憶體管理ROS記憶體
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- 從記憶體管理策略看Rust獨特性 - Khorchanov記憶體Rust
- oracle 11g 新特性 表壓縮Oracle
- optee記憶體管理和頁表建立記憶體
- oracle 11G 自動記憶體管理設定Oracle記憶體
- 10g、11g記憶體自動管理記憶體
- oracle 11g 自動記憶體管理(其三)Oracle記憶體
- 【記憶體管理】記憶體佈局記憶體
- 記憶體管理記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- 11g新特性--自動儲存管理
- CF的記憶體管理。記憶體
- JavaScript的記憶體管理JavaScript記憶體
- Oracle 11G 記憶體內部管理全攻略Oracle記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- 11g記憶體的設定記憶體
- 分析String在記憶體中的表現記憶體
- memory儲存引擎 /MySQL記憶體表的特性與使用介紹儲存引擎MySql記憶體
- linux記憶體管理(六)- 核心新struct - folioLinux記憶體Struct
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 記憶體表(FDMEMTABLE)記憶體
- Linux 記憶體管理:記憶體對映Linux記憶體
- 【ORACLE新特性】11G 分割槽新特性Oracle
- 記憶體管理-swMemoryGlobal記憶體
- OC記憶體管理記憶體
- iOS 記憶體管理iOS記憶體
- JavaScript 記憶體管理JavaScript記憶體
- MySQL記憶體管理MySql記憶體