首页 > 数据库 >oracle内存管理

oracle内存管理

时间:2022-10-09 16:11:57浏览次数:69  
标签:TARGET PGA 管理 SGA 实例 内存 MEMORY oracle

关于内存管理

必须管理的内存结构是系统全局区(SGA)和实例程序全局区(instance PGA)。Oracle 数据库支持各种内存管理方法,这些方法由初始化参数设置选择。

 

自动内存管理

Oracle 数据库可以完全自动管理 SGA 内存和实例 PGA 内存。您只需指定实例使用的总内存大小,Oracle 数据库会根据需要在 SGA 和实例 PGA 之间动态交换内存以满足处理需求。这种能力称为自动内存管理。使用这种内存管理方法,数据库还可以动态调整各个 SGA 组件的大小和各个 PGA 的大小。Oracle 建议对 SGA 和 PGA 内存的总大小小于或等于 4 GB 的数据库进行自动内存管理。

手动内存管理

如果您希望更直接地控制单个内存组件的大小,您可以禁用自动内存管理并将数据库配置为手动内存管理。有几种不同的方法可用于手动内存管理。其中一些方法保留了一定程度的自动化。因此,这些方法在 DBA 所需的工作量和知识方面有所不同。这些方法是:

  • 自动共享内存管理 - 用于 SGA

  • 手动共享内存管理 - 用于 SGA

  • 自动 PGA 内存管理 - 用于实例 PGA

  • 手动 PGA 内存管理 - 用于实例 PGA

本章稍后将介绍这些内存管理方法。

如果您使用数据库配置助手 (DBCA) 创建数据库并选择基本安装选项,则会在系统内存小于或等于 4 GB 时启用自动内存管理。当系统内存大于 4 GB 时,禁用自动内存管理,启用自动共享内存管理。如果您选择高级安装,那么 DBCA 允许您选择自动内存管理或自动共享内存管理。

当 SGA 和 PGA 内存的总大小为 4 GB 或更大时,Oracle 建议自动进行共享内存管理。

笔记:

管理内存的最简单方法是使用 Oracle Enterprise Manager Database Express (EM Express) 或 Oracle Enterprise Manager Cloud Control (Cloud Control) 的图形用户界面。

内存架构概述

与 Oracle 数据库相关的基本内存结构包括:

  • 系统全局区域 (SGA)

    SGA 是一组共享内存结构,称为SGA 组件,其中包含一个 Oracle 数据库实例的数据和控制信息。SGA 由所有服务器和后台进程共享。存储在 SGA 中的数据示例包括缓存数据块和共享 SQL 区域。

  • 计划全球区 (PGA)

    PGA 是一个内存区域,其中包含服务器进程的数据和控制信息。它是 Oracle 数据库在服务器进程启动时创建的非共享内存。对 PGA 的访问是服务器进程独有的。每个服务器进程都有一个 PGA。后台进程也分配它们自己的 PGA。为连接到 Oracle 数据库实例的所有后台和服务器进程分配的总 PGA 内存称为总实例 PGA 内存,所有单个 PGA 的集合称为总实例 PGA,或仅称为实例 PGA。

 Oracle 数据库内存结构

 

从 Oracle Database 12 c第 1 版 (12.1.0.2) 开始,大表缓存允许串行查询和并行查询使用缓冲区缓存。大表缓存有助于在数据仓库环境中有效缓存大表,即使这些表不完全适合缓冲区缓存。表扫描可以在以下场景中使用大表缓存:

  • 并行查询

    在单实例和Oracle Real Application Clusters(Oracle RAC)数据库中,当DB_big_table_cache_PERCENT_TARGET初始化参数设置为非零值,并且parallel_DEGREE_POLICY设置为AUTO或ADAPTIVE时,并行查询可以使用大表缓存。

  • 串行查询

    仅在单实例配置中,当DB_BIG_TABLE_CACHE_PERCENT_TARGET初始化参数设置为非零值时,串行查询可以使用大表缓存。

 

关于自动内存管理

管理实例内存的最简单方法是允许 Oracle 数据库实例为您自动管理和调整它。为此(在大多数平台上),您只需设置目标内存大小初始化参数 ( MEMORY_TARGET) 和可选的最大内存大小初始化参数 ( MEMORY_MAX_TARGET)。

 

基于memory_TARGET的值,实例使用的总内存保持相对恒定,实例自动在系统全局区域(SGA)和实例程序全局区域(PGA)之间分配内存。随着内存需求的变化,实例会在SGA和实例PGA之间动态重新分配内存。

如果未启用自动内存管理,则必须手动调整SGA和实例PGA的大小。

因为MEMORY_TARGET初始化参数是动态的,所以您可以随时更改MEMORY_TARGET,而无需重新启动数据库。MEMORY_MAX_TARGET不是动态的,它是一个上限,以便您不会意外地将MEMORY_TARGET设置得太高,并为数据库实例预留足够的内存,以防将来需要增加总实例内存。由于某些SGA组件无法轻松收缩或必须保持最小大小,因此该实例还可以防止将MEMORY_TARGET设置得太低。

笔记:

  • 如果数据库实例的总物理内存大于 4 GB,则在数据库安装和创建过程中不能指定 Automatic Memory Management 选项。Oracle 建议您在此类环境中使用自动共享内存管理。

  • LOCK_SGA如果初始化参数为TRUE,则无法启用自动内存管理。

启用自动内存管理

如果您在创建数据库时没有启用自动内存管理(通过在 DBCA 中选择适当的选项或通过为CREATE DATABASESQL 语句设置适当的初始化参数),那么您可以在以后启用它。启用自动内存管理涉及关闭和重新启动数据库。

要启用自动内存管理:

  1. 启动SQL*Plus并使用SYSDBA管理权限连接到Oracle数据库实例。

  2. 计算最小值MEMORY_TARGET如下:

通过输入以下SQL*Plus命令,以MB为单位确定SGA_TARGET和PGA_AGGREGATE_TARGET的当前大小:

SHOW PARAMETER SGA_TARGET

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------
sga_target                           big integer 272M

SHOW PARAMETER PGA_AGGREGATE_TARGET

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------
pga_aggregate_target                 big integer 90M

运行以下查询以确定自数据库启动以来分配的最大实例PGA(MB):

SELECT VALUE/1048576 FROM V$PGASTAT WHERE NAME='maximum PGA allocated';

计算步骤2b的查询结果与PGA_AGGREGATE_TARGET之间的最大值。将SGA_TARGET添加到此值。

MEMORY_TARGET = SGA_TARGET + MAX(PGA_AGGREGATE_TARGET, MAXIMUM PGA ALLOCATED)

例如,如果如上所示,SGA_TARGET为272M,PGA_AGGREGATE_TARGET为90M,并且如果分配的最大PGA确定为120M,则MEMORY_TARGET应至少为392M(272M+120M)。

3、选择要使用的MEMORY_TARGET值。

这可以是您在步骤2中计算的最小值,或者如果有足够的可用物理内存,您可以选择使用更大的值。

4、对于MEMORY_MAX_TARGET初始化参数,决定在可预见的将来要分配给数据库的最大内存量。也就是说,确定SGA和实例PGA大小之和的最大值。此数字可以大于或等于您在上一步中选择的MEMORY_TARGET值。

5、Do one of the following:执行以下操作之一:

如果使用服务器参数文件启动Oracle数据库实例(如果使用数据库配置助手(DBCA)创建数据库,这是默认值),请输入以下命令:

ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE;

其中n是您在步骤4中计算的值。

SCOPE=SPFILE子句仅在服务器参数文件中设置值,而不是为正在运行的实例设置值。必须包含此SCOPE子句,因为MEMORY_MAX_TARGET不是动态初始化参数。

如果使用文本初始化参数文件启动实例,请手动编辑该文件,使其包含以下语句:

memory_max_target = nM
memory_target = mM

其中n是在步骤4中确定的值,m是在步骤3中确定的数值。

注意:在文本初始化参数文件中,如果省略了MEMORY_MAX_TARGET的行,并包含MEMORY-TARGET的值,则数据库会自动将MEMORY_MAX_TARGET设置为MEMORY _TARGET的值。如果省略MEMORY_TARGET的行,并包含MEMORY_MAX_TARGET的值,则MEMORY-TARGET参数默认为零。启动后,可以将MEMORY_TARGET动态更改为非零值,前提是它不超过MEMORY_MAX_TARGET的值。

6、Shut down and restart the database.

7、如果使用服务器参数文件启动Oracle数据库实例,请输入以下命令:

ALTER SYSTEM SET MEMORY_TARGET = nM;
ALTER SYSTEM SET SGA_TARGET = 0;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;

其中n是您在步骤3中确定的值。

监控和调整自动内存管理

动态性能视图V$MEMORY_DYNAMIC_COMPONENTS显示所有动态调整的内存组件的当前大小,包括 SGA 和实例 PGA 的总大小。

  • 查询视图V$MEMORY_TARGET_ADVICE以获取初始化参数 MEMORY_TARGET的调整建议。

例如,运行以下查询:

SQL> select * from v$memory_target_advice order by memory_size; 
 
MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR VERSION 
----------- ------ ------------ ---- --------------- ---------- 
        180 .5 458 1.344 0 
        270 .75 367 1.0761 0 
        360 1 341 1 0 
        450 1.25 335 .9817 0 
        540 1.5 335 .9817 0 
        630 1.75 335 .9817 0
        720 2 335 .9817 0

MEMORY_SIZE_FACTOR为1的行显示内存的当前大小(由MEMORY_TARGET初始化参数设置),以及完成当前工作负载所需的DB时间量。在前面和后面的行中,结果显示了几个可选的MEMORY_TARGET大小。对于每个可选大小,数据库显示大小因子(当前大小的倍数),以及如果将MEMORY_TARGET参数更改为可选大小,则完成当前工作负载所需的估计DB时间。请注意,对于小于当前memory_TARGET大小的总内存大小,估计的DB时间会增加。还要注意,在这个示例中,将总内存大小增加到450MB以上并没有什么好处。但是,如果尚未运行完整的工作负载,这种情况可能会发生变化。

EM Express提供易于使用的图形内存顾问,帮助您选择memory_TARGET的最佳大小。有关详细信息,请参阅Oracle Database 2 Day DBA。

手动配置内存

暂略。。。。。。。。。

内存管理数据字典视图

一组动态性能视图提供有关内存管理的信息。

 
看法描述

V$SGA

显示有关系统全局区域 (SGA) 的摘要信息。

V$SGAINFO

显示 SGA 的大小信息,包括不同 SGA 组件的大小、粒度大小和可用内存。

V$SGASTAT

显示有关如何在共享池、大型池、Java 池和 Streams 池中分配内存的详细信息。

V$PGASTAT

显示 PGA 内存使用统计信息以及有关自动 PGA 内存管理器启用时(即PGA_AGGREGATE_TARGET设置时)的统计信息。V$PGASTAT自实例启动以来 累积的累积值。

V$MEMORY_DYNAMIC_COMPONENTS

显示所有自动调整和静态内存组件的当前大小信息,以及每个组件上发生的最后一次操作(例如,增长或收缩)。

V$SGA_DYNAMIC_COMPONENTS

显示所有 SGA 组件的当前大小,以及每个组件的最后操作。

V$SGA_DYNAMIC_FREE_MEMORY

显示有关可用于未来动态 SGA 调整大小操作的 SGA 内存量的信息。

V$MEMORY_CURRENT_RESIZE_OPS

显示有关当前正在进行的调整大小操作的信息。调整大小操作是 SGA、实例 PGA 或动态 SGA 组件的放大或缩小。

V$SGA_CURRENT_RESIZE_OPS

显示有关当前正在进行的动态 SGA 组件大小调整操作的信息。

V$MEMORY_RESIZE_OPS

显示有关最近 800 次已完成的内存组件调整大小操作的信息,包括 和 的自动增长和收缩SGA_TARGET操作PGA_AGGREGATE_TARGET

V$SGA_RESIZE_OPS

显示有关最近 800 次完成的 SGA 组件调整大小操作的信息。

V$MEMORY_TARGET_ADVICE

MEMORY_TARGET如果启用了自动内存管理 ,则显示有助于调整的信息。

V$SGA_TARGET_ADVICE

显示有助于调整的信息SGA_TARGET

V$PGA_TARGET_ADVICE

显示有助于调整的信息PGA_AGGREGATE_TARGET

V$IM_SEGMENTS

显示有关为 IM 列存储中的所有段分配的存储空间的信息。

注意:此视图从 Oracle Database 12 c第 1 版 (12.1.0.2) 开始可用。

 

 

 

 

 

 

 

 

 

 

标签:TARGET,PGA,管理,SGA,实例,内存,MEMORY,oracle
From: https://www.cnblogs.com/wonchaofan/p/16772498.html

相关文章

  • Supervisor进程管理
    1、安装Pip安装:pipinstallsupervisoryum安装:yuminstallsupervisorapt安装:apt-getinstallsupervisor2、简单管理[root@localhost~]#echo_supervisord_conf>/et......
  • 进程及计划任务管理
    1.程序和进程的关系1.1程序保存在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码1.2进程在CPU及内存中运行的程序代码动态执行的代码父、子进程......
  • 设备全生命周期管理,开启设管管理新模式
    01数字化转型对设备管理提出新要求过去四十年,中国制造业取得了飞速发展。当前,中国制造业生产总值已名列世界前列。未来数十年我国将实现从工业大国向工业强国的转变,提高生产......
  • 分享一个查看分析Oracle表空间使用情况的脚本
    个人一直使用下面这个脚本查看、分析Oracle数据库表空间的使用情况,这个脚本经过我不断的调整、完善,已经接近完美了。已经很长时间没有改动过了,个人累积的脚本名为get_table......
  • 达梦数据库体系结构(物理结构、逻辑结构、内存结构、线程结构)
    DM目录数据库安装目录下图展示为DM8数据库目录。  /dm8/bin 目录存放DM数据库的可执行文件,例如disql命令、dminit命令、dmrman工具等。  /dm8/deskto......
  • excel提示内存或磁盘空间不足怎么办
    excel提示内存或磁盘空间不足怎么办 excel提示内存或磁盘空间不足,同时excel标题上面显示的有personnel。网上很多帖子是说在“信任中心”“添加新位置”,实测无效。全盘......
  • supervisor 部署及管理进程
    部署yum-yinstallepel-releaseyum-yinstallsupervisor查看配置systemctlcatsupervisord   修改配置   #主要是内存 文件打开数[root@bogon......
  • 人事管理系统的可行性分析
    1.目的随着企业规模的扩大,企业管理组织会变得越来越庞大和困难,而信息的处理与使用也变得越来越重要,它对于企业的决策者和管理者来说都至关重要,所以人事管理系统应该能够......
  • security 会话并发管理
    一、简介会话指得是浏览器和服务端通过session交互过程二、会话并发管理1、什么是会话并发当前系统中,同一个用户是否可以在多台设备登录,springsecurity默认没有限制,可以在多......
  • Java数组02(内存分析,初始化)
    Java内存分析:数组的三种初始化:静态初始化:int[]a={1,2,3};Man[]mans={newMan(1,1),newMan(2,2)};动态初始化:int[]a=newint[2];a[0]=1;a[1]=2......