首页 » Oracle » oracle 11g内存自动管理调整

oracle 11g内存自动管理调整

 

SGA主要由:

数据高速缓冲区(Database Buffer Cache)

共享池(Shared Pool)

重做日志缓冲区(Redo Log Buffer)

大型池(Large Pool)

Java池(Java Pool)

流池(StreamsPool)和其他结构(如固定SGA、锁管理等)组成

常用查看命令:

sqlplus / as sysdba

show parameter sga;

show sga;

show parameter target

开启内存自动管理:

SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET = 1024M SCOPE = SPFILE; 
SQL> ALTER SYSTEM SET MEMORY_TARGET = 1024M SCOPE = SPFILE; 
SQL> ALTER SYSTEM SET SGA_TARGET =0 SCOPE = SPFILE; 
SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0 SCOPE = SPFILE ;
  • MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,这个参数是动态的,因此提供给Oracle的内存总量是可以动态增大,也可以动态减小的。它不能超过MEMORY_MAX_TARGET参数设置的大小。默认值是0。
  • MEMORY_MAX_TARGET:这个参数定义了MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET值,默认等于MEMORY_TARGET的值。使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。
  • SGA_TARGET、PGA_AGGREGATE_TARGET都有设置为0,才能开启自动内存管理

参考:https://blog.csdn.net/ly7472712/article/details/116239388

https://blog.51cto.com/u_14286115/5179270

https://www.modb.pro/db/122180

https://docs.oracle.com/applications/help/zh_CN/enterprise-performance-management/11.2/HFMAM/sga_sizing_sga_target.htm

系统参数:

kernel.shmall = 2097152
kernel.shmmax = 1054472192
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128

复制

其含义分别如下所示:

(1)kernel.shmall = 2097152 #该参数是控制共享内存页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。如果一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB = 16777216KB/4KB = 4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。简言之,该参数的值始终应该至少为:ceil(SHMMAX/PAGE_SIZE)。这个值太小有可能导致数据库启动报错(ORA-27102: out of memory)。

(2)kernel.shmmax = 1054472192 #定义一个内存段最大可以分配的内存空间,单位为字节。如果定义太小,那么会导致启动实例失败,或者SGA就会被分配到多个共享内存段。那么内存中的指针连接会给系统带来一定的开销,从而降低系统性能。这个值的设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,最大值可以设置成大于或等于实际的物理内存。如果kernel.shmmax为100M,SGA_MAX_SIZE为500M,那么启动Oracle实例至少会分配5个共享内存段;如果设置kernel.shmmax为2G,SGA_MAX_SIZE为500M,那么启动Oracle实例只需要分配1个共享内存段。

(3)kernel.shmmni = 4096 #设置系统级最大共享内存段数量,该参数的默认值是4096。这一数值已经足够,通常不需要更改。

(4)kernel.sem = 250 32000 100 128 #信号灯的相关配置,信号灯semaphores是进程或线程间访问共享内存时提供同步的计数器。可以通过命令“cat /proc/sys/kernel/sem”来查看当前信号灯的参数配置,如下所示:

[root@edsir4p1 ~]# cat /proc/sys/kernel/sem
250     32000   100     128

复制

其4个值的含义分别如下:

① 250表示SEMMSL,设置每个信号灯组中信号灯最大数量,推荐的最小值是250。对于系统中存在大量并发连接的系统,推荐将这个值设置为PROCESSES初始化参数加10。

② 32000表示SEMMNS,设置系统中信号灯的最大数量。操作系统在分配信号灯时不会超过LEAST(SEMMNS,SEMMSL*SEMMNI)。事实上,如果SEMMNS的值超过了SEMMSL*SEMMNI是非法的,因此推荐SEMMNS的值就设置为SEMMSL*SEMMNI。Oracle推荐SEMMNS的设置不小于32000。

③ 100表示SEMOPM,设置每次系统调用可以同时执行的最大信号灯操作的数量。由于一个信号灯组最多拥有SEMMSL个信号灯,因此有推荐将SEMOPM设置为SEMMSL的值。Oracle验证的10.2和11.1的SEMOPM的配置为100。

④ 128表示SEMMNI,设置系统中信号灯组的最大数量。Oracle10g和11g的推荐值为142。

与内核参数查看和修改相关的常用命令如下所示:

l 查看生效的内核参数:more /proc/sys/kernel/shmmax

l 临时生效:echo 3145728 > /proc/sys/kernel/shmmax #临时设置shmmax为3M

l 永久生效,可以修改文件:/etc/sysctl.conf,并使修改参数立即生效:/sbin/sysctl -p

http://blog.itpub.net/26736162/viewspace-2147273/

系统,一般可取值为 4294967295 。 32 位系统对 SGA 大小有限制,所以 SGA 肯定可以包含在单个共享内存段中。

64 位 linux 系统:可取的最大值为物理内存值 -1byte ,建议值为多于物理内存的一半,一般取值大于 SGA_MAX_SIZE 即可,可以取物理内存 -1byte 。

内存为 12G 时,该值为 1210241024*1024-1 = 12884901887

内存为 16G 时,该值为 1610241024*1024-1 = 17179869183

内存为 32G 时,该值为 3210241024*1024-1 = 34359738367

内存为 64G 时,该值为 6410241024*1024-1 = 68719476735

内存为 128G 时,该值为 12810241024*1024-1 = 137438953471

  1. kernel.shmall :

该参数控制可以使用的共享内存的总页数。 Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。

一个共享内存段的最大大小是 16G ,那么需要共享内存页数是 16GB/4KB==4194304 (页),

当内存为 12G 时, kernel.shmall = 3145728

当内存为 16G 时, kernel.shmall = 4194304

当内次为 32G 时, kernel.shmall = 8388608

当内存为 64G 时, kernel.shmall = 16777216

当内存为 128G 时, kernel.shmall = 33554432
————————————————
https://blog.csdn.net/shmily_lsl/article/details/103384366

原文链接:oracle 11g内存自动管理调整,转载请注明来源!

0