Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2796921
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2011-08-14 11:30:41

ORACLE进程的内存结构解析

     每个ORACLE进程从上低地址到高地址,分别由进程序的执行体,PGA SESSION HEAP,,SGA,共享库,空闲空间和STACK区组成.32位上的LINUX上的,一般都是由08048000处开始加载ORACLE程序的执行体,0X20000000处开始加载FIXSGA,REDO BUFFER操作系统的特殊区域直到0X20800000,一般大小为8M左右.REDO BUFFER0X20147000开始加载.那么FIXSGA大小就可以通过0X20147000-0X20000000算出来.共享内存再以粒度的方式被分割.

Variable Size就从20800000处开始载,根据具体的ORACLE配置,可能大小不一样.可以通过ORADEBUG IPC来查看具体的共享内存情况,OS级别上可以通过PMAP <进程ID>来查看某个进程的内存分布.可以通过SQLPLUSSHOW SGA或者是查看V$SGAX$KSMSD来得到各个区域的大小信息.

10.1g开始引入X$KSMGE,可以反映当前的内存的GRANULE分配情况.通过以下查询SQL> select grantype,granstate,count(gransize)

  2  from x$ksmge

  3  where granstate<>'INVALID'

  4  group by grantype,granstate;

7BUFFER POOL;1,SHARD POOL

在某些情况内存可能并没有被用完(PRE_PAGE_SGA),比如我们分本配了32G,实际只使用了20G就可以满足需求了,通过这个查询就可以找出当前合适的内存大小.以防止不必要的浪费.

阅读(2683) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~