Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)

在之前的文章(http://space.itpub.net/17203031/viewspace-774843)中,笔者介绍了如何在Linux 2.6内核中配置HugePage以及AMM与其的不兼容性。由于原理机制的差异,Oracle 11g引入的特性AMM(Automatic Memory Management)与HugePage是不可并存的。

在早期的11g版本中(11.2.0.2之前),AMM与HugePage水火不容。如果操作系统启用了HugePage特性,同时数据库使用AMM的情况下,数据库实例启动是要报错的。Oracle推荐的做法是将AMM关闭,退化到ASMM(Automatic Shared Memory Management)时代。

但是这样的情况还是引起了Oracle官方的一定重视,因为必定是一个不兼容性问题。在11.2.0.2的时候,Oracle新添加入一个参数USE_LARGE_PAGES来缓解问题。

USE_LARGE_PAGES最初是为了应对Bug 9195408而引入的,这个Bug的起因是当HugePage不足时候,Oracle一些的行为方式问题。在11.2.0.2版本上,如果数据库服务器上没有空闲的HugePage使用,只有一些small pages使用的时候,会导致ORA-4030错误。

在11.2.0.3的时候,这个参数让Oracle的行为更加灵活。如果出现HugePage分配不足的情况,SGA是可以使用那些small pages的。这就保证了极端情况下数据库是可以正常运行的。

USE_LARGE_PAGES参数取值有三个,分别为True、Only和False。下面分别进行测试实验。

1、基础环境实验

当前数据库版本为11.2.0.3。

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE    11.2.0.3.0      Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 – Production

此时Oracle选择ASMM,对应参数USE_LARGE_PAGES为TRUE。

SQL> show parameter use_large

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

use_large_pages                      string      TRUE

SQL>

[[email protected] ~]# grep HugePage /proc/meminfo

HugePages_Total:    67

HugePages_Free:      1

HugePages_Rsvd:      0

SQL> show parameter target

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

archive_lag_target                   integer     0

db_flashback_retention_target        integer     1440

fast_start_io_target                 integer     0

fast_start_mttr_target               integer     0

memory_max_target                    big integer 0

memory_target                        big integer 0

parallel_servers_target              integer     16

pga_aggregate_target                 big integer 100M

sga_target                           big integer 260M

此时:当我们使用ASMM,参数USE_LARGE_PAGES为True的时候,数据库启动运行没有问题,系统内存中HugePage被使用。

2、参数取值True情况下,AMM实验

我们保持USE_LARGE_PAGES参数不变的情况下,由ASMM切换到AMM。

SQL> alter system set memory_max_target=360M scope=spfile;

System altered.

SQL> alter system set memory_target=360M scope=spfile;

System altered.

SQL> alter system set sga_target=0 scope=spfile;

System altered.

SQL> alter system set sga_max_size=0 scope=spfile;

System altered.

SQL> alter system set pga_aggregate_target=0 scope=spfile;

System altered.

重新启动,如果按照无此参数的行为,Oracle应该启动报错。

SQL> startup force

ORACLE instance started.

Total System Global Area  267833344 bytes

Fixed Size                  1344312 bytes

Variable Size             176164040 bytes

Database Buffers           88080384 bytes

Redo Buffers                2244608 bytes

Database mounted.

Database opened.

启动成功,我们查看HugePage使用情况。

[[email protected] ~]# grep HugePage /proc/meminfo

HugePages_Total:    67

HugePages_Free:     67

HugePages_Rsvd:      0

[[email protected] ~]# ipcs -m

------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status

0x00000000 589824     oracle    640        4096       0

0x00000000 622593     oracle    640        4096       0

0x01606d30 655362     oracle    640        4096       0

HugePage功能启动,空闲数等于总数,说明Oracle系统实例并没有使用HugePage功能,而是采用Small Pages。从ipcs –m功能看,AMM也启用。

SQL> show parameter target

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

archive_lag_target                   integer     0

db_flashback_retention_target        integer     1440

fast_start_io_target                 integer     0

fast_start_mttr_target               integer     0

memory_max_target                    big integer 360M

memory_target                        big integer 360M

parallel_servers_target              integer     16

pga_aggregate_target                 big integer 0

sga_target                           big integer 0

这就说明参数USE_LARGE_PAGES的特性功能,当参数取值为True的时候,即使数据库是AMM情况,系统启动是没有问题的。但是Linux HugePage功能启用的情况下,Oracle没有使用。

同样,如果参数为True,那么当系统的HugePage被使用尽,只有small pages的情况下,SGA也会继续运行。此时,Oracle实例就运行在内存使用混合模式(Mixed Mode)下。

3、参数取值Only情况下

USE_LARGE_PAGES参数的第二个取值是Only,从含义上,表示Oracle实例只会使用HugePage作为内存使用。如果系统在AMM模式或者HugePage用尽的时候,数据库就不能启动或者报错。

SQL> alter system set use_large_pages=only scope=spfile;

System altered.

SQL> startup force

ORA-27125: unable to create shared memory segment

[[email protected] ~]# grep HugePage /proc/meminfo

HugePages_Total:    67

HugePages_Free:     67

HugePages_Rsvd:      0

[[email protected] ~]# ipcs -m

------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status

数据库实例创建过程中出现故障报错,alter log中信息如下:

Tue Oct 22 14:50:51 2013

ALTER SYSTEM SET use_large_pages=‘ONLY‘ SCOPE=SPFILE;

Tue Oct 22 14:51:14 2013

Shutting down instance (abort)

License high water mark = 3

USER (ospid: 27273): terminating the instance

Instance terminated by USER, pid = 27273

Tue Oct 22 14:51:15 2013

Instance shutdown complete

Tue Oct 22 14:51:15 2013

Starting ORACLE instance (normal)

Specified value of sga_max_size is too small, bumping to 268435456

******************************************************************

Large Pages are not compatible with specified SGA memory parameters

use_large_pages = "ONLY" cannot be used with memory_target,

memory_max_target, or use_indirect_data_buffers parameters

Large Pages are compatible with sga_target and shared_pool_size

******************************************************************

显然从提示信息中看到,在使用AMM的情况下,如果USE_LARGE_PAGES参数取值为only,就回到了原来不能启动的情况。下面进行修复。

SQL> create pfile from spfile;

File created.

[[email protected] dbs]$ ls -l

total 9564

-rw-rw---- 1 oracle oinstall    1544 Sep  9 08:52 hc_ora11g.dat

-rw-r--r-- 1 oracle oinstall    2851 May 15  2009 init.ora

-rw-r--r-- 1 oracle oinstall    1137 Oct 22 14:56 initora11g.ora

-rw-r--r-- 1 oracle oinstall    1080 Oct 22 11:14 initora11g.ora.bk

-rw-r----- 1 oracle oinstall      24 Sep  9 08:52 lkORA11G

-rw-r----- 1 oracle oinstall    1536 Sep  9 09:02 orapwora11g

-rw-r----- 1 oracle oinstall 9748480 Oct 17 10:53 snapcf_ora11g.f

-rw-r----- 1 oracle oinstall    3584 Oct 22 14:50 spfileora11g.ora

*.undo_retention=300

*.undo_tablespace=‘UNDOTBS1‘

*.use_large_pages=‘ONLY‘

修改为:

*.undo_retention=300

*.undo_tablespace=‘UNDOTBS1‘

*.use_large_pages=‘FALSE‘

"initora11g.ora" 33L, 1138C written

重新启动系统。

SQL> startup pfile=/u01/app/oracle/dbs/initora11g.ora

ORACLE instance started.

Total System Global Area  267833344 bytes

Fixed Size                  1344312 bytes

Variable Size             176164040 bytes

Database Buffers           88080384 bytes

Redo Buffers                2244608 bytes

Database mounted.

Database opened.

--系统未使用HugePage特性

[[email protected] dbs]$ grep Huge /proc/meminfo

HugePages_Total:    67

HugePages_Free:     67

HugePages_Rsvd:      0

Hugepagesize:     4096 kB

当参数设置为Force的时候,Oracle实例会强制使用HugePage,如果此时还是AMM,就会报错启动故障。此外,如果在运行过程中,出现HugePage不足的情况,也会报错。

4、参数取值False的情况

最后是False的情况。如果参数取值为False,就意味着无论何时,都不会使用HugePage特性。

AMM情况下我们就不进行实验了,直接修改之前的pfile。

--修改参数文件

*.pga_aggregate_target=104857600

*.processes=150

*.remote_login_passwordfile=‘EXCLUSIVE‘

*.sga_max_size=272629760

*.sga_target=272629760

*.undo_retention=300

*.undo_tablespace=‘UNDOTBS1‘

*.use_large_pages=‘FALSE‘

"initora11g.ora" 31L, 1106C written

启动数据库,此时ASMM开启。

SQL> startup pfile=/u01/app/oracle/dbs/initora11g.ora

ORACLE instance started.

Total System Global Area  272011264 bytes

Fixed Size                  1344372 bytes

Variable Size             176163980 bytes

Database Buffers           88080384 bytes

Redo Buffers                6422528 bytes

Database mounted.

Database opened.

此时,虽然使用Linux共享内存,但是都是small pages,没有使用HugePage特性。

[[email protected] dbs]$ ipcs -m

------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status

0x00000000 884736     oracle    640        8388608    28

0x00000000 917505     oracle    640        264241152  28

0x01606d30 950274     oracle    640        4194304    28

[[email protected] dbs]$ grep Huge /proc/meminfo

HugePages_Total:    67

HugePages_Free:     67

HugePages_Rsvd:      0

Hugepagesize:     4096 kB

参数设置为False之后,Oracle即使可以使用HugePage,也不会去使用。SGA分配完全使用small page来进行。

5、结论

Oracle引入的USE_LARGE_PAGES,应该是对AMM和HugePage不兼容的弥合。借助这个参数,虽然不能让AMM和HugePage彻底融合一体,但是至少可以消除由于不兼容引发的问题故障。

转载:http://blog.itpub.net/17203031/viewspace-775004/

http://blog.itpub.net/17203031/viewspace-774928/

时间: 2024-08-26 08:30:55

Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)的相关文章

Oracle 11g 新特性 -- Oracle Restart 说明(转载)

转载:http://blog.csdn.net/tianlesoftware/article/details/8435670 一.  OHASD 说明 Oracle 的Restart 特性是Oracle 11g里的新特性,在讲这个特性之前先看一下Oracle 11g RAC的进程.之前的Blog 有说明. Oracle 11gR2RAC 进程说明 http://blog.csdn.net/tianlesoftware/article/details/6009962 Oracle 11gR2 中对

Oracle 11g新特性invisible index(不可见的索引)

如果一张表上有十几个索引,你有什么感受?显然会拖慢增.删.改的速度,不要指望开发人员能建好索引.我的处理方法是先监控很长的一段时间,看哪些索引没有用到,然后删除.但删除以后,如果发现某一天有用,那又要重新建,如果是大表,那就有些麻烦.现在11g提供一个新特性,不可见索引,可以建索引设置为不可见索引,CBO在评估执行计划的时候会忽略它,如果需要的时候,设置回来即可. 还有一种用途,你在调试一条SQL语句,要建一个索引测试,而你不想影响其他的会话,用不可见索引正是时候. SQL> drop tabl

[转]Oracle 11g 新特性 -- SQL Plan Management 说明

一 概述 二 SQL 计划基线Plan BaseLine体系结构三 加载SQL 计划基线四 演化SQL 计划基线五 重要的基线SQL 计划属性六 SQL 计划选择七 可能的SQL 计划可管理性方案八 SQL 性能分析器和SQL 计划基准方案九 自动加载SQL 计划基线方案十 清除SQL 管理库策略 一.概述 SQL 语句的SQL 执行计划发生更改时,可能存在性能风险. SQL 计划发生更改的原因有很多,如优化程序版本.优化程序统计信息.优化程序参数.方案定义.系统设计和SQL 概要文件创建等.

[转]Oracle 11g 新特性 -- SQL Plan Management 示例

目录 一 SPM 说明 相关名词说明 SPM的特点 与profile和outline相比更加灵活的控制手段 SPM使计划真正的稳定 SPM的控制方式 SPM如何捕捉加载执行计划 自动捕捉 批量导入 执行计划的选择过程 执行计划的演化evolution 修改已有的Baseline 相关MOS 文档 二 SPM 示例 自动捕捉 手工捕获执行计划 演化SQL Plan Baselines 完整示例 修改 Plan Baselines 显示SQL Plan Baselines 设置SQL Managem

Oracle 11g新特性之--Server Result Cache

Oracle 11g新特性之--Server  Result Cache 一.Server Result Cache说明 Oracle官网的说明,参考: 7.6 Managing the Server and Client  Result Caches http://docs.oracle.com/cd/E11882_01/server.112/e16638/memory.htm#BGBCABED 1.1 概述 SQL 查询结果高速缓存可在数据库内存中对查询结果集和查询碎片启用显式高速缓存.存储

【转】Oracle 11g Dataguard 参数详解

转自:https://www.jb51.net/article/52269.htm 这篇文章主要介绍了Oracle 11g Dataguard参数详解,包含了独立参数.主库参数.备库参数的详细说明,需要的朋友可以参考下. 注:本文译自<Oracle Data Guard 11g Handbook> Page 78 – Page 88 就Data Guard(后面都写成DG)来说,我们只关注如下三种参数: 1.独立于数据库角色的参数2.数据库角色为primary时的参数3.数据库角色为stand

Oracle 11g新特性之--虚拟列(Virtual Column)

Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL] 1.虚拟列可以用在select,update,delete语句的where条件中,但是不能用

Oracle 11g新特性direct path read引发的系统停运故障诊断处理

黎俊杰 | 2016-07-28 14:37 声明:部分表名为了脱敏而用XX代替 1.故障现象 (1)一个业务系统输入用户名与密码后无法进入首页,表现为一直在运行等待,运行缓慢 (2)整个系统无法正常使用,接近停运状态 2.故障解决方法 调整数据库参数alter system setevent='10949 trace name context forever, level 1'来关闭"direct path read"(直接路径读)特性,使SQL语句可以从缓存中查询数据,达到降低I/

静默安装oracle 11g及参数配置优化详解

一.安装前准备工作1.修改主机名#vi /etc/hosts   //并添加内网IP地址对应的hostname,如下127.0.0.1           localhost::1                   localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.8.151          linux-test 2.修改standby数据库的/etc/sysconfig/iptables文件,