ORACLE SGA與共享內聯絡
SGA與共享記憶體
SGA的設定在linux/unix上和一個作業系統核心引數有關,這個引數是shmmax.
不同的作業系統中這個引數據設定的地方一樣.在solaris上,這個引數是由
/etc/system檔案中的shmsys:shminfo_shmmax來定義的.在linux上,該引數
由/proc/sys/kernel/shmmax引數定義.
shmmax核心引數的作用是系統允許的單個共享記憶體段的最大值.如果該引數
設定小於oracle sga的大小,那麼sga仍然可以建立成功,但是會被分配成多
個共享記憶體段.通常建議透過調整shmmax的大小來使用sga限制在一個共享
記憶體段.
在windows系統中,由於系統採用多執行緒伺服器(實際上所有的oracle server procees
都是一個程式中的執行緒),所以不存在共享記憶體的問題.無需進行特殊設定.
以32位linux平臺為例,來看shmmax引數於資料庫的影響.linux上該引數據的預設值
一般是32M
[root@jingyong ~]# more /proc/sys/kernel/shmmax
33554432
作業系統的版本
[root@jingyong ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
透過ipcs命令可以檢視在shmmax引數為預設情況下共享記憶體的分配情況.
可以看到oracle分配了多個共享記憶體段來滿足sga的設定要求:
[root@jingyong ~]# ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x289516a4 32768 oracle 640 33554432 18
0x289516a4 32778 oracle 640 33554432 18
0x289516a4 32779 oracle 640 33554432 18
0x289516a4 32781 oracle 640 33554432 18
0x289516a4 32784 oracle 640 33554432 18
0x289516a4 32784 oracle 640 4194304 18
0x00000000 65537 gdm 600 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
0x0bbc1610 98304 oracle 640 154
------ Message Queues --------
key msqid owner perms used-bytes messages
從上面可以看到sga為160M(171966464位元組)被分成了6個共享記憶體段.
對於每一個後臺程式,使用pmap工具可以看到每個共享記憶體段的地址空間:
[root@jingyong ~]# ps -ef|grep dbw
oracle 2220 1 0 Dec26 ? 00:00:02 ora_dbw0_jingyong
root 3390 3309 0 02:39 pts/2 00:00:00 grep dbw
[root@jingyong ~]# pmap 2220
2220: ora_dbw0_jingyong
00110000 344K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libocrutl10.so
00166000 16K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libocrutl10.so
0016a000 4K rwx-- [ anon ]
0016b000 1904K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libnnz10.so
00347000 152K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libnnz10.so
0036d000 432K rwx-- [ anon ]
003d9000 36K r-x-- /lib/libnss_files-2.5.so
003e2000 4K r-x-- /lib/libnss_files-2.5.so
003e3000 4K rwx-- /lib/libnss_files-2.5.so
00458000 4K r-x-- [ anon ]
00459000 1276K r-x-- /lib/libc-2.5.so
00598000 4K --x-- /lib/libc-2.5.so
00599000 8K r-x-- /lib/libc-2.5.so
0059b000 4K rwx-- /lib/libc-2.5.so
0059c000 12K rwx-- [ anon ]
005b4000 436K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libocr10.so
00621000 4K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libocr10.so
00622000 1032K rwx-- [ anon ]
00839000 4K rwx-- [ anon ]
0089f000 880K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libhasgen10.so
0097b000 20K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libhasgen10.so
00980000 12K rwx-- [ anon ]
0098f000 4K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libskgxn2.so
00990000 4K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libskgxn2.so
009fd000 36K rwx-- [ anon ]
00a5a000 4K rwx-- [ anon ]
00ab7000 128K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libskgxp10.so
00ad7000 8K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libskgxp10.so
00b01000 76K r-x-- /lib/libnsl-2.5.so
00b14000 4K r-x-- /lib/libnsl-2.5.so
00b15000 4K rwx-- /lib/libnsl-2.5.so
00b16000 8K rwx-- [ anon ]
00b36000 88K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libdbcfg10.so
00b4c000 8K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libdbcfg10.so
00bfd000 104K r-x-- /lib/ld-2.5.so
00c17000 4K r-x-- /lib/ld-2.5.so
00c18000 4K rwx-- /lib/ld-2.5.so
00c1b000 4K r-x-- /usr/lib/libaio.so.1.0.1
00c1c000 4K rwx-- /usr/lib/libaio.so.1.0.1
00cbc000 32K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libclsra10.so
00cc4000 4K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libclsra10.so
00d67000 148K r-x-- /lib/libm-2.5.so
00d8c000 4K r-x-- /lib/libm-2.5.so
00d8d000 4K rwx-- /lib/libm-2.5.so
00d90000 8K r-x-- /lib/libdl-2.5.so
00d92000 4K r-x-- /lib/libdl-2.5.so
00d93000 4K rwx-- /lib/libdl-2.5.so
00d96000 76K r-x-- /lib/libpthread-2.5.so
00da9000 4K r-x-- /lib/libpthread-2.5.so
00daa000 4K rwx-- /lib/libpthread-2.5.so
00dab000 8K rwx-- [ anon ]
00e33000 268K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libocrb10.so
00e76000 4K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libocrb10.so
00ee0000 4K rwx-- [ anon ]
00f07000 4K rwxs- /u01/app/oracle/product/10.2.0/db/dbs/hc_jingyong.dat
00f76000 4K rwx-- [ anon ]
00f77000 7028K r-x-- /u01/app/oracle/product/10.2.0/db/lib/libjox10.so
01654000 260K rwx-- /u01/app/oracle/product/10.2.0/db/lib/libjox10.so
01695000 4K rwx-- [ anon ]
048b1000 1556K rwx-- [ anon ]
08048000 77032K r-x-- /u01/app/oracle/product/10.2.0/db/bin/oracle
0cb82000 324K rwx-- /u01/app/oracle/product/10.2.0/db/bin/oracle
0cbd3000 120K rwx-- [ anon ]
0e505000 456K rwx-- [ anon ]
20000000 167936K rwxs- [ shmid=0x8000 ]
b7e6a000 64K rwx-- /dev/zero
b7e7a000 64K rwx-- /dev/zero
b7e8a000 64K rwx-- /dev/zero
b7e9a000 64K rwx-- /dev/zero
b7eaa000 64K rwx-- /dev/zero
b7eba000 64K rwx-- /dev/zero
b7eca000 64K rwx-- /dev/zero
b7eda000 64K --x-- /dev/zero
b7eea000 24K rwx-- /dev/zero
b7ef0000 64K rwx-- /dev/zero
b7f00000 64K rwx-- /dev/zero
b7f10000 64K rwx-- /dev/zero
b7f20000 128K rwx-- /dev/zero
b7f40000 64K rwx-- /dev/zero
b7f50000 64K rwx-- /dev/zero
b7f60000 40K rwx-- /dev/zero
bffb7000 84K rwx-- [ stack ]
total 263492K
為了避免給sga分配多個共享記憶體段,可以修改shmmax核心引數,使用sga存在於一個
共享記憶體段中,可以透過修改/proc/sys/kernel/shmmax引數可以達到此目的
[root@jingyong ~]# echo 536870912> /proc/sys/kernel/shmmax
[root@jingyong ~]# more /proc/sys/kernel/shmmax
536870912
我修改了512M了,這裡對於shmmax引數的修改不會永久的生效,在系統重新啟動後
會失效.可以透過修改/etc/sysctl.conf檔案來進行永久修改.
在/ect/sysctl.conf檔案中增加以下一行這個更改在系統重啟後仍然生效
kernel.shmmax=536870912
在修改shmmax引數後,重啟資料庫使更改生效
在重新啟動資料庫後我們再來檢視共享記憶體的分配情況:
[root@jingyong ~]# ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x289516a4 32768 oracle 640 171966464 18
0x00000000 65537 gdm 600 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
0x0bbc1610 98304 oracle 640 154
------ Message Queues --------
key msqid owner perms used-bytes messages
可以看到共享記憶體分配只分配了一個共享記憶體段
如果沒有修改shmmax引數,oracle在啟動過程中就會在alert_.log檔案中記錄警告:
Starting ORACLE instance(normal)
Thu Nov 21 16:02;02 2012
WARNING:EINVAL creating segment of size 0x0000000033400000
fix shm parameter in /etc/system or equivalent
這是一個警告提示,是建議修改shmmax引數不是強制
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-751756/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SGA與共享記憶體記憶體
- SGA與共享記憶體2記憶體
- Oracle FailSafe與rac的聯絡與區別OracleAI
- Oracle FailSafe與rac的聯絡與區別(zt)OracleAI
- SGA與共享記憶體的關係記憶體
- 跨程式共享資料,讀取聯絡人資訊
- define與typedef區別與聯絡
- cookie與session的區別與聯絡CookieSession
- Session與Cookie的區別與聯絡SessionCookie
- 同步與阻塞的區別與聯絡
- hive與hbase的聯絡與區別Hive
- onchange與onpropertychange的聯絡與區別!
- BS與CS的聯絡與區別
- CDN含義與DNS的聯絡DNS
- Apache與Tomcat 區別聯絡ApacheTomcat
- JRE與JDK的區別與聯絡JDK
- 自動SGA共享記憶體管理,ASMM,MMAN,sga_target,sga_max_size記憶體ASM
- Session和Cookie的聯絡與區別SessionCookie
- Hive之 hive與hadoop的聯絡HiveHadoop
- servletcontext與application的聯絡ServletContextAPP
- JDK,JRE,JVM區別與聯絡JDKJVM
- servlet/filter/listener/interceptor區別與聯絡ServletFilter
- CGI與Servlet的區別和聯絡Servlet
- Session和Cookie的區別與聯絡SessionCookie
- Kafka與ActiveMQ的區別與聯絡詳解KafkaMQ
- 詳解Kafka與ActiveMQ的區別與聯絡!KafkaMQ
- B/S與C/S的聯絡與區別
- 關於HashSet與TreeSet的區別與聯絡
- typeof、instanceof與isPrototypeOf()的差異與聯絡
- Android與Java ME的區別與聯絡AndroidJava
- COM與DCOM的區別與聯絡 (轉)
- C語言與C++有聯絡,有區別,這些內容要了解!C語言
- 感知器、logistic與svm 區別與聯絡
- 需要oracle工程師、oracle講師的可以聯絡我!Oracle工程師
- Linux和Ubuntu的區別與聯絡LinuxUbuntu
- [轉]Apache與Tomcat 區別及聯絡ApacheTomcat
- WebService REST RPC MQ區別與聯絡WebRESTRPCMQ
- connection session process的聯絡與區別Session