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>
[root@SimpleLinux ~]# 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使用情况。
[root@SimpleLinux ~]# grep HugePage /proc/meminfo
HugePages_Total: 67
HugePages_Free: 67
HugePages_Rsvd: 0
[root@SimpleLinux ~]# 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
[root@SimpleLinux ~]# grep HugePage /proc/meminfo
HugePages_Total: 67
HugePages_Free: 67
HugePages_Rsvd: 0
[root@SimpleLinux ~]# 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.
[oracle@SimpleLinux 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特性
[oracle@SimpleLinux 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特性。
[oracle@SimpleLinux 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
[oracle@SimpleLinux 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/
Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)的更多相关文章
- Oracle 11g 新特性 – HM(Hang Manager)简介
在这篇文章中我们会对oracle 11g 新特性—hang 管理器(Hang Manager) 进行介绍.我们需要说明,HM 只在RAC 数据库中存在. 在我们诊断数据库问题的时候,经常会遇到一些数据 ...
- Oracle 11g Dataguard参数详解
https://www.jb51.net/article/52269.htm注:本文译自<Oracle Data Guard 11g Handbook> Page 78 – Page 88 ...
- Oracle 11g 新特性 --SQL Plan Management 说明
Oracle 11g 新特性 --SQL Plan Management 说明 参见大神博主文章: http://blog.csdn.net/tianlesoftware/article/detail ...
- Oracle 11g新特性
文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...
- Oracle 11g 新特性 -- Oracle Restart 说明(转载)
转载:http://blog.csdn.net/tianlesoftware/article/details/8435670 一. OHASD 说明 Oracle 的Restart 特性是Oracl ...
- 静默安装oracle 11g及参数配置优化详解
一.安装前准备工作1.修改主机名#vi /etc/hosts //并添加内网IP地址对应的hostname,如下127.0.0.1 localhost::1 ...
- 使用Oracle 11g新特性 Active Database Duplication 搭建Dataguard环境
Duplication Database 介绍 Duplicate database可以按照用途分为2种: duplicate database(复制出一个数据库) duplicate standby ...
- Oracle 11g新特性direct path read引发的系统停运故障诊断处理
黎俊杰 | 2016-07-28 14:37 声明:部分表名为了脱敏而用XX代替 1.故障现象 (1)一个业务系统输入用户名与密码后无法进入首页,表现为一直在运行等待,运行缓慢 (2)整个系统无法正常 ...
- Oracle 11g 新特性 -- 自适应游标共享(Adaptive Cursor Sharing: ACS) 说明(转载)
一.自适应游标共享(Adaptive Cursor Sharing) 说明 1.1 ACS概述绑定变量使Oracle DB 可以为多条SQL 语句共享单个游标,以减少分析SQL 语句所使用的共享内存量 ...
随机推荐
- Web版报表的架构和设计思路
通常,我们设计一个报表,会面临设计报表,构造数据,展示报表的一个过程 设计报表也许大家都会用过,比如水晶报表,jreport一堆一堆的. 不过我觉得最好用的应该还是office做成的报表,谁都会,而且 ...
- HTML5 javascript修改canvas的大小
方法1: 设定固定的值,这种方式跟在html中设定canvas的值没有什么区别: window.onload = function(){ canvas.height = 100; canvas.wid ...
- 【shell】 for循环
#!/bin/bash for i in 1,3,4,6 ##有几个数就循环几次 do echo $i done for m in $( cat /root/num.log) ## /root/num ...
- bzoj2537: [neerc2007]Language Recognition
Description DFA(确定性有限状态自动机)是一个有向图,顶点称为状态,边称为转移.每个转移用一个字母标记.对于每个状态s和每个转移l,至多有一个转移从s出发且标记为l.DFA有一个初始状态 ...
- yarn的调度策略
一. yarn的资源分配模型 无论先进先出调度器,容量调度器,还是公平调度器,他们的核心:资源分配模型是一样的. 调度器维护着多个队列的信息,用户可以向任意一个或多个队列提交job.每次NodeMan ...
- 使用 Entity Framework
ORM 和 EF 当我们要开发一个应用程序,就要考虑怎样展示数据,怎样持久化数据.考虑这个问题时我们所要关心的东西,最重要的莫过于程序的性能.开发的简易性和代码的可维护.可扩展性. 持久化(Persi ...
- 蜘蛛纸牌存档修改——python3.4.3
#encoding:utf-8 import struct myfile = open("D:\\Backup\\我的文档\\spider.sav","rb+" ...
- pthread_key_t和pthread_key_create()详解
pthread_key_t和pthread_key_create()详解 下面说一下线程中特有的线程存储, Thread Specific Data .线程存储有什么用了?他是什么意思了?大家都知道, ...
- Hadoop MapReduce编程学习
一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有 conf.set("map ...
- cf 605A Sorting Railway Cars 贪心 简单题
其实就是求总长度 - 一个最长“连续”自序列的长度 最长“连续”自序列即一个最长的lis,并且这个lis的值刚好是连续的,比如4,5,6... 遍历一遍,贪心就是了 遍历到第i个时,此时值为a[i], ...