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) 开始可用。

 

 

 

 

 

 

 

 

 

 

posted @ 2022-10-09 16:03  wongchaofan  阅读(890)  评论(0编辑  收藏  举报