Oracle 启动ASMM管理

Oracle 启动ASMM管理1.ASMM的作用从Oracle10g开始,Oracle提供了自动SGA的管理(简称ASMM,AutomaticSharedMemoryManagement)新特性。所谓ASMM,就是指我们不再需要手工设置sharedpool、bufferpool等若干内存池的大小,而是为SGA设置一个总的大小尺寸即可。Oracle数据库会根据系统负载变化,自动调整各组件的大小,从而使得内存始终能够…

大家好,又见面了,我是你们的朋友全栈君。

1.ASMM的作用
Oracle 10g开始,Oracle提供了自动SGA的管理(简称ASMMAutomatic SharedMemory Management)新特性。所谓ASMM,就是指我们不再需要手工设置shared pool、buffer pool等若干内存池的大小,而是为 SGA 设置一个总的大小尺寸即可。Oracle数据库会根据系统负载变化,自动调整各组件的大小,从而使得内存始终能够流向最需要它的地方。
 

例如,假设某个系统在上午1000到下午900属于OLTP应用,因而可能会用到较多的BUFFER CACHE;而下午900到上午1000属于OLAP系统,可能会用到较大的SHARED POOLLARGE POOL。如果我们启用了ASMM,数据库就会根据负载的变化而自动对内存大小进行调整,就不需要数据库管理员手工进行调整了。
 

2.如何使用ASMM
Oracle 10g提供了一个新的初始化参数:sga_target来启动ASMM,该参数定义了整SGA的总容量。同时,初始化参数statistics_level必须设置为typicalall才能启动ASMM,否则如果设置为basic,则关闭ASMM。ASMM只能自动调整5个内存池的大小,它们是:shared poolbuffer cachelarge pool、java pool stream pool。我 们 不 再 需要 设 置 shared_pool_sizedb_cache_size large_pool_sizejava_pool_sizestreams_pool_size这五个初始化参数。而其他的内存池,比如log bufferkeep buffer cache 等仍然需要DBA手工进行调整。
 

Oracle 10g还提供了另一个初始化参数sga_max_sizesga_target的值不能超过sga_max_size的值,修改 sga_max_size时,必须重启实例才能生效,而 sga_target则可以在线修改,立即生效,无须重启实例。

3ASMM的原理
为了实现ASMMOracle新引入了一个名为 MMAN(Memory Manager)的后台进程
每隔很短的一段时间,MMAN进程就会启动,然后去询问一下 Oracle提供的各个内存组件顾问,比如有 buffer cache顾问,也有 shared pool顾问,由这些顾问根据当前的负载情况,将这 5个可以自动调整的内存池的、建议的大小尺寸,返回给 MMAN。于是,MMAN进程就会根据该返回的值,来设置各个内存池。同时,如果我们使用了 spfile,还会将这些顾问得出的建议值写入spfile 里。这样,下次启动实例时,就可以直接把顾问得出的建议值拿来作为启动内存池的依据了。

如果我们启用了ASMM,同时又手工设置了可以自动调整大小的内存池的尺寸,比如设置了参数shared_pool_size为一个非0值的时候,会怎么样?对于Oracle 10g来说,我们为自动调整大小的内存组件设置了值,则会以我们设置的值作为自动调整的最小值。也就是说,假设sga_target4GB,而我们将shared_pool_size设置为600MB,则MMAN在进行自动调整时,永远不会将shared pool设置为600MB以下。

411g中的ASMM
Oracle11g数据库中,使用自动内存管理特性不再需要设定参数SGA_TARGETPGA_AGGREGATE_TARGET,因为这两个参数都已经被修改成自动调优的,除非想指定PGA和 SGA 的最小值才需要设定这两个参数。Oracle11g数据库中,则需要设置一个叫做MEMORY_TARGET的初始化参数,这个参数是指整个Oracle实例所能使用的内存大小,包括PGASGA的整体大小,在MEMORY_TARGET的内存大小之内,PGA和 SGA所用的内存可以根据当前负载情况自动相互转换。
如果当初始设定的MEMORY_TARGET的内存不够当前数据库使用的时候,Oracle11g
还提供了另外一个初始化参数MEMORY_MAX_TARGET,当原始设定的内存不够使用的时候,可以手工来动态调节 MEMORY_TARGET 的大小,但是不允许超过MEMORY_MAX_TARGET 的值。下面这张图简单明了的描述出
了 Oracle11g数据库内存大小的设定参数。

Oracle 启动ASMM管理

 

 

ASMM管理(将AMM切换到ASMM管理,即不启用11G的AMM特性,退化到10G的ASMM特性,当sga_target=0那么其下面的share_pool,buffer_cache就要手动管理,这样适合比较有经验的,如果sga_target不为0,那么其下面的share_pool,buffer_cahe等是自动管理。)

 

 

 

 

1启用ASMM管理,SGA_TARGET下面的各个内存手动管理(适合有经验的DBA)。

SQL> show parameter mem;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

hi_shared_memory_address      integer   0

memory_max_target      big integer   2G

memory_target      big integer   2G

shared_memory_address      integer   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  sga_target=0 scope=spfile;

 

System altered.

 

 

 

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

 

System altered.

 

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

 

System altered.

 

SQL> alter system set  db_cache_size=800m scope=spfile;

 

System altered.

 

SQL> alter system set  shared_pool_size=400m scope=spfile;

 

System altered.

 

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

 

System altered.

 

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

 

System altered.

 

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

 

System altered.

 

SQL> startup force;

ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account

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

 

 

 

 

SQL> startup nomount;

ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account

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

 

 

 

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

 

 

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

 

 

SQL> create pfile from spfile;

 

File created.

 

 

修改前pfile里面内容部分内容:

*.shared_pool_size=419430400

*.memory_max_target=0

*.memory_target=0

*.sga_max_size=1677721600

*.sga_target=0

 

只需要将pfile的 *.memory_max_target=0 *.memory_target=0两行删除。

[oracle@Database2 dbs]$ vi initoradb.ora

[oracle@Database2 dbs]$ rm -rf spfileoradb.ora

[oracle@Database2 dbs]$ ls

hc_oradb.dat  init.ora  initoradba.ora  initoradb.ora  lkORADB  orapworadb  snapcf_oradb.f

在Oracle用户下到$ORACLE_HOME下面将spfile删除,保留pfile文件,启动实例,实例用的是上面修改的pfile。

 

[oracle@Database2 ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on Mon Jun 25 10:13:26 2018

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

Connected to an idle instance.

 

SQL> startup;

ORACLE instance started.

 

Total System Global Area 1670221824 bytes

Fixed Size     2253824 bytes

Variable Size   822086656 bytes

Database Buffers   838860800 bytes

Redo Buffers     7020544 bytes

Database mounted.

Database opened.

 

 

[root@Database2 ~]# ipcs -m

 

—— Shared Memory Segments ——–

key        shmid      owner      perms      bytes      nattch     status      

0x00000000 0          gdm        600        393216     2          dest         

0x00000000 32769      gdm        600        393216     2          dest         

0x00000000 65538      gdm        600        393216     2          dest         

0x00000000 393219     oracle     640        16777216   26                      

0x00000000 425988     oracle     640        1660944384 26                      

0x84bc7544 458757     oracle     640        2097152    26                      

 

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

 

 

SQL> show parameter mem;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

hi_shared_memory_address      integer   0

memory_max_target      big integer   0

memory_target      big integer   0

shared_memory_address      integer   0

 

 

SQL> show parameter sga;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

lock_sga      boolean   FALSE

pre_page_sga      boolean   FALSE

sga_max_size      big integer   1600M

sga_target      big integer   0

 

 

SQL> show parameter pga;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

pga_aggregate_target      big integer   400M

SQL> show parameter db_cache_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

db_cache_size      big integer   800M

SQL> show parameter shared_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

shared_pool_size      big integer   400M

SQL> show parameter java_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

java_pool_size      big integer   112M

SQL> show parameter large_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

large_pool_size      big integer   112M

SQL> show parameter streams_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

streams_pool_size      big integer   112M

 

 

SQL> create spfile from pfile;

 

File created.

 

SQL> create spfile from pfile;

 

File created.

 

SQL> startup force;

ORACLE instance started.

 

Total System Global Area 1670221824 bytes

Fixed Size     2253824 bytes

Variable Size   822086656 bytes

Database Buffers   838860800 bytes

Redo Buffers     7020544 bytes

Database mounted.

Database opened.

 

SQL> show parameter spfile;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

spfile      string   /u01/app/oracle/product/11.2.0

  /db_1/dbs/spfileoradb.ora

 

 

 

  1. 启用ASMM管理,SGA_TARGET下面的内存使用自动管理,步骤和上面一样,上面的share_pool,buffer_cache是手动管理,下面的是自动管理。

 

SQL> show parameter mem;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

hi_shared_memory_address      integer   0

memory_max_target      big integer   1G

memory_target      big integer   1G

shared_memory_address      integer   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=400m scope=spfile;

 

System altered.

 

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

 

System altered.

 

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

 

System altered.

 

SQL> startup force;

ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account

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

SQL> create pfile from spfile;

 

File created.

 

 

[oracle@Database2 dbs]$ rm -rf spfileoradb.ora

[oracle@Database2 dbs]$ vi initoradb.ora

[oracle@Database2 dbs]$ ls

hc_oradb.dat  init.ora  initoradba.ora  initoradb.ora  lkORADB  orapworadb  snapcf_oradb.f

 

 

SQL> startup force;

ORACLE instance started.

 

Total System Global Area 1670221824 bytes

Fixed Size     2253824 bytes

Variable Size   268438528 bytes

Database Buffers  1392508928 bytes

Redo Buffers     7020544 bytes

Database mounted.

Database opened.

SQL> show parameter spfile;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

spfile      string

 

SQL> show parameter mem;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

hi_shared_memory_address      integer   0

memory_max_target      big integer   0

memory_target      big integer   0

shared_memory_address      integer   0

SQL> show parameter sga;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

lock_sga      boolean   FALSE

pre_page_sga      boolean   FALSE

sga_max_size      big integer   1600M

sga_target      big integer   1600M

SQL> show parameter pga;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

pga_aggregate_target      big integer   400M

SQL> show parameter db_cache_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

db_cache_size      big integer   0

SQL> show parameter shared_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

shared_pool_size      big integer   0

SQL> show parameter java_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

java_pool_size      big integer   0

SQL> show parameter large_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

large_pool_size      big integer   0

SQL> show parameter streams_pool_size;

 

NAME      TYPE   VALUE

———————————— ——————– ——————————

streams_pool_size      big integer   0

 

 

总结:在ASMM管理下,必须先将AMM管理关闭,这是第一步,之后要想使用share_pool,buffer_cache要自动管理,sga_target值设置为不为0,如果要手动管理share_pool,buffer_cache那么就要将sga_target的值设置为0。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134065.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • c语言中concat函数,SQL注入中用到的Concat函数详解-菜鸟白帽扫盲

    c语言中concat函数,SQL注入中用到的Concat函数详解-菜鸟白帽扫盲在我们WEB安全测试的时候,会经常使用到这一语法,因此应该透彻理解这一函数,今天好好实践了一下,整理如下。1.Concat函数:concat()是一个函数,用于用于将两个字符串连接起来,形成一个单一的字符串,类似于字符串拼接;语法:SELECTCONCAT(str1,str2,…)执行结果:​2.实战演示:查看users表下的数据SELECT*FROMusers那么当一条语句为SELE…

  • lock free(无锁并发)是什么

    lock free(无锁并发)是什么一、非阻塞同步(Non-blockingSynchronization)1.无锁编程/lock-free/非阻塞同步无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blockingSynchronization)。实现非阻塞同步的方案称为“无锁编程算法”(Non-blockingalgorithm)。lock-free是目前最常见的无锁编程的实现级别(一共三种级别):wait-free l.

  • linux 内核态与用户态_linux内核态和用户态通信

    linux 内核态与用户态_linux内核态和用户态通信创建于2013-04-13迁移自本人的百度空间——————————–1/内核态->用户态      在kernel module中调用printk是最简单的传递信息到用户空间的方法。 2/用户态->内核态      在linux中,用户对设备的操作往往被抽象为对文件的操作。利用这一特性,可以通过注册和实现伪字符设备…

  • django1.8_django serializers

    django1.8_django serializers前言由于之前我们一直使用的django-rest-framework-jwt这个库,但是作者在17年的时候就已经不再维护了(有部分bug没有解决),所以我们也就不用了,目前我们使用django-r

  • 发现一个非常好的的VB学习网站。www.newxing.com[通俗易懂]

    发现一个非常好的的VB学习网站。www.newxing.com[通俗易懂]
    www.newxing.com 会经常上上看的。
     

  • c语言反三角函数有哪些,反三角函数公式有哪些?

    01反三角函数公式包括1、arcsin(-x)=-arcsinx。2、arccos(-x)=π-arccosx。3、arctan(-x)=-arctanx。4、arccot(-x)=π-arccotx。5、arcsinx+arccosx=π/2=arctanx+arccotx。6、sin(arcsinx)=x=cos(arccosx)=tan(arctanx)=cot(arccotx)。7、当x∈…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号