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

[root@localhost ~]# ipcs -sa

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


SQL> startup
ORACLE instance started.

Total System Global Area  289406976 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

修改内核参数,

[root@localhost ~]# 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


[root@localhost ~]# 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        104857600  19                     
0x00000000 458755     oracle    640        104857600  19                     
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,这样设置合理吗?
标签: 暂无标签
zhaojingyuo

写了 14 篇文章,拥有财富 332,被 3 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

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

使用道具

P4 | 发表于 2012-6-29 12:49:15
和我遇到的问题类似,学习了
回复

使用道具

P4 | 发表于 2012-6-29 22:26:59
感谢老师,这下终于理解透彻了!
回复

使用道具

P4 | 发表于 2012-7-26 10:48:08
{:soso_e182:},学习了!!!
回复

使用道具

P4 | 发表于 2012-9-15 13:39:47
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈