Oracle内存管理

news2025/4/10 10:21:22

文章目录

      • 概念
      • 内存管理方式
        • 自动内存管理
        • 自动共享内存管理
        • 手工内存管理
      • 内存管理的转换方式
      • 相关内存参数
      • 相关数据字典

概念

为满足数据库的需求,通过内存管理来维护 Oracle 实例内存结构的最优大小。Oracle数 据库基于与内存相关的初始化参数设置来管理内存。

在这里插入图片描述

内存管理方式

自动内存管理

自动内存管理(Automatic memory management) 指定实例内存的目标大小,自动管理SGA内存和实例PGA内存。数据库实例自动优化到这个目标内存大小,根据需要在 SGA 和 PGA 实例之间重新分配内存。( memory_target)、Oracle推荐对SGA和PGA内存总大小 小于或等于4GB的数据库进行自动内存管理。

在实现自动内存管理时,只需要设置目标内存大小初始化参数(MEMORY_TARGET)和可选的最大内存大小初始化参数(MEMORY_MAX_TARGET),根据MEMORY_TARGET的值,会自动分配内存给给SGA和PGA,当需求发生变化时,也会动态调整SGA和PGA的值。

启用自动内存管理

1.计算memory_target的最小值
确定sga_target和pga_aggregate_target的当前大小
show parameter sga_target;
show parameter pga_aggregate_target;

确定自数据库启动以来分配的最大实例PGA(以兆字节为单位):
select value/(1024*1024) max_allocated_MB from v$pgastat where name = ‘maximum PGA allocated’;

计算MEMORY_TARGET的最小值
MEMORY_TARGET >= SGA_TARTGET + MAX(PGA_AGGREGATE_TARGET,maximum PGA allocated)

2.设置最大值
target_memory确定一个值,可以是最小值,如果有足够的内存可以使用,也可以设置最大值
MEMORY_MAX_TARGET初始化参数,决定分配给数据库的最大内存量(SGA+PGA的最大值)
MEMORY_MAX_TARGET参数的设置大于等于MEMORY_TARGET

自动共享内存管理

自动共享内存管理(Automatic shared memory management) 设置一个 SGA 的目标大小,然后设置 PGA 总目 标大小,SGA_TARGET初始化参数指定一个实例可用的SGA内存总量,Oracle数据库会自动在各种SGA组件之间分配这些内存,以确保最有效的内存利用率。如果数据库使用的参数文件是SPFILE,数据库会记住实例关闭时自动调优的SGA组件的大小。因此,数据库实例不需要在每次实例启动时再次学习工作负载的特征。实例可以从前一个实例的信息开始,并继续评估上一次关闭时停止的工作负载。

启动自动共享内存管理
通过将SGA_TARGET初始化参数设置为非零值,可以启用自动共享内存管理特性。该参数设置SGA的总大小。
如: alter system set sga_target=100M;

当设置SGA_TARGET时,一些SGA组件会自动调整大小
The shared pool SHARED_POOL_SIZE
The large pool LARGE_POOL_SIZE
The Java pool JAVA_POOL_SIZE
The buffer cache DB_CACHE_SIZE
The Streams pool STREAMS_POOL_SIZE

1.获取sga_target的值
select (
(select sum(value) from v s g a ) − ( s e l e c t c u r r e n t s i z e f r o m v sga) - (select current_size from v sga)(selectcurrentsizefromvsga_dynamic_free_memory) ) “SGA_TARGET” from dual;

2.设置SGA_TARGET的值
alter system set sga_target=xxx;
为了实现更完整的自动调优,请将自动调整大小的SGA组件的值设置为零
alter system set shared_pool_size=0;
alter system set large_pool_size=0;
alter system set java_pool_size=0;
alter system set streams_pool_size=0;
alter system set db_cache_size=0;

手工内存管理

手工内存管理(Manual memory management) 不必设置总的内存大小,但需要设置许多初始化参数,以单独管理 SGA 和 PGA 实例中的 各个组件。

内存管理的转换方式

AMM---->ASMM

Oracle 会根据当前 SGA 内存使用情况自动设置 SGA_TARGET
alter system set memory_target=0;
当 memory_target=0,根据 AMM 所设置的 sga_target 和 pga_aggregate_target 的值来设置ASMM 的 sga_target 和 pga_aggregate_target,Oraccle 会自动调整SGA 的组件

ASMM----->AMM
将sga_target和pga_aggregate_target设置为0,并设置memory_target的大小
alter system set memory_target=896M;
alter system set sga_target=0;
alter system set pga_aggregate_target=0;

手动----->ASMM
基于当前值计算 SGA_TARGET 值

select ((select sum(value) from v$sga)-(select current_size from v$sga_dynamic_free_memory)) "sga_target " from dual;

sga_target
-----------
  838858864

2)alter system set sga_target=422670336;
3)将 SGA 组件初始化参数设置为 0
alter system set streams_pool_size=0;
alter system set shared_pool_size=0;
alter system set large_pool_size=0;
alter system set java_pool_size=0;
alter system set db_cache_size=0;

相关内存参数

memory_max_target 内存最大值
memory_target 内存目标值
sga_max_size SGA的最大值
sga_min_size SGA最小值
sga_target SGA的目标值
pga_aggregate_target PGA的目标值
db_16k_cache_size 16K块的大小
db_2k_cache_size 2K块的大
db_32k_cache_size 32K块的大
db_4k_cache_size 4K块的大
db_8k_cache_size 8K块的大
db_cache_size 高速缓冲区的大小
db_keep_cache_size keep缓冲池 ,让表长期保存在内存区中,提高查询速度
db_recycle_cache_size 从内存中清除数据缓存
log_buffer 日志缓冲区大小
java_pool_size Java池大小
large_pool_size 大池大小
shared_pool_size 共享池大小
streams_pool_size 流池大小
bitmap_merge_area_size 位图大小
inmemory_size inmemory区大小

相关数据字典

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

v$sgainfo 显示有关SGA的大小信息,包括不同SGA成分的大小、和可用内存

v$sga_target_advice SGA的建议值

v$pga_target_advice PGA的建议值

v$memory_target_advice 内存的建议值

在以下动态性能视图中可以查看工作区域内存的分配和使用统计数据:
V S Y S S T A T V SYSSTAT V SYSSTATVSESSTAT
V P G A S T A T V PGASTAT V PGASTATVSQL_WORKAREA
V$SQL_WORKAREA_ACTIVE

V$PROCESS视图中的以下三列报告了Oracle数据库进程所分配和使用的PGA内存:
PGA_USED_MEM
PGA_ALLOC_MEM
PGA_MAX_MEM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】654. 最大二叉树

1.问题 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最…

美颜SDK的隐私保护与安全性分析

随着智能手机和移动应用的普及,美颜SDK已经成为了很多应用的标配。美颜SDK的使用可以让用户在拍照或者视频聊天时,实现自拍美颜、滤镜、磨皮、瘦脸等效果。但是,在享受美颜SDK带来的便利的同时,我们也需要关注美颜SDK的隐私保护与…

跟着排序学时间复杂度

带着排序学时间/空间复杂度 排序和时间复杂度 带着排序学时间/空间复杂度冒泡排序选择排序选择排序法2原理: 插入排序希尔排序(缩小增量排序)堆排序快速排序归并排序不基于比较的排序计数排序 桶排序稳定性 时间复杂度是打开数据结构大门的第…

从0搭建Vue3组件库(十二):引入现代前端测试框架 Vitest

Vitest 是个高性能的前端单元测试框架,它的用法其实和 Jest 差不多,但是它的性能要优于 Jest 不少,还提供了很好的 ESM 支持,同时对于使用 vite 作为构建工具的项目来说有一个好处就是可以公用同一个配置文件vite.config.js。因此本项目将会使用 Vitest 作为测试框架。 安装 …

FS2956A 8V~120V降压5V2A4.2V3A恒压芯片

FS2956A 内置MOS 100V开关降压型DC-DC转换器,FS2956A 8-100V用于电动车 滑板车 液晶仪表 5V-USB充电IC方案2A 概述: FS2956A 是一款支持宽电压输入的开关降压型DC-DC,芯片内置100V/5A功率MOS,最高输入电压90V。FS2956A 具有低待…

初识滴滴交易策略之一:交易市场

初识系列前言 滴滴作为一家共享出行公司,利用信息技术构建了实时的、智能的在线交易市场,在这个庞大运转的市场之中,滴滴秉承着用户价值至上的宗旨,不断通过技术提升来实现更高效的运转效率和更贴心的用户体验。 为了使得大家能够…

蚂蚁实时低代码研发和流批一体的应用实践

摘要:本文整理自蚂蚁实时数仓架构师马年圣,在 Flink Forward Asia 2022 流批一体专场的分享。本篇内容主要分为四个部分: 1. 实时应用场景与研发体系 2. 低代码研发 3. 流批一体 4. 规划展望 Tips:点击「阅读原文」查看原文视频&a…

KingbaseES V8R6备份恢复系列之 -- system-Id不匹配备份故障

​ KingbaseES V8R6备份恢复案例之---system-Id不匹配备份故障 案例说明: 在KingbaseES V8R6执行备份时,在sys_log日志中出现system-id不一致的故障并伴随有归档失败,故障如下图所示: 适用版本: KingbaseES V8R6 一、问…

React 学习笔记

文章目录 React 简介React 特点React 学习前提React 第一个实例 React 简介 React 是一个用于构建用户界面的 JAVASCRIPT 库。 React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。 React 起源于 Facebook 的内部项目,用…

Flink窗口

目录 窗口 Flink “存储桶” 窗口分类 按照驱动类型分类 按照窗口分配数据的规则分类 滚动窗口 滑动窗口 会话窗口 全局窗口 窗口的生命周期 窗口 窗口:将无限数据切割成有限的“数据块”进行处理,以便更高效地处理无界流 在处理无界数据流时…

3.1 掌握绘图基础语法与常用参数

3.1 掌握绘图基础语法与常用参数 3.1.1 掌握pyplot基础语法1.创建画布与创建子图2.添加画布内容3.保存与展示图形 3.1.2 设置pyplot的动态rc参数线条常用的rc参数 Matplotlib库介绍 Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表…

实验二十、压控电压源二阶 LPF 幅频特性的研究

一、题目 研究压控电压源二阶低通滤波电路品质因数 Q Q Q 对频率特性的影响。 二、仿真电路 电路如图1所示。集成运放采用 LM324AJ,其电源电压为 15V。 图 1 压控电压源二阶低通滤波电路幅频特性的测试 图1\,\,压控电压源二阶低通滤波电路幅频特性的测试 图1压控…

记录一次重装系统配置工作环境

128G固态换大硬盘,偷懒不想重装系统,利用diskgenius迁移系统,热迁移和PE都没能成功迁移,还不小心删掉了机械盘的所有分区。利用diskgenius搜索分区,恢复文件,勉强把一些数据文件保存下来了。但是软件又得重…

DOM是什么(DOM的节点类型)

学到DOM时,看到关于文档(结构树)、节点(node)、和DOM提供的一些方法获取(找到)所需的节点、还有DOM属性,我很混乱,我无法弄清节点的关系层级属性和方法的关系&#xff0c…

SQL常用语句总结

一,简介 1.1 数据库是用来存放数据的,对数据库的操作需要用到SQL语句 1.2 数据库种类有也非常多: 关系型数据库: Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、SQLite 非关系型数据库: NoSql、Cl…

Vue Cli 之 环境变量和模式

一、环境变量 ​ 我们在使用 Vue-cli 创建的Vue项目中,可以在构建和运行时为项目设置环境变量,这些环境变量会根据环境(模式)的不同,而自动注入到项目中,也就是说我们可以根据环境不同,设置不同…

二进制单节点搭建 Kubernetes v1.20

目录 第一章.操作系统初始化配置 1.1.安装环境部署 1.2.部署 docker引擎 第二章.部署 etcd 集群 2.1.ETCD简述 2.2.准备签发证书环境 在 master01 节点上操作 2.3. 生成Etcd证书​​​​​​​ 2.4.在 node01 节点上操作 在 node02 节点上操作 2.5.部署 Master 组件…

SpringBoot ( 四 ) 接值

2.5.接值 通过方法的参数来接收请求传来值 请求时传值的方式有三种方式 : URL?namevalueform表单Ajax 异步传值 接收传来的值有三类 : 单一值对象数组 2.5.0.传值 2.5.0.1.URL?传值 URL?标识1值1&标识2值2 URL后面使用 ? 连接参数, 每组参数使用 连接标识与值, 多…

10.过滤器

过滤器是做文本格式化的,只能用在 插值表达式 与 v-bind 上,在vue3中已经被弃用了,这里我简单记录一下并写一下在vue3的替代方法 目录 1 基本使用 1.1 vue2中的写法 1.2 vue3的替代 2 私有过滤器与全局过滤器 2.1 vue2的写法 2.2…

shell脚本----数组

文章目录 一、数组定义的方法二、数组的操作2.1 数组的输出2.2 删除数组2.3 数组切片2.4 数组的替换2.5 判断数组中是否有空值2.6 追加函数2.7 向函数传入参数 一、数组定义的方法 数组定义的规则 数组中的每个元素分分隔符一定为空格隔开每个元素都拥有与其对应的下标&#…