oracle内存分配机制及查看oracle内存使用率
Oracle内存组件中,有一个叫做SGA的部分,这个部分如果设置了7G,启动之后,立马从内存中分割出7G,哪怕当前Oracle只用了100M。这7G也是不可以被其他任何机制回收和利用的。
而且Oracle是典型的耗内存应用,SGA组件里的BufferCache放的是真实的用户数据。可以避免分散的磁盘操作,而直接在SGA中完成对数据库的修改加工。
SGA是主要占内存的组件。其他PGA等等为用多少分配多少的基本原则。会发生回收机制的。
除此之外,你可以通过show parameter sga查看SGA的具体设置。 select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctused from
(select "SGA" name,(select sum(value/1024/1024) from v$sga) total,
(select sum(bytes/1024/1024) from v$sgastat where name="free memory")free from dual)
union
select name,total,round(used,2)used,round(total-used,2)free,round(used/total*100,2)pctused from (
select "PGA" name,(select value/1024/1024 total from v$pgastat where name="aggregate PGA target parameter")total,
(select value/1024/1024 used from v$pgastat where name="total PGA allocated")used from dual)
union
select name,round(total,2) total,round((total-free),2) used,round(free,2) free,round((total-free)/total*100,2) pctused from (
select "Shared pool" name,(select sum(bytes/1024/1024) from v$sgastat where pool="shared pool")total,
(select bytes/1024/1024 from v$sgastat where name="free memory" and pool="shared pool") free from dual)
union
select name,round(total,2)total,round(total-free,2) used,round(free,2) free,round((total-free)/total,2) pctused from (
select "Default pool" name,( select a.cnum_repl*(select value from v$parameter where name="db_block_size")/1024/1024 total from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="DEFAULT" and p.block_size=(select value from v$parameter where name="db_block_size")) total,
(select a.anum_repl*(select value from v$parameter where name="db_block_size")/1024/1024 free from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="DEFAULT" and p.block_size=(select value from v$parameter where name="db_block_size")) free from dual)
union
select name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from (
select "KEEP pool" name,(select a.cnum_repl*(select value from v$parameter where name="db_block_size")/1024/1024 total from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="KEEP" and p.block_size=(select value from v$parameter where name="db_block_size")) total,
(select a.anum_repl*(select value from v$parameter where name="db_block_size")/1024/1024 free from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="KEEP" and p.block_size=(select value from v$parameter where name="db_block_size")) free from dual)
union
select name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from (
select "RECYCLE pool" name,( select a.cnum_repl*(select value from v$parameter where name="db_block_size")/1024/1024 total from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="RECYCLE" and p.block_size=(select value from v$parameter where name="db_block_size")) total,
(select a.anum_repl*(select value from v$parameter where name="db_block_size")/1024/1024 free from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="RECYCLE" and p.block_size=(select value from v$parameter where name="db_block_size")) free from dual)
union
select name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from(
select "DEFAULT 16K buffer cache" name,(select a.cnum_repl*16/1024 total from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="DEFAULT" and p.block_size=16384) total,
(select a.anum_repl*16/1024 free from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="DEFAULT" and p.block_size=16384) free from dual)
union
select name,nvl(round(total,2),0)total,nvl(round(total-free,2),0) used,nvl(round(free,2),0) free,nvl(round((total-free)/total,2),0) pctused from(
select "DEFAULT 32K buffer cache" name,(select a.cnum_repl*32/1024 total from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="DEFAULT" and p.block_size=32768) total,
(select a.anum_repl*32/1024 free from x$kcbwds a, v$buffer_pool p
where a.set_id=p.LO_SETID and p.name="DEFAULT" and p.block_size=32768) free from dual)
union
select name,total,total-free used,free, (total-free)/total*100 pctused from (
select "Java Pool" name,(select sum(bytes/1024/1024) total from v$sgastat where pool="java pool" group by pool)total,
( select bytes/1024/1024 free from v$sgastat where pool="java pool" and name="free memory")free from dual)
union
select name,Round(total,2),round(total-free,2) used,round(free,2) free, round((total-free)/total*100,2) pctused from (
select "Large Pool" name,(select sum(bytes/1024/1024) total from v$sgastat where pool="large pool" group by pool)total,
( select bytes/1024/1024 free from v$sgastat where pool="large pool" and name="free memory")free from dual)
order by pctused desc;
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: oracle11g 数据库可用内存使用和分配
- 下一篇: oracle 进程使用PGA量的统计