iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >oracle 11g自动内存管理概述
  • 671
分享到

oracle 11g自动内存管理概述

2024-04-02 19:04:59 671人浏览 独家记忆
摘要

本篇内容介绍了“oracle 11g自动内存管理概述”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一:Or

本篇内容介绍了“oracle 11g自动内存管理概述”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一:Oracle 11g自动内存管理概述

oracle11g中的新的内存管理特性自动化内存管理(automatic memory management)。在该新特性之下SGA与PGA将会根据需要自动的扩展与收缩。你只需要设置两个内存管理相关的参数memory_target与memory_max_target.

1)memory_target:该参数设置整个oracle数据库实例可以使用的内存量,oralce数据库实例在运行过程中会根据需求自动的调节SGA与PGA的大小。可以使用相应的alter system命令动态的修改memory_target的值。该参数是动态初始化参数。

2)memory_max_target:该参数设置oracle实例可以使用的最大内存量。在调整memory_target的值时必须保持以下的约束关系memory_target<=memory_max_target.该参数是静态初始化参数,修改需要重启才能生效。

在创建数据库的时候,你可以通过设置memory_target,memory_max_target初始化参数来开启自动化内存管理特性。在数据库创建以后也可以通过设置memory_target,memory_max_target初始化参数来开启自动化内存管理,但是不会立即生效,需要重启实例。

使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。

关于设置memory_target的值的原则:如果服务器只有数据库,可以分配全部内存的2/3 到 3/4 给oracle的memory_target ;

查看memory_target 以及SGA_TARGET和PGA_AGGREGATE_TARGET的设置的值,需要注意设置的值不会变化的,如下:

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 62848M

memory_target                        big integer 62848M

parallel_servers_target              integer     512

pga_aggregate_target                 big integer 4G

sga_target                           big integer 8G

二:如何Oracle运行的某个时刻的各个内存的分配大小呢?

可以通过create pfile from spfile,查看:

[oracle@JoinSpider dbs]$ cat initora11g.ora

ora11g.__db_cache_size=2281701376

ora11g.__java_pool_size=939524096

ora11g.__large_pool_size=805306368

ora11g.__oracle_base='/files/oracle'#ORACLE_BASE set from environment

ora11g.__pga_aggregate_target=57310969856     ##这是当前实际的分配pga的值,

ora11g.__sga_target=5637144576                           ##这是当前实际的分配sga的值

ora11g.__shared_io_pool_size=0

ora11g.__shared_pool_size=3758096384

ora11g.__streams_pool_size=0

*.audit_file_dest='/files/oracle/admin/ora11g/adump'

*.audit_trail='db'

*.compatible='11.2.0.4.0'

*.control_files='/files/oracle/oradata/ora11g/control01.ctl','/files/oracle/fast_recovery_area/ora11g/control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='ora11g'

*.db_recovery_file_dest='/files/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=4385144832

*.diagnostic_dest='/files/oracle'

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

*.memory_max_target=65899345920

*.memory_target=65899345920

*.open_cursors=300

*.pga_aggregate_target=4294967296        ###这是最小值

*.processes=1500

*.remote_login_passWordfile='EXCLUSIVE'

*.sga_target=8589934592                           ###这是最小值

*.undo_retention=3600

*.undo_tablespace='UNDOTBS1'

三:Oracle11g内存管理如何开启:

1:在数据库创建期间设置自动内存管理:如果是手工建库,那么你只需要设置好如下类似初始化参数即可:

memory_target = 1000m

memory_max_target = 1500m

如果是采用DBCA创建数据库,如果是创建新库并且是高级安装,你能选择自动内存管理选项。如果是选择基本安装,那么默认就是自动内存管理。

2:在数据库创建后:你可以在数据库创建后添加memory_max_target和memory_target.虽然memory_target是一个动态参数,但是当数据库运行时,你不能交换到自动内存管理。必须重启数据库将参数应用到实例启动过程才行。

四:Oracle11g内存管理的相关参数设置的含义和原则:

MEMORY_TARGET 设置为非零值时:

1:如果设置了SGA_TARGET 和 PGA_AGGREGATE_TARGET,则会分别将它们当作 SGA大小和 PGA 大小的最小 值。

2:如果设置了 SGA_TARGET 但未设置PGA_AGGREGATE_TARGET,则仍会自动优化这两个参数。PGA_AGGREGATE_TARGET 将初始化为以下值:(MEMORY_TARGET -SGA_TARGET)。

3: 如果设置了 PGA_AGGREGATE_TARGET 但未设置 SGA_TARGET,则仍会自动优化这两个参数。SGA_TARGET 将初始化为值 min(MEMORY_TARGET -PGA_AGGREGATE_TARGET, SGA_MAX_SIZE(如果用户已设置)),系统将自动优化子组件。

4:如果未设置任何参数,则无需最小值或默认值即可自动优化这两个参数。 有这样一个策略:在初始化过程中,将MEMORY_TARGET的按固定比率分配给SGA 和 PGA。具体如下:

sga_target =memory_target *60%

pga_aggregate_target=memory_target *40%

如果未设置 MEMORY_TARGET,或者将其显式设置为 0(11g 中的默认值为 0)则取消了memory_target的作用,完全和10g在内存管理上一致。:

1.如果设置了 SGA_TARGET,则系统仅自动优化 SGA 的子组件大小。PGA 的自动优化与 是否显式设置 PGA 无关。但是,不会自动优化整个SGA (SGA_TARGET) 和 PGA (PGA_AGGREGATE_TARGET),即 SGA 和PGA 不会自动增长或收缩。

2.如果既未设置SGA_TARGET,又未设置 PGA_AGGREGATE_TARGET,则SGA中的各组件大小都要明确设定,不能自动调整各组件大小。PGA不能自动增长和收缩。

3. 如果仅设置了 MEMORY_MAX_TARGET,则使用文本初始化文件进行手动设置时,MEMORY_TARGET 默认为 0。SGA 和 PGA 的自动优化行为默认情况下与 10g R2 中的相同。

4.如果 SGA_MAX_SIZE 不是用户设置的,则在用户设置了 MEMORY_MAX_TARGET 的情况下,系统会在内部将其设置为 MEMORY_MAX_TARGET(与用户是否设置SGA_TARGET 无关)

五:若将一个非自动化内存管理的11g库系统改成自动化内存管理,该如何确认MEMORY_TARGET的值?

1.在一个系统上启用自动内存管理其实很简单,不需要事先做太多的事情,可以使用下面的计算公式来计算MEMORY_TARGET:           MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximum      PGA      allocated ");

下面的查询语句向你展示有关的信息,以及如何计算出需要的memory_target值:

1.方法一:使用sql查出SGA_TARGET、PGA_AGGREGATE_TARGET以及maximum      PGA      allocated的值,之后根据公式MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximum      PGA  allocated ");算出结果,,注意函数GREATEST是求两个数值中的最大值:

SELECT name, value/1024/1024

FROM   v$parameter

WHERE  name IN ('pga_aggregate_target', 'sga_target')

UNION

SELECT 'maximum PGA allocated' AS name, TO_CHAR(value)/1024/1024  AS value

FROM   v$pgastat

WHERE  name = 'maximum PGA allocated';

方法二:直接一个sql查出memory_target的值,单位为mb;

SELECT  ( sga.value + GREATEST(pga.value, max_pga.value))/1024/1024   AS memory_target

FROM

(SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'sga_target') sga,

(SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'pga_aggregate_target') pga,

(SELECT value FROM v$pgastat WHERE name = 'maximum PGA allocated') max_pga;

我认为MEMORY_TARGET应该等于 实际的sga的值加上PGA 最大分配的值,这是最真实的,但是一般就认为MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximum      PGA  allocated ")即可

如果想更真实的确定MEMORY_TARGET的大小,那就要确定实例的sga_target的实际使用的大小,当前设置值减去剩余值。然后再利用前边的计算公式

SQL> select (

(select sum(value) from v$sga) -

(select current_size from v$sga_dynamic_free_memory)

)/1024/1024/1024 "sga_target"

from dual;

2.如果此时实例没有设置memory_target或者说memory_target=0,并且把SGA_TARGET设置为0,即表示禁用10g的新特性——自动共享内存(sga)分配,这样我们需要对各个sga内存组件的值进行单独设置,那么这种情况下该怎么确定memory_target的值来开启Oracle11g的自动内存管理呢?

SQL>  select value/1024/1024 as value from v$pgastat  where name='maximum PGA allocated';

VALUE

----------

45.7822266

可见pga_aggregate_target=46M,确定oracle实例启动以来PGA的最大容量,可以理解为最大的使用量。

SQL> SELECT ((SELECT SUM(value) FROM V$SGA) -

(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY) ) "SGA_TARGET"

FROM DUAL;

SGA_TARGET

----------

313626624

可见SGA_target的大小为300M,

1)如果马上就修改memory_target=352M会报

值的范围不合法的提示,

SQL> alter system set memory_target=352M;

alter system set memory_target=352M

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least

400M

因为要满足memory_target>=pga_aggregate_target+sga_target.

但是pga_aggregate_target 的值是100M,而SGA_target的值为300M。

352M<300M+100M所有出错了。

2)修改PGA或者sga的值为0M也会报错的。因为还没有设置memory_target的值,

SQL>  alter system set pga_aggregate_target=0;

alter system set pga_aggregate_target=0

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00093: pga_aggregate_target must be between 10M and 4096G-1

如果直接修改pga_aggregate_target的值会报上面的错误。因为我们还没有设置momory_target的值,如果直接是设置PGA的大小为0M的话,那就等于不给PGA分配内存了,所有我们通过上面的一个查询,确定自实例启动以来分配给PGA的最大内存大小46M,先把PGA的值调下来。使

memory_target>=pga_aggregate_target+sga_target.即352M>=50M+300M

SQL> alter system set pga_aggregate_target=50M;

System altered.

SQL> alter system set memory_target=352M;

System altered.

SQL> alter system set pga_aggregate_target=0M;

System altered.

这是我们已经启用oracle的内存自动化管理,并且设置SGA_target与pga_aggregate_target参数的值为0。oracle这时就不会为SGA与PGA分配最小内存大小了。oracle会根据工作负载自动的调整SGA与PGA的大小。

六:Oracle 11g设置内存相关参数原则:

1.如果Oracle11g要开启自动内存管理,需要设置MEMORY_TARGET的值,如果该服务器只跑Oracle,那么可以按着下面的原则设置:

MEMORY_TARGET=物理内存 x 80%

MEMORY_MAX_SIZE=物理内存 x 80%

2.如果不打算开启自动内存管理,也就是MEMORY_TARGET=0:

对于OLTP系统:

SGA_TARGET=(物理内存 x 80%) x 80%

SGA_MAX_SIZE=(物理内存 x 80%) x 80%

PGA_AGGREGATE_TARGET=(物理内存 x 80%) x 20%

对于DSS系统:

SGA_TARGET=(物理内存 x 80%) x 50%

SGA_MAX_SIZE=(物理内存 x 80%) x 50%

PGA_AGGREGATE_TARGET=(物理内存 x 80%) x 50%

“oracle 11g自动内存管理概述”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: oracle 11g自动内存管理概述

本文链接: https://www.lsjlt.com/news/59952.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle 11g自动内存管理概述
    本篇内容介绍了“oracle 11g自动内存管理概述”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一:Or...
    99+
    2024-04-02
  • 设置ORACLE自动内存管理
    文章参考:ORACLE 11g官方文档[Managing Memory]前言:之前搭建数据库集群环境后,现场的维护人员不知何时改为了手动内存管理,且参数设置存在不合理,导致客户plsql执行报错,如下所示:...
    99+
    2024-04-02
  • 深入理解JVM自动内存管理
    目录一、前言1.1 计算机==>操作系统==>JVM1.1.1 虚拟与实体(对上图的结构层次分析)1.1.2 Java程序执行(对上图的箭头流程分析)二、JVM内存空间与...
    99+
    2024-04-02
  • 动态内存管理
    动态内存管理 一.为什么要有动态内存二.malloc和free二.calloc三.realloc 一.为什么要有动态内存 开辟空间的方式有很多种,像是我们经常使用的整形,数组之类的...
    99+
    2023-09-04
    c++ 数据结构 java
  • Oracle中怎么使用自动存储管理
    在Oracle数据库中,自动存储管理(Automatic Storage Management,ASM)可以通过以下步骤来进行配置和...
    99+
    2024-04-19
    Oracle
  • C++ 内存管理中的自动垃圾回收
    c++++ 中自动垃圾回收需要使用第三方工具或库。可以使用智能指针或垃圾回收器库。智能指针自动释放底层对象,而垃圾回收器库使用算法跟踪不再使用的数据结构。案例:使用智能指针 std::s...
    99+
    2024-05-04
    c++ 垃圾回收 垃圾回收器 标准库
  • Oracle的内存管理方式
    本篇内容主要讲解“Oracle的内存管理方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle的内存管理方式”吧!Oracle 内存管理方式oracle...
    99+
    2024-04-02
  • C++ 内存管理:自定义内存分配器
    c++++ 中的自定义内存分配器可让开发者根据需求调整内存分配行为,创建自定义分配器需要继承 std::allocator 并重写 allocate() 和 deallocate() 函...
    99+
    2024-05-03
    c++ 内存管理
  • ORACLE概要文件管理有哪些内容
    这篇文章主要介绍“ORACLE概要文件管理有哪些内容”,在日常操作中,相信很多人在ORACLE概要文件管理有哪些内容问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ORACLE...
    99+
    2024-04-02
  • C++动态内存管理详解
    目录1.C/C++程序地址空间2.C语言动态内存管理(1)malloc(2)calloc(3)realloc(4)free3.C++动态内存管理(1)C++为什么要设计一套自己专属的...
    99+
    2024-04-02
  • golang怎么手动管理内存
    在Go语言中,内存管理是由Go的垃圾回收器自动完成的,开发者不需要手动管理内存。Go语言的垃圾回收器会自动检测不再使用的变量,并释放...
    99+
    2024-02-29
    golang
  • Linux内存管理和寻址的概念是什么
    本篇内容主要讲解“Linux内存管理和寻址的概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux内存管理和寻址的概念是什么”吧!1.概念内存管理模式段式:内存分为了多段,每段都是连...
    99+
    2023-06-21
  • 如何解析Java对象引用与JVM自动内存管理
    今天就跟大家聊聊有关如何解析Java对象引用与JVM自动内存管理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。解析Java对象引用与JVM自动内存管理(转)[@more@]对象引用应...
    99+
    2023-06-03
  • Oracle的内存管理方式有哪些
    这篇文章主要介绍“Oracle的内存管理方式有哪些”,在日常操作中,相信很多人在Oracle的内存管理方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle的内...
    99+
    2024-04-02
  • 【C语言进阶】动态内存管理
    动态内存管理 1.为什么存在动态内存分配2.动态内存函数的介绍2.1malloc和free2.2calloc2.3realloc 3.常见的动态内存错误3.1 对NULL指针的解引用操作...
    99+
    2023-10-25
    c语言 开发语言 1024程序员节
  • C++动态内存管理详情解说
    目录写在前面C/C++ 内存分布C语言内存管理方式C++内存管理方式C++为何增加了new 和 deletenew 一个对象new 一个数组deletemalloc &am...
    99+
    2024-04-02
  • C语言动态内存管理介绍
    目录前言:C 语言为内存的分配和管理提供了几个函数:1.malloc() 用法2.calloc() 用法3.realloc() 与 free() 用法前言: 简单记录一下,内存管理...
    99+
    2024-04-02
  • 怎么理解ORACLE 11G维护窗口和自动维护任务
    这篇文章主要讲解了“怎么理解ORACLE 11G维护窗口和自动维护任务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解ORACLE 11G维护窗口和自...
    99+
    2024-04-02
  • c++动态内存管理详解(new/delete)
    目录前言用法上对内置类型对自定义类型new/delete底层原理重载类的专属operator new和 operator delete定位newnew/delete与malloc/f...
    99+
    2024-04-02
  • FreeRTOS动态内存分配管理heap_1示例
    目录动态内存管理heap_1.c 内存堆管理实际可用数组字节数分配释放还剩空闲字节数动态内存管理 FreeRTOS提供5种动态内存管理策略,分别为heap_1到heap_5,源码在F...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作