在使用11G的AMM进行内存管理的时候,memory_target的值受到两个值的影响,一个是实际的服务器的物理内存,不能大于服务器的实际物理内存,这个使用free -m就可以很清楚可看到物理内存有多大,还有一个不怎么注意到的是/dev/shm,这个可以使用df -h看到。

 

[root@ASMTEST ~]# free -m   

             total       used       free     shared    buffers     cached

Mem:          4252       2404       1848          0        190       1180

-/+ buffers/cache:       1033       3219

Swap:         2015          0       2015

 

[root@ASMTEST ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_asmtest-lv_root

                       28G   18G  8.1G  69% /

tmpfs                 2.0G  350M  1.7G  18% /dev/shm

/dev/sda1             485M   55M  405M  12% /boot

 

如果要给memory_target分配内存,必须<1848M(free -m的free值)<2.0G(df -h的size值)。如果一不小心设置的值过大会出现ORA-00845: MEMORY_TARGET not supported on this system实例起不来。

 

 

tmpfs默认的大小是RM的一半,假如你的物理内存是1024M,那么tmpfs默认的大小就是512M

一般情况下,是配置的小于物理内存大小的。

tmpfs配置的大小并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是不会被系统回收重新划分的

 

tmpfs的用途

例如:

Oracle 中的Automatic Memory Management特性就使用了/dev/shm。

LINUX中可以把一些程序的临时文件放置在tmpfs中,利用tmpfs比硬盘速度快的特点提升系统性能。

 

 

下面如何解决ORA-00845: MEMORY_TARGET not supported on this system

 

(1)版本是11.2.0.4,启用了自动内存管理AMM,因为memory_target和memeory_max_target都不为0.

Oracle AMM的ORA-00845错误_sed

 

(2)下面是循序渐进不断扩大memory_target的值,直到超过Size值。

[root@ASMTEST ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_asmtest-lv_root

                       28G   18G  8.2G  69% /

tmpfs                1000M  289M  712M  29% /dev/shm

/dev/sda1             485M   55M  405M  12% /boot

 

SQL> alter system set memory_max_target=713m scope=spfile;

 

System altered.

 

SQL> alter system set memory_target=713m scope=spfile;

 

System altered.

 

SQL> startup force;

ORACLE instance started.

 

Total System Global Area  747417600 bytes

Fixed Size     2256992 bytes

Variable Size   499126176 bytes

Database Buffers   243269632 bytes

Redo Buffers     2764800 bytes

Database mounted.

Database opened.

 

 

[root@ASMTEST ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_asmtest-lv_root

                       28G   18G  8.2G  69% /

tmpfs                1000M  193M  808M  20% /dev/shm

/dev/sda1             485M   55M  405M  12% /boot

 

(3)

SQL> alter system set memory_max_target=810m scope=spfile;

 

System altered.

 

SQL> alter system set memory_target=810m scope=spfile;

 

System altered.

 

SQL> startup force;

ORACLE instance started.

 

Total System Global Area  847630336 bytes

Fixed Size     2257960 bytes

Variable Size   549456856 bytes

Database Buffers   293601280 bytes

Redo Buffers     2314240 bytes

Database mounted.

Database opened.

 

[root@ASMTEST ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_asmtest-lv_root

                       28G   18G  8.2G  69% /

tmpfs                1000M  175M  826M  18% /dev/shm

/dev/sda1             485M   55M  405M  12% /boot

 

(4)

SQL> alter system set memory_max_target=1100m scope=spfile;

 

System altered.

 

SQL> alter system set memory_target=1100m scope=spfile;

 

System altered.

 

 

SQL> startup force;

ORA-00845: MEMORY_TARGET not supported on this system

 

[root@ASMTEST ~]# free -m

             total       used       free     shared    buffers     cached

Mem:          4252       1613       2639          0        179        884

-/+ buffers/cache:        549       3703

Swap:         2015          0       2015

 

这里可以看到实际可以使用的内存还有2639M,但是实例报错 MEMORY_TARGET not supported on this system因为MEMORY_TARGET>(df -h tmpfs的Size值)

 

 

 

 

[root@ASMTEST ~]#vi /etc/fstab

修改后执行mount -o remount /dev/shm 后生效

 

[root@ASMTEST ~]# cat /etc/fstab | grep tmpfs  --这里调整Size为2000M

tmpfs                   /dev/shm                tmpfs   defaults,size=2000m        0 0

 

 

[root@ASMTEST ~]# df -h   --可以看到调整为2G,比 memory_target 1100m的值要大

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_asmtest-lv_root

                       28G   18G  8.1G  69% /

tmpfs                 2.0G   83M  1.9G   5% /dev/shm

/dev/sda1             485M   55M  405M  12% /boot

 

 

SQL> startup force;   --修改过后重启实例,可以正常启动

ORACLE instance started.

 

Total System Global Area 1152450560 bytes

Fixed Size     2252584 bytes

Variable Size   738197720 bytes

Database Buffers   402653184 bytes

Redo Buffers     9347072 bytes

Database mounted.

Database opened.

 

 

最后需要注意的是,如果有多个实例,那么其大小要大于所有实例所需要的内存总和,tmpfs 参数通常被称为操作系统依赖参数