Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2897365
  • 博文数量: 454
  • 博客积分: 4860
  • 博客等级: 上校
  • 技术积分: 6375
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 10:08
个人简介

10年工作经验,专研网站运维。

文章分类

全部博文(454)

文章存档

2017年(11)

2016年(13)

2015年(47)

2014年(36)

2013年(147)

2012年(64)

2011年(136)

分类: Oracle

2013-05-13 15:30:56

                                   Oracle 11g 内存管理

概述:
当server的内存升级或服务器迁移后,会发生内存的改变,就会涉及到一下知识:
1/ 现在Oracle Database 11g引入了自动内存管理,这个公式得以进一步简化:

  MEMORY_TARGET <= MEMORY_MAX_TARGET <= *80%

2/ 内存规划:
2.1/ show current DB memory:
SQL> show parameters memory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 0
memory_target                        big integer 0
shared_memory_address                integer     0
SQL> show parameters sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 1536M
sga_target                           big integer 1536M
SQL> show parameters pga;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 1G
SQL>

2.2/ 总结数据库的内存规划:
system memory: 4G
memory=0
sga=4G*80%*80%=2.56G
pga=4G*80%*20%=640M
sga + pga = memory < system memory * 80%
内存划分是很灵活的,只要系统的内存足够用,其余的内存都可以给oracle。
pga给1G is ok的。sga给多一点是可以的,比如3G。
memory 设置成0. 代表由oracle自动分配内存。
只要按照如下方法配置内存就没问题:
memory=0
sga=3G
pga=1G
system memory=5G
3/ 修改方法:
注意:修改之前备份配置文件vim /u01/db/tech_st/11.1.0/dbs/initebsr12.ora

方法一:
SQL>alter system set sga_max_size=2000m scope=both;
SQL>alter system set sga_target=2000m scope=both;
SQL>alter system set pga_aggregate_target=500m scope=both;
SQL> alter system set memory_target = 512M scope=both;
SQL>alter system set memory_max_target =1024Mscope=both;
exit
重启数据库
方法二:
vim /u01/db/tech_st/11.1.0/dbs/initebsr12.ora
重启数据库

4/  常见错误:
在有些场合,如果你使用自动内存管理给实例分配内存,可能会遇到下列错误,比如linux上:


SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
这是因为/dev/shm没有设置正确的值,确保这个值至少等于sga_max_size参数值。
[oracle@node1 dbs]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       14G  9.4G  3.2G  75% /
/dev/sda1              99M   14M   81M  15% /boot
none                  2.0G  702M  1.4G  35% /dev/shm
可以看到该值为2G。
可以通过/etc/fstab来更改该值:
默认情况下该文件相关内容如下:
[oracle@node1 dbs]$ cat /etc/fstab |grep shm
none                    /dev/shm                tmpfs   defaults       0 0
可以将该值修改为如下:
none                    /dev/shm                tmpfs   defaults,size=2G        0 0
然后重启系统即可解决问题。

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