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 DATABASE
SQL 语句设置适当的初始化参数),那么您可以在以后启用它。启用自动内存管理涉及关闭和重新启动数据库。
要启用自动内存管理:
启动SQL*Plus并使用SYSDBA管理权限连接到Oracle数据库实例。
- 计算最小值
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。
手动配置内存
暂略。。。。。。。。。
内存管理数据字典视图
一组动态性能视图提供有关内存管理的信息。
看法 | 描述 |
---|---|
显示有关系统全局区域 (SGA) 的摘要信息。 |
|
显示 SGA 的大小信息,包括不同 SGA 组件的大小、粒度大小和可用内存。 |
|
显示有关如何在共享池、大型池、Java 池和 Streams 池中分配内存的详细信息。 |
|
显示 PGA 内存使用统计信息以及有关自动 PGA 内存管理器启用时(即 |
|
显示所有自动调整和静态内存组件的当前大小信息,以及每个组件上发生的最后一次操作(例如,增长或收缩)。 |
|
显示所有 SGA 组件的当前大小,以及每个组件的最后操作。 |
|
显示有关可用于未来动态 SGA 调整大小操作的 SGA 内存量的信息。 |
|
显示有关当前正在进行的调整大小操作的信息。调整大小操作是 SGA、实例 PGA 或动态 SGA 组件的放大或缩小。 |
|
显示有关当前正在进行的动态 SGA 组件大小调整操作的信息。 |
|
显示有关最近 800 次已完成的内存组件调整大小操作的信息,包括 和 的自动增长和收缩 |
|
显示有关最近 800 次完成的 SGA 组件调整大小操作的信息。 |
|
|
|
显示有助于调整的信息 |
|
显示有助于调整的信息 |
|
显示有关为 IM 列存储中的所有段分配的存储空间的信息。 注意:此视图从 Oracle Database 12 c第 1 版 (12.1.0.2) 开始可用。 |
oracle内存管理的更多相关文章
- Oracle内存管理技术
1.Oracle内存管理技术 2.配置自动内存管理(AMM) 3.监视自动内存管理(AMM) 4.配置自动共享内存管理(ASMM) 5.配置自动PGA内存管理 Reference 1.Oracle内存 ...
- 这篇关于Oracle内存管理方式的介绍太棒了!我必须要转发,很全面。哈哈~
"Oracle内存管理可分为两大类,自动内存管理和手动内存管理.其中手动内存管理又可分为自动共享内存管理,手动共享内存管理,自动PGA内存管理以及手动PGA内存管理.本文会简单的介绍不同的内 ...
- Oracle 内存管理
--内存分配建库时可以先分配系统内存的50%-80%给Oracle,后期根据业务再进行调整.SGA.PGA分配比例:OLTP:SGA %80 , PGA %20OLAP:SGA %50 , PGA % ...
- Oracle内存管理(五)
[深度分析--eygle]学习笔记 1.4. 2其他内存组件 Large Pool-大池是SGA的一个可选组件,通经常使用于共享server模式(MTS). 并行计算或 RMAN的备份恢复等操作. J ...
- Oracle内存管理(之二)
[深入解析--eygle] 学习笔记 1.2.2 UGA和CGA UGA(用户全局区)由用户会话数据.游标状态和索引区组成.在共享server模式下,一个共享服务进程被多个用户进程共享,此时UGA是S ...
- Oracle内存管理(之五)
[深入解析--eygle]学习笔记 1.4. 2其它内存组件 Large Pool-大池是SGA的一个可选组件,通经常使用于共享server模式(MTS). 并行计算或 RMAN的备份恢复等操作. J ...
- Oracle内存管理(之四)
[深入解析--eygle]学习笔记 1.3 SGA管理 SGA指系统全局区(System Global Area),是一块用于载入数据.对象并保存执行状态和数据库控制信息的一块内存区域,在数据库实例启 ...
- Oracle内存管理方式由amm切换为asmm
(一)ASMM和AMM 在Oracle 10g时,Orale推出ASMM(Automatic Shared Memory Managed),实现了SGA和PGA各自内部的自调节.在Oracle 11g ...
- ORACLE内存管理之ASMM AMM
ORACLE ASMM ORACLE AMM ASMM转换至AMM AMM转换至ASMM
- Oracle内存管理理论篇二
目标 了解oracle内存管理方式 掌握ASMM管理方式 掌握AMM管理方式 监控内存使用 学习一个知识点时,最好先了解其历史.ORACLE近期的版本都对内存管理做了简化,从9i通过PGA_AGGRE ...
随机推荐
- 堆QAQ
L2-012 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are si ...
- tensorrt cuda cudnn 各版本的匹配要求
https://docs.nvidia.com/deeplearning/tensorrt/release-notes/tensorrt-8.html#rel_8-0-3
- 实验:两片ESP8266,分别做客户端和服务器,实现双向收发数据
手机做热点: 每片都做STATION
- The emulator process for AVD Pixel_4_XL_API_30 was killed 问题
转载请注明来源:https://www.cnblogs.com/Sherlock-L/p/14946317.html 问题: 因为工作关系接触到了Android Studio,新建了4和11系统的模拟 ...
- 网站提示:You Don’t Have Permission To Access
测试 apache集成环境访问网站,突然出现错误提示"You don't have permission to access /index.php on this server." ...
- DEDE在文章列表文章没有缩略图的不显示图片,有的则显示缩略图
解决在文章列表文章没有缩略图的不显示图片,有的则显示缩略图在5.3最开始的版本.好象是有这个功能的. 就是在列表里..如果改文章没有缩略图则不显示默认的 没有缩略图的土片.如果有则显示缩略图 但在后续 ...
- python生成一个WAV文件的正弦波
import numpy as np import matplotlib.pyplot as plt T = 1.0 / sample_rate #周期 x = np.arange(0, 1.0, T ...
- unity简单物理系统
目录 技术概述 技术详述 2D物理系统组件 刚体 碰撞器 物理材质 碰撞检测函数 在主角中的使用 移动 长跳跃与短跳跃 二段跳 攀爬(蹬墙跳) 技术使用中遇到的问题和解决过程 技术概述 物理系统,就是 ...
- 【Pr】如何裁剪视频得页面?
[Pr]如何裁剪视频得页面? 选择视频轨道 | 效果 | 裁剪(可以搜索) | 调整上下左右需要裁剪的大小 | 选择缩放,去掉黑边
- SpringCloudEureka上篇
SpringCloudEureka上篇 本文学习自<<重新定义SpringCloud>> Eureka简介 Eureka是Netflix公司开源的一款服务发现组件,该组件提供的 ...