zhaojingyuo 发表于 2012-6-29 00:38:23

ipcs -sa查出的共享内存片大小为什么大于sga_target?

# ipcs -sa

------ Shared Memory Segments --------
key      shmid      owner      perms      bytes      nattch   status      
0x00000000 32768      gdm       600      393216   2          dest         
0x7f231aac 360449   oracle    640      29360128015   


SQL> startup
ORACLE instance started.

Total System Global Area289406976 bytes
Fixed Size                        1219016 bytes
Variable Size                  92276280 bytes
Database Buffers                192937984 bytes
Redo Buffers                   2973696 bytes
Database mounted.
Database opened.
SQL> show parameter sga

NAME                                     TYPE       VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean       FALSE
pre_page_sga                             boolean       FALSE
sga_max_size                             big integer 276M
sga_target                             big integer 276M


shutdown

修改内核参数,

# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.shmall = 2097152
kernel.shmmax = 104857600            (之前为kernel.shmmax = 2147483648)
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144

startup


# ipcs -sa

可以看到内存分片

------ Shared Memory Segments --------
key      shmid      owner      perms      bytes      nattch   status      
0x00000000 32768      gdm       600      393216   2          dest         
0x00000000 393217   oracle    640       4194304    19                     
0x00000000 425986   oracle    640      10485760019                     
0x00000000 458755   oracle    640      10485760019                     
0x7f231aac 491524   oracle    640      79691776   19                     

------ Semaphore Arrays --------
key      semid      owner      perms      nsems   
0xb94bd744 753664   oracle    640      154      

------ Message Queues --------
key      msqid      owner      perms      used-bytes   messages   


104857600bytes*2+79691776bytes=289406976bytes,这个大小正好等于SGA的大小276M
1、请问多出来的共享内存段4194304是什么呢?
2、shmall这个参数应该如何设置呢?我看网上很多资料说这个参数是shmmax(单个共享内存段的最大值)的大小除以共享内存页大小(linux下共享内存页为4K),如果是shmmax=16G,那么shmall=16*1024*1024/4=4194304,这样设置合理吗?

oraunix 发表于 2012-6-29 09:29:55

这么大的共享内存段总得有一个内存管理数据结构吧,例如分页地址映像等内存结构。
你的shmall的计算方式是对的,虽然Oracle为SGA分配了一个大的内存段,看起来是连续的,其实这也是通过地址映像实现的连续,真实的内存段是通过一个个4K的空间组成的。

deny 发表于 2012-6-29 12:49:15

和我遇到的问题类似,学习了

zhaojingyuo 发表于 2012-6-29 22:26:59

感谢老师,这下终于理解透彻了!

lvtzlb 发表于 2012-7-26 10:48:08

{:soso_e182:},学习了!!!

vipfbi123 发表于 2012-9-15 13:39:47

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
页: [1]
查看完整版本: ipcs -sa查出的共享内存片大小为什么大于sga_target?