设置MEMORY_TARGET参数

最近在使用OGG时遇到问题,即抽取进程起不来,查看日志后发现跟oracle共享内存池设置有关,顺着这条线索找到了memory_target参数,它几乎是控制oracle内存最原始的参数。

一、参数原理和背景介绍

1.1 memory_max_targethe和memory_target

从oracle 11g 开始提供了memory_max_target、memory_target两个新的管理参数,进一步简化了Oracle的内存管理。 MEMORY_TARGET参数确定了整个Oracle数据库可用用内存值,该参数应该大于等于SGA和PGA之和。注意,这个参数依赖于memory_max_target参数,即memory_target的值不能大于memory_max_target的值,所以要修改memory_target参数的值,首先要设置memory_max_target参数值。

  • 如果设置memory_max_target、memory_target为0,则关闭内存自动管理,内存的管理方式与oracle 10g保持一致。oracle官方强烈建议开始自动内存管理。

  • 如果设置memory_max_target、memory_target为非0,则打开内存自动管理。这时候根据官方建议sga_target、pga_aggregate_target应当设置为0。这个时候如果sga_max_size也设置为了0,那么在数据库启动的时候,sga_max_size会自动设置为memory_target x 0.6,也就是说sga_target最大不会超过memory_target x 0.6,如果sga_max_size设置为了一个数值,那么在数据库启动的时候,sga会分配为memory_target x 0.6,pga会分配为memory_target x 0.4,后期会根据实际使用情况自动进行调整,但是不会超过sga_max_size。

1.2 操作系统共享内存 /dev/shm

memory_target 和 /dev/shm(即tmpfs)有紧密联系,tmpfs的大小制约了memory_target的使用范围。想要修改memory_target 大小,须先用 df -h 命令查看/dev/shm的大小,因为memory_target不能大于/dev/shm的大小。

什么是tmpfs?

tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储。而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统。tmpfs优势是根据需求动态调整大小,速度快。

tmpfs默认情况下会mount到/dev/shm目录下,要使用tmpfs,需要在内核配置时,启用“Virtual memory file system support”。

二、开始设置MEMORY_TARGET

查看当前MEMORY_TARGET

show parameter MEMORY_TARGET
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_target                    big integer 6G

1、设置 /dev/shm 的大小
原因是MEMORY_MAX_TARGET 的设置不能超过 /dev/shm 的大小,否则启动数据库时会报如下错误:

SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

查看当前/dev/shm大小

[root@oracle_db user]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 3.8G     0  3.8G    0% /dev
tmpfs                    8.0G   28K  1.0G    1% /dev/shm
tmpfs                    3.9G   12M  3.8G    1% /run
tmpfs                    3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   87G   24G   64G   27% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    781M     0  781M    0% /run/user/1000

执行如下命令设置 /dev/shm 的大小

mount -o remount,size=8G /dev/shm/

再次查看/dev/shm大小

[root@oracle_db user]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 3.8G     0  3.8G    0% /dev
tmpfs                    8.0G   28K  8.0G    1% /dev/shm
tmpfs                    3.9G   12M  3.8G    1% /run
tmpfs                    3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   87G   24G   64G   27% /
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    781M     0  781M    0% /run/user/1000

2、创建spfile
想要设置MEMORY_MAX_TARGET参数,首先得存在spfile文件。
查看spfile文件

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile    

创建spfile文件

SQL> create spfile from pfile;

File created.

重启数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  763359832 bytes
Fixed Size                  8901208 bytes
Variable Size             494927872 bytes
Database Buffers          251658240 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.

查看spfile文件是否创建

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /opt/oracle/product/19c/dbhome
                                                 _1/dbs/spfileORCL.ora

3、设置MEMORY_MAX_TARGET

SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET = 6G SCOPE=SPFILE;

System altered.

注意:这一步设置成功后,必须重启数据库,该设置才会生效,生效后才能设置MEMORY_TARGET。
重启数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 4294963368 bytes
Fixed Size          8941736 bytes
Variable Size        4148166656 bytes
Database Buffers      130023424 bytes
Redo Buffers            7831552 bytes
Database mounted.
Database opened.

4、设置MEMORY_TARGET

SQL> ALTER SYSTEM SET MEMORY_TARGET = 6G ;

System altered.

完。

你可能感兴趣的:(设置MEMORY_TARGET参数)