使用lock_sga和pre_page_sga参数保证SGA常驻物理内存 .

简介: Lock_sgaLOCK_SGA locks the entire SGA into physical memory.

Lock_sga

LOCK_SGA locks the entire SGA into physical memory. It is usually advisable to lock

the SGA into real (physical) memory, especially if the use of virtual memory would

include storing some of the SGA using disk space. This parameter is ignored on

platforms that do not support it.

Property

Description

Parameter type

Boolean

Default value

false

Modifiable

No

Range of values

true | false

Basic

No

PRE_PAGE_SGA

PRE_PAGE_SGA determines whether Oracle reads the entire SGA into memory at

instance startup. Operating system page table entries are then prebuilt for each page of the SGA. This setting can increase the amount of time necessary for instance startup,

but it is likely to decrease the amount of time necessary for Oracle to reach its full

performance capacity after startup.

PRE_PAGE_SGA can increase the process startup duration, because every process that

starts must access every page in the SGA. The cost of this strategy is fixed; however,

you might simply determine that 20,000 pages must be touched every time a process

starts. This approach can be useful with some applications, but not with all

applications. Overhead can be significant if your system frequently creates and

destroys processes by, for example, continually logging on and logging off.

The advantage that PRE_PAGE_SGA can afford depends on page size. For example, if

the SGA is 80 MB in size and the page size is 4 KB, then 20,000 pages must be touched

to refresh the SGA (80,000/4 = 20,000).

If the system permits you to set a 4 MB page size, then only 20 pages must be touched

to refresh the SGA (80,000/4,000 = 20). The page size is operating system-specific and

generally cannot be changed. Some operating systems, however, have a special

implementation for shared memory whereby you can change the page size.

 

通过修改lock_sga和pre_page_sga参数可以保证SGA不被换出到虚拟内存,进而可以提高SGA的使用效率。

当lock_sga参数设置为TRUE时(默认值是FALSE),可以保证整个SGA被锁定在物理内存中,这样可以防止SGA被换出到虚拟内存。只要设置lock_sga为“TRUE”便可保证SGA被锁定在物理内存中,这里之所以顺便将pre_page_sga参数也设置为“TRUE”,是因为这样可以保证在启动数据库时把整个SGA读入到物理内存中,以便提高系统的效率(虽然会增加系统的启动时间)。

AIX 5L(AIX 4.3.3以上)

1. aix参数v_pinshm=1,默认是0,表示aix将支持pin住内存,设置方法为
#vmo -p -o v_pinshm=1

2. aix参数maxpin%=内存百分比,默认80%,表示支持的最大的可pin住内存的比例,设置方法为
#vmo -p -o maxpin%=90

3. oracle参数LOCK_SGA=true,表示oracle将使用这部分被pin住的内存,其实就是告诉oracle使用另外一种内存调用方法。


HP UNIX

1. root用户,创建权限配置文件/etc/privgroup
# touch /etc/privgroup
# vi /etc/privgroup
添加"dba MLOCK"到该文件

2. root用户,执行命令
# /etc/setprivgrp -f /etc/privgroup

3. oracle用户,修改Oracle参数lock_sga=true


SOLARIS 
(solaris2.6以上)

8i版本以上数据库默认使用隐藏参数 use_ism = true,自动锁定SGA于内存中,不用设置lock_sga。
如果设置 lock_sga =true 使用非 root 用户启动数据库将返回错误。


WINDOWS

不能设置lock_sga=true,可以通过设置pre_page_sga=true,使得数据库启动的时候就把所有内存页装载,这样可能起到一定的作用。

Red Hat5 Linux 2.64bit

1.查看lock_sga和pre_page_sga参数的默认值

代码:
tacsoft> show parameter sga

NAME                     TYPE                 VALUE
---------------            -------------------- -----------------
lock_sga              boolean              FALSE
pre_page_sga    boolean              FALSE
sga_max_size    big integer          5G
sga_target           big integer          5G

重新启动Oracle使spfile的修改生效

代码:

SQL> alter system set lock_sga=true scope=spfile;

System altered.

SQL> alter system set pre_page_sga=true scope=spfile;

System altered.

sql > shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

tacsoft> startup;
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory



失败原因,Linux操作系统对每一个任务在物理内存中能够锁住的最大值做了限制!需要手工进行调整。

5.“ORA-27102”及“Cannot allocate memory”问题处理
1)使用“ulimit -a”命令获得“max locked memory”的默认大小
oracle@sharkdg:[/u01/app/oracle/product/11.2.0/db_1/sqlplus/admin]  ulimit -a
core file size                          (blocks, -c)             0
data seg size                         (kbytes, -d)            unlimited
scheduling priority                (-e)                          0
file size                                    (blocks, -f)             unlimited
pending signals                    (-i)                          139264
max locked memory             (kbytes, -l)             32
max memory size                  (kbytes, -m)          unlimited
open files                                (-n)                        1024
pipe size                                  (512 bytes, -p)     8
POSIX message queues     (bytes, -q)             819200
real-time priority                     (-r)                           0
stack size                                (kbytes, -s)           10240
cpu time                                   (seconds, -t)       unlimited
max user processes             (-u)                        2047
virtual memory                        (kbytes, -v)           unlimited
file locks                                  (-x)                         unlimited

可见,一个任务可以锁住的物理内存最大值是32kbytes,这么小的值根本无法满足我们SGA的大小需求。

2)在root用户下尝试修改,成功。

代码:
[root@tacsoft ~]# ulimit -l unlimited
[root@tacsoft ~]# ulimit -a
core file size                          (blocks, -c)             0
data seg size                         (kbytes, -d)            unlimited
scheduling priority                (-e)                          0
file size                                    (blocks, -f)             unlimited
pending signals                    (-i)                          139264
max locked memory             (kbytes, -l)             unlimited
max memory size                  (kbytes, -m)          unlimited
open files                                (-n)                        1024
pipe size                                  (512 bytes, -p)     8
POSIX message queues     (bytes, -q)             819200
real-time priority                     (-r)                           0
stack size                                (kbytes, -s)           10240
cpu time                                   (seconds, -t)       unlimited
max user processes             (-u)                        2047
virtual memory                        (kbytes, -v)           unlimited
file locks                                  (-x)                         unlimited


调整完操作系统的限制后,我们再次尝试启动数据库。成功!

代码:
[root@tacsoft ~]# su - oracle
ora10g@tacsoft /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Sun Dec 20 22:21:40 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to an idle instance.

NotConnected@> startup;
ORACLE instance started.

Total System Global Area 5368709120 bytes
Fixed Size                  2080320 bytes
Variable Size             905970112 bytes
Database Buffers         4445962240 bytes
Redo Buffers               14696448 bytes
Database mounted.
Database opened.


目录
相关文章
|
7月前
|
存储 算法 关系型数据库
实时计算 Flink版产品使用合集之在Flink Stream API中,可以在任务启动时初始化一些静态的参数并将其存储在内存中吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
134 4
|
1月前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
4月前
|
Python
Python变量的作用域_参数类型_传递过程内存分析
理解Python中的变量作用域、参数类型和参数传递过程,对于编写高效和健壮的代码至关重要。正确的应用这些概念,有助于避免程序中的错误和内存泄漏。通过实践和经验积累,可以更好地理解Python的内存模型,并编写出更优质的代码。
41 2
|
7月前
|
缓存 算法 安全
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(二)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
74 0
|
7月前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
166 0
|
5月前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
126 8
|
3月前
|
Linux Shell 虚拟化
使用LiME收集主机物理内存的内容时发生宕机
使用LiME收集主机物理内存的内容时发生宕机
|
3月前
crash —— 获取物理内存布局信息
crash —— 获取物理内存布局信息
|
5月前
|
开发者 Java
JVM内存问题之top命令的物理内存信息中,'used'和'free','avail Mem'分别表示什么
JVM内存问题之top命令的物理内存信息中,'used'和'free','avail Mem'分别表示什么
|
5月前
|
存储 缓存 监控
Flink内存管理机制及其参数调优
Flink内存管理机制及其参数调优

热门文章

最新文章