现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。

在10g时,Oracle推出了ASMM(Automatic Shared Memory Management),实现了Oracle SGA和PGA内部结构的自调节。进入11g之后,AMM(Automatic Memory Management)实现了参数MEMORY_TARGET,将SGA和PGA的规划全部统筹起来对待。

默认情况下,Oracle 11g是使用AMM的。我们在安装过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果这两个参数设置为非零取值,那么Oracle就是采用AMM管理策略的。

同时,如果我们设置这两个参数为0,则AMM自动关闭。对应的SGA_TARGET、PGA_AGGREGATE_TARGET参数取值非零之后,Oracle自动退化使用ASMM特性。

本篇简单介绍一下AMM和ASMM的相互切换。

1、实验环境介绍

我们选择11.2.0.3进行试验,当前状态为ASMM。

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

当前MEMORY_TARGET设置为零,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 0

memory_target                        big integer 0

parallel_servers_target              integer     16

pga_aggregate_target                 big integer 108M

sga_target                           big integer 252M

2、从ASMM到AMM

在11g中,如果使用ASMM,对应的内存共享段是真实的共享段。

[oracle@SimpleLinux ~]$ ipcs -m

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

key        shmid      owner      perms      bytes      nattch     status

0x00000000 32768      oracle    640        4194304    32

0x00000000 65537      oracle    640        260046848  32

0x01606d30 98306      oracle    640        4194304    32

下面进行参数的调整,这里笔者有一个建议,很多时候启动umount阶段故障都是由于不当的参数修改造成的。在进行参数修改之前,可以使用create pfile进行一下参数备份,可以加快故障出现时候的系统修复速度。

SQL> show parameter spfile

NAME                                 TYPE        VALUE

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

spfile                               string      /u01/app/oracle/dbs/spfileora11g.ora

SQL> create pfile from spfile;

Done

修改系统参数,将sga和pga的target值设置为0,memory的target设置非0。注意,这个过程很多参数是静态的参数,可以都在spfile可见性中进行修改,之后重启服务器生效。

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=0m 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

重新启动数据库服务器,查看参数配置。

SQL> conn / as sysdba

Connected.

SQL> startup force

ORACLE instance started.

Total System Global Area  263651328 bytes

Fixed Size                  1344284 bytes

Variable Size             176164068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2256896 bytes

Database mounted.

Database opened.

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

AMM启动之后,系统共享段变为“虚拟”共享段。

[oracle@SimpleLinux dbs]$ ipcs -m

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

key        shmid      owner      perms      bytes      nattch     status

0x00000000 163840     oracle    640        4096       0

0x00000000 196609     oracle    640        4096       0

0x01606d30 229378     oracle    640        4096       0

3、从AMM到ASMM

下面是如何从AMM到ASMM。要完全关闭AMM,一定将MEMORY_TARGET和MEMORY_MAX_TARGET都设置为0才行。

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

System altered

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

System altered

SQL> alter system set pga_aggregate_target=100m scope=spfile;

System altered

SQL> alter system set sga_target=260m scope=spfile;

System altered

SQL> alter system set sga_max_size=260m scope=spfile;

System altered

注意,此时如果重新启动系统,会报错。

SQL> startup force

ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account

ORA-00849: SGA_TARGET 272629760 cannot be set to more than MEMORY_MAX_TARGET 0.

SQL>

这个问题的原因是Oracle启动过程中对于参数的内部检查。因为MEMORY_MAX_TARGET被“显示”的赋值,与SGA_TARGET赋值相冲突。

解决的方法就是使用参数默认值。创建出pfile之后,将显示赋值为0的MEMORY_TARGET和MEMORY_MAX_TARGET记录行删除掉。再利用pfile启动数据库,重建spfile。

SQL> create pfile from spfile

2  ;

File created.

--修改前

*.db_recovery_file_dest='/u01/app/fast_recovery_area'

*.db_recovery_file_dest_size=10737418240

*.diagnostic_dest='/u01/app'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11gXDB)'

*.log_checkpoints_to_alert=TRUE

*.memory_max_target=0

*.memory_target=0

*.open_cursors=300

*.pga_aggregate_target=104857600

*.processes=150

--修改后

*.db_recovery_file_dest='/u01/app/fast_recovery_area'

*.db_recovery_file_dest_size=10737418240

*.diagnostic_dest='/u01/app'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11gXDB)'

*.log_checkpoints_to_alert=TRUE

*.open_cursors=300

*.pga_aggregate_target=104857600

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

使用pfile启动数据库,重建spfile。

SQL> conn / as sysdba

Connected to an idle instance.

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.

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

SQL> create spfile from pfile

2  ;

File created.

重新启动之后,ASMM切换完成。

SQL> startup force

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.

--真实的共享内存段结构

[oracle@SimpleLinux dbs]$ ipcs -m

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

key        shmid      owner      perms      bytes      nattch     status

0x00000000 425984     oracle    640        8388608    25

0x00000000 458753     oracle    640        264241152  25

0x01606d30 491522     oracle    640        4194304    25

--HugePage使用情况

[oracle@SimpleLinux dbs]$ grep Huge /proc/meminfo

HugePages_Total:    67

HugePages_Free:      1

HugePages_Rsvd:      0

Hugepagesize:     4096 kB

[oracle@SimpleLinux dbs]$

4、结论

AMM和ASMM是我们管理数据库非常重要的工具,借助自我调节的机制,我们可以做到数据库自我管理。11g的AMM应该说是很方便的,但是在一些情况下,如HugePage,我们可能需要切换回ASMM。权当记录,留需要的朋友待查。

Oracle 11g AMM与ASMM切换相关推荐

  1. Oracle 11g AMM设置

    最近在部署ORACLE时,部署人员对PGA和SGA设置一筹莫展,其实可以用Oracle 11g的AMM的(默认是开启的).我们在安装过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY ...

  2. oracle启用amm,使用ASMM和AMM时设置shared_pool

    使用ASMM和AMM时设置shared_pool 从10g中引入了asmm后,相比以前的手动调整各种内存组件,在自动管理方面前进了一大步.DBA只需要定义sga_target和sga_max_targ ...

  3. ORACLE 11G DATA GUARD主从切换

    当oracle data guard中如主库出现当机时,需要将从库切换为主库,以下从实验环境模拟主从库切换操作: 1.查看主从库角色 192.168.88.120: 192.168.88.119: 2 ...

  4. linux oracle 11g ora-00845,Linux下安装Oracle11g , MEMORY_TARGET(AMM)小于/dev/shm处理(ORA-00845)...

    Oracle 11g的Linux版本在修改了MEMORY_TARGET或者SGA_TARGET后启动可能会报错: SQL> shutdown immediate Database closed. ...

  5. oracle启用amm,oracle AMM、ASMM区别以及相关用法

    一.相关概念解析AMM:automatic memory management(11.1才有的特性) 即让数据库完全管理SGA.PGA的大小,而对于管理员只需要设置一个总的大小(memory_targ ...

  6. Oracle 11G启动自动内存管理AMM

    前言:下面主要介绍了11G的AMM特性,实现了对SGA,PGA,以及SGA下面的内存如share_pool的自动管理,因为10G的ASMM特性需要手动对SGA,PGA管理,所以11G引出来了AMM管理 ...

  7. oracle amm和asmm,AMM与ASMM

    一.AMM相关知识: 1.从oracle 11.1开始oracle提供了通过MEMORY_TARGET参数实现自动SGA和PGA自动管理的功能,从此版本开始不再需要明确设置SGA_TARGET及PGA ...

  8. oracle amm和asmm,在Oracle中,什么是ASMM和AMM?

    A答案 ASMM(Automatic Shared Memory Management,自动共享内存管理)是Oracle 10g引入的概念.通过使用ASMM,就不需要手工设置相关内存组件的大小,而只为 ...

  9. oracle内存管理模式amm,Oracle 11g自动内存管理(AMM)相关的初始化参数

    Oracle对内存的管理越来越趋向智能化.自动化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Manageme ...

最新文章

  1. Python实训day06pm【网络爬虫(爬取接口)-爬取图片与数据】
  2. so调用so 编译 android,android-5分钟入门-CMake方式使用JNI(.so调用篇)
  3. React-Router面试题汇总
  4. java http setheader_response.setHeader各种用法详解
  5. css 百分比 怎么固定正方形_css样式写出三角形,宽高自适应的正方形,扇形!...
  6. 基于云原生2.0,华为云沃土云创计划全面使能伙伴创新升级
  7. mediawiki初学心得及使用方法
  8. oracle 快速入门之第一章 数据库基础
  9. 华为HCIP(HCNP)笔记,还不快快收藏!
  10. Paxos算法(一)—Basic Paxos
  11. C++使用librdkafka创建消费者和生产者
  12. ADC学习(4)—— 电压比较器
  13. ong拼音汉字_汉语拼音ang-ong(教案)
  14. Pytorch3D环境血泪安装史
  15. 导航栏菜单实现鼠标移入移出中英文切换的两种方法(css3和jQuery)
  16. ios 微信登录sdk集成
  17. 叶俊——“新零售·新未来”米友圈第九届全国精英总裁班授课圆满落幕
  18. Excel:数据分列功能分割文本
  19. 邮件发送技巧:TO, CC, BCC(收件人、抄送、密送)
  20. qq三国挂机云服务器,云服务器挂机QQ三国游戏的流程和实际操作概况记录

热门文章

  1. [iPhone-Sqlite3]sqlite3_prepare_v2() 不返回 SQLITE_OK,调试
  2. 如何让网站打开更快第三弹--开启压缩篇
  3. C#实现动态桌面背景图片切换
  4. 【leetcode】654. Maximum Binary Tree
  5. Android LruCache 压缩图片 有效避免程序OOM
  6. python 批量处理文件重命名
  7. 华为认证网络互连专家-HCIE-RS模拟试卷
  8. STL源码剖析之算法:lower_bound
  9. apply call this arguments caller callee
  10. Dynamips和Vmware完成CCVP试验(4)