`

【转】Oracle 使用lock_sga和pre_page_sga参数保证SGA常驻物理内存

 
阅读更多
http://blog.csdn.net/laoshangxyc/article/details/8529381



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

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

修改过程如下:

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


2.注意:两个参数都是静态参数。确认之
代码:
tacsoft> alter system set lock_sga=true;
alter system set lock_sga=true
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


tacsoft> alter system set pre_page_sga=true;
alter system set pre_page_sga=true
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


3.使用“scope=spfile”选项修改之,成功
代码:
tacsoft> alter system set lock_sga=true scope=spfile;

System altered.

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

System altered.


4.重新启动Oracle使spfile的修改生效
代码:
tacsoft> 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”的默认大小
代码:
ora10g@tacsoft /home/oracle$ 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) 266239
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
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) 16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


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

2)将其修改为无限大
(1)oracle用户是无法完成这个修改任务的
代码:
ora10g@tacsoft /home/oracle$ ulimit -l unlimited
-bash: ulimit: max locked memory: cannot modify limit: Operation not permitted


(2)切换到root用户
代码:
ora10g@tacsoft /home/oracle$ su - root
Password:


(3)在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) 266239
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


6.调整完操作系统的限制后,我们再次尝试启动数据库。成功!
代码:
[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.lock_sga和pre_page_sga参数在Oracle 10gR2官方文档中的描述,供参考。

LOCK_SGAProperty Description
Parameter type Boolean
Default value false
Modifiable No
Range of values true | false
Basic No


LOCK_SGAlocks 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.


PRE_PAGE_SGAProperty Description
Parameter type Boolean
Default value false
Modifiable No
Range of values true | false


PRE_PAGE_SGAdetermines 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.

Note:

This setting does not prevent your operating system from paging or swapping the SGA after it is initially read into memory.
PRE_PAGE_SGAcan 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 thatPRE_PAGE_SGAcan 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参数值为“TRUE”可以有效的将整个SGA锁定在物理内存中,这样可以有效的提高系统的性能,推荐酌情进行调整。
注意:不同的操作系统对这lock_sga参数的支持情况是不同的,如果操作系统不支持这种锁定,lock_sga参数将被忽略。

以上方法把 max locked memory       改成(kbytes, -l) unlimited,我觉得不好,我只要把oracle相关进程设成无限大就行了。

用以下方法解决

传说】上海0762) 上午 11:49:38
soft hard
【话唠】长沙-运维-Finy(97074667) 上午 11:52:40
可以针对某个进程?  ulimit 里面最多就看到对用户限制。。
【吐槽】孤行-南京(1422207501) 上午 11:52:51
那我搞错了么?
【吐槽】孤行7501) 上午 11:53:02
或者说是对用户的限制?
【吐槽】孤7501) 上午 11:53:11
因为oracle进程必须是oracle用户访问的。
【吐槽】孤207501) 上午 11:53:18
我会限制住的。
【话唠】长074667) 上午 11:54:30
oracle       soft    nproc     unlimited
【话唠】74667) 上午 11:54:52
在/etc/security/limits.d/90-nproc.conf 文件下面加
【吐槽501) 上午 11:55:06
哦。
【话唠】长074667) 上午 11:55:24
然后关闭oracle 再开启才生效
【吐槽】207501) 上午 11:55:28
谢谢。
【1) 上午 11:55:33
恩,要重启。
上午 11:56:30
看生效了没, cat /proc/oracle进程id/limits 看
上午 11:57:45
@长沙-运维-Finy 90.
上午 11:58:05
有。我看到了。
分享到:
评论

相关推荐

    在linux平台用hugetlbfs模拟lock_sga

    在Linux平台上,Oracle数据库在某些情况下需要使用`lock_sga`参数来确保SGA(System Global Area)的内存被锁定在物理内存中,避免频繁的页面交换提高性能。然而,Linux内核并不直接支持`lock_sga`。当设置`lock_sga...

    ORACLE 内存调整(SGA和PGA)

    SGA+PGA最好不要超过总内存的70%,内存详细调整方案,供学习。

    Oracle_SGA

    它可以动态调整`buffer cache`、`shared pool`、`large pool`、`java pool`和`streams pool`等参数的大小,但不能让这些组件的总大小超过`SGA_MAX_SIZE`的值。如果未指定`SGA_MAX_SIZE`,则Oracle会根据各组件的指定...

    oracle改sga导致数据库启动异常处理办法

    SGA 参数是 Oracle 数据库中最重要的参数之一,它控制着数据库的内存分配和性能。如果 SGA 参数设置不当,可能会导致数据库启动异常、性能下降或崩溃。 二、数据库启动异常的原因 当调整 SGA 参数后,数据库可能...

    详解Oracle数据库的db_cache_size和granule_size

    - `GRANULE_SIZE`参数定义了Oracle数据库分配虚拟内存的基本单位,影响内存分配的粒度。 - 正确配置这两个参数对于提高Oracle数据库性能至关重要,特别是在处理大量数据的情况下。 - 需要注意的是,不同的Oracle版本...

    SGA.rar_SGA_SGA MATLAB_遗传算法 可_遗传算法matlab

    《SGA.rar_SGA_SGA MATLAB_遗传算法 可_遗传算法matlab》是一个关于遗传算法(Genetic Algorithm, GA)在MATLAB环境中的实现压缩包。遗传算法是一种基于生物进化理论的全局优化方法,广泛应用于工程、科学计算、机器...

    oracle_sga内存详解.txt

    oracle11g10g安装备份基础维护

    oracle学习(内存参数设置)

    SGA_MAX_SIZE和SGA_TARGET是两个重要的参数,SGA_MAX_SIZE指定了SGA可以使用的最大内存大小,而SGA_TARGET指定了SGA可以使用的最大内存大小,并可以自动调节各个区域的大小,使之达到系统性能最佳状态的最合理大小。...

    oracle sga设置

    - **SGA_MAX_SIZE**:设定SGA的最大值,这个值不能超过操作系统可用的物理内存。 - **SGA_TARGET**:设定SGA的目标大小,当设置该参数时,Oracle将自动调整SGA的大小,以达到指定的目标值。 - **DB_CACHE_SIZE**:...

    Oracle 9i 调整SGA性能

    SGA是Oracle数据库的核心组成部分,它是一个共享内存区域,用于存储数据库运行时的各种信息。主要包括以下几个关键组件: 1. 数据缓冲区缓存(Data Buffer Cache):这是存储表和索引块的地方,通过减少磁盘I/O来...

    oracle中的SGA和PGA

    此外,工具如Oracle Memory Advisor可以帮助分析SGA和PGA的使用情况,提供内存调整建议。了解源码层面的知识则有助于更深入地理解这些内存区域的工作原理,从而更好地进行问题诊断和性能优化。 总之,Oracle的SGA和...

    Oracle SGA

    这一特性允许数据库根据实际的处理需求动态地调整内存区域的大小,如sort_area_size、pga_aggregate_target、large_pool_size、sga_max_size和db_cache_size。这些内存区域分别服务于排序操作、PL/SQL程序执行、大...

    更改ORACLE SGA的详细步骤

    然后,查询 SGA 相关参数,特别是 `sga_max_size` 和 `sga_target`: ``` Show parameter sga; ``` 2. **更改 SGA 设置**: - 若要更改 `sga_max_size`(最大可分配的 SGA 大小),执行以下命令: ``` alter...

    SGA.rar_SGA fortran_sga fortr_实数编码 遗传算法_遗传算法 fortran

    通过调整遗传算法的参数和优化策略,可以提高算法的性能和求解效率。学习和理解这个Fortran实现的实数编码遗传算法,对于理解和掌握遗传算法的基本原理及其实现技巧具有重要意义。同时,Fortran的高效特性使得该算法...

    2009Sep_SGA__suspension_FalphaSMC_skycontrol_smc_利用smc控制_kitchen

    标题中的“2009Sep_SGA__suspension_FalphaSMC_skycontrol_smc_利用smc控制_kitchen”暗示了这是一个关于2009年9月期间的项目,涉及SGA(可能是System Global Area,Oracle数据库的一个组件)、FalphaSMC(可能是一...

    oracle SGA PGA UGA 内存

    Oracle数据库的内存结构主要包括三个关键部分:System Global Area (SGA), Program Global Area (PGA), 和 User Global Area (UGA)。这些区域都是用于存储和处理数据库操作的数据和信息。 1. **System Global Area ...

Global site tag (gtag.js) - Google Analytics