看SGA大小
SQL> set line 120
SQL> col program for a20
SQL> set pagesize 25
SQL> select spid, username, program,background from v$process
2 where backgroud = '1';
SPID USERNAME PROGRAM B
------------ --------------- -------------------- -
3028 SYSTEM ORACLE.EXE (PMON) 1
2820 SYSTEM ORACLE.EXE (MMAN) 1
3896 SYSTEM ORACLE.EXE (DBW0) 1
3872 SYSTEM ORACLE.EXE (LGWR) 1
2932 SYSTEM ORACLE.EXE (CKPT) 1
3908 SYSTEM ORACLE.EXE (SMON) 1
SQL> show sga
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
--查询总和
select sum(value)/1024/1024 "total sga md" from v$sga;
free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free)。
- 889572KB(缺省时free的单位为KB)物理内存,即FO[0][0];
- 在这些物理内存中有781744KB(即FO[0][1])被使用了;
- 还用107828KB(即FO[0][2])是可用的;
这里得到第一个等式:
- FO[0][0] = FO[0][1] + FO[0][2]
FO[0][3]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。
FO[0][4]表示被OS buffer住的内存。FO[0][5]表示被OS cache的内存。在有些时候buffer和cache这两个词经常混用:
- A buffer is something that has yet to be "written" to disk.
- A cache is something that has been "read" from the disk and stored for later use.
也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
(2)free输出的第二行是从一个应用程序的角度看系统内存的使用情况。
- 对于FO[1][0],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
- 对于FO[1][1],即+buffers/cache,表示一个应用程序认为系统还有多少内存;
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[1][1]比FO[1][0]会大很多。
这里还用两个等式:
FO[1][0] = FO[0][1] - FO[0][4] - FO[0][5]
FO[1][1] = FO[0][2] +FO[0][4] +FO[0][5]
free命令的所有输出值都是从/proc/meminfo中读出的。
四、linux下/dev/shm tmpfs文件系统
tmpfs是一种虚拟内存文件系统正如这个定义它最大的特点就是它的存储空间在VM里面。
VM(virtual memory),VM是由linux内核里面的vm子系统管理的。
Linux虚拟内存管理机制
linux下面VM的大小由RM(Real Memory)和swap组成,RM的大小就是物理内存的大小,而Swap的大小是由你自己决定的。Swap是通过硬盘虚拟出来的内存空间,因此它的读写速度相对RM(Real Memory)要慢许多。当一个进程申请一定数量的内存时,如内核的vm子系统发现没有足够的RM时,就会把RM里面的一些不常用的数据交换到Swap里面,如果需要重新使用这些数据再把它们从Swap交换到RM里面。 如果你有足够大的物理内存,根本不需要划分Swap分区。
通过上面的说明,VM由RM+Swap两部分组成,因此tmpfs最大的存储空间可达(The size of RM + The size of Swap)。 但是对于tmpfs本身而言,它并不知道自己使用的空间是RM还是Swap,这一切都是由内核的vm子系统管理的。- 默认系统就会加载/dev/shm ,它就是所谓的tmpfs。不同于ramdisk(虚拟磁盘),tmpfs不但可以像虚拟磁盘一样使用您的 RAM,而且可以使用您的交换分区来存储;
- 传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备,您只是安装它,它就可以使用了。
tmpfs有以下优势:
1.动态文件系统的大小。2.tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
3.tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。
通常使用/dev/shm作共享内存(shm_open,shm_unlink)。 /dev/shm是个临时文档系统(tmpfs),能够
从/etc/fstab中mount。因此,支持标准的参数例如"size",能够用来增加或减少在/dev/shm上的tmpfs大小.(默认的,他的大小是系统RAM的一半)
五、oracle11g数据库出现ORA-00845 MEMORY_TARGET not supported on this system 错误
究其原因就是Linux系统的shm的大小比SGA设置的小造成的,举例来说,SGA设置4G,而shm可能只有1G
01、调整sga的大小,这个明显不是我们所希望的
02、调整shm的大小,这样相对简单,具体操作如下
修补方法:
- 修改tmpfs大小至少是系统RAM的一半,至多是RAM+Swap大小
- 修改tmpfs大小超过SGA_TARGET或tmpfs超过MEMORY_TARGET*0.6
- SGA_TARGET+PGA_AGGREGATE_TARGET+OS使用内存<总物理RAM
例如1:Oracle11g RAM由4G降低为1G,数据库启动报错ORA-00845 MEMORY_TARGET not supported on this system
,修改tmpfs使数据库启动
#------------------1.oracle用户启动数据库错误
[oracle@h1 ~]$ echo $ORACLE_SID
bitc
[oracle@h1 ~]$ sqlplus "/as SYSDBA"SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 3 16:06:15 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
SQL> exit
Disconnected#------------------2.已KB单位查看RAM是889572KB,Swap为10239992KB
[root@h1 ~]# free -k
total used free shared buffers cached
Mem: 889572 793308 96264 0 15880 524032
-/+ buffers/cache: 253396 636176
Swap: 10239992 84432 10155560
#------------------3.已KB单位查看tmpfs是
[root@h1 ~]# df -k /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 961900 638400 323500 67% /dev/shm#------------------4.修改tmpfs大小(修改tmpfs大小至少是系统RAM的一半,至多是RAM+Swap大小)
#------------------
[root@h1 ~]# vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=5G 0 0
#--------tmpfs至少是444786KB,至多是11129564KB
#--------444786/0.6<=MEMORY_TARGET<=11129564/0.6,即724MB<=MEMORY_TARGET<=17G
#----------修改tmpfs
tmpfs /dev/shm tmpfs defaults,size=1G 0 0
#------------------5./etc/fstab生效
#------------------(1)Kill关于/dev/shm相关进程
[root@h1 ~]# fuser -km /dev/shm
#------------------(2)重载 /dev/shm
[root@h1 ~]# umount /dev/shm
[root@h1 ~]# mount /dev/shm
[root@h1 ~]# df -k /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 1048576 0 1048576 0% /dev/shm#------------------6.修改数据库实例BITC的初始pfile
#------------------(修改memory_target大小至少是tmpfs/0.6,小于RAM大小)
#--------444786/0.6<=MEMORY_TARGET<=11129564/0.6,即724MB<=MEMORY_TARGET<1G
[oracle@h1 ~]$ cd /app/oracle/product/11.2.0/dbhome_2/dbs
[oracle@h1 dbs]$ ls
hc_bitc.dat initbitc.ora lkBITC orapwtest spfileorcl.ora.bak
hc_DBUA0.dat init.ora lkORCL snapcf_bitc.f spfiletest.ora
hc_orcl.dat initorcl.ora lkTEST spfilebitc.ora
hc_test.dat inittest.ora orapwbitc spfileorcl.ora
[oracle@h1 dbs]$ vi initbitc.ora
memory_target=600000000
#--------memory_target=572MB<724MB,memory_target处于允许状态
#--------数据库可以启动
[oracle@h1 pfile]$ echo $ORACLE_SID
bitc[oracle@h1 dbs]$ sqlplus "/as SYSDBA"
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 3 18:51:50 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.Total System Global Area 501059584 bytes
Fixed Size 2214736 bytes
Variable Size 373294256 bytes
Database Buffers 121634816 bytes
Redo Buffers 3915776 bytes
Database mounted.
Database opened.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options例如2:Oracle11g RAM为1G,memory_target由memory_target加大为1G,
数据库启动报错ORA-00845: MEMORY_TARGET not supported on this system
#----------------------------解决方法
1.修改pfile
2.数据库使用pfile置于mount状态
3.重建spfile
4.重启
[oracle@h1 dbs]$ export ORACLE_SID=test
[oracle@h1 dbs]$ sqlplus "/as SYSDBA"SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 3 19:10:22 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 501059584 bytes
Fixed Size 2214736 bytes
Variable Size 318768304 bytes
Database Buffers 176160768 bytes
Redo Buffers 3915776 bytes
Database mounted.
Database opened.
SQL> SQL> show parameter spfile;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /app/oracle/product/11.2.0/dbh
ome_2/dbs/spfiletest.ora
#----ORACLE 的spfile在$ORACLE_HOME/dbs/spfile[$ORACLE_SID].ora#----ORACLE 的 pfile在$ORACLE_HOME/dbs/init[$ORACLE_SID].ora
SQL> show parameter memory_max_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_max_target big integer 480M
SQL> show parameter memory_targetNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_target big integer 480M
SQL> alter system set memory_max_target=1G scope=spfile;
System altered.
SQL> alter system set memory_target=1G scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
SQL>#----------------------------问题解决
#------------------1.查看或修改pfile
[oracle@h1 dbs]$ cd $ORACLE_HOME/dbs/
[oracle@h1 dbs]$ ls
core_10879 hc_orcl.dat init.ora lkBITC orapwbitc spfilebitc.ora spfiletest.ora.bak
hc_bitc.dat hc_test.dat initorcl.ora lkORCL orapwtest spfileorcl.ora
hc_DBUA0.dat initbitc.ora inittest.ora lkTEST snapcf_bitc.f spfiletest.ora[oracle@h1 dbs]$ cat inittest.ora |grep memory_target
memory_target=500612736#------------------(修改memory_target大小至少是tmpfs/0.6,小于RAM大小)
#------------------2.数据库使用pfile置于mount状态
[oracle@h1 dbs]$ sqlplus "/as SYSDBA"
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 3 20:09:10 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup pfile=$ORACLE_HOME/dbs/inittest.ora mount
ORACLE instance started.Total System Global Area 501059584 bytes
Fixed Size 2214736 bytes
Variable Size 318768304 bytes
Database Buffers 176160768 bytes
Redo Buffers 3915776 bytes
Database mounted.
#------------------3.重建spfile
SQL> create spfile from pfile;
File created.
#------------------4.重启数据库
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.Total System Global Area 501059584 bytes
Fixed Size 2214736 bytes
Variable Size 318768304 bytes
Database Buffers 176160768 bytes
Redo Buffers 3915776 bytes
Database mounted.
Database opened.
SQL>
六、Oracle内存参数
#------------------1.实例名
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
test#------------------2.memory_target及memory_max_target
SQL> show parameter memory_target;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_target big integer 480M
SQL> show parameter memory_max_target;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_max_target big integer 480M#------------------3.SGA
SQL> show sgaTotal System Global Area 501059584 bytes
Fixed Size 2214736 bytes
Variable Size 331351216 bytes
Database Buffers 163577856 bytes
Redo Buffers 3915776 bytes
SQL> select * from v$sga;NAME VALUE
-------------------- ----------
Fixed Size 2214736
Variable Size 331351216
Database Buffers 163577856
Redo Buffers 3915776SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 480M
sga_target big integer 0#------------------4.PGA
SQL> show parameter pgaNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0
SQL>