当前位置: 首页 > news >正文

ORACLE 在内存管理机制上的演变和进化

截止目前,计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。

将频繁访问的数据尽可能地置于内存中,已成为当前各种软件和应用程序提高数据访问性能,减少访问延迟的最为有效的途径。

分层存储架构

然而,内存作为关键的计算资源,不仅受限于其易失性,一旦电源中断或计算机重新启动,内存中的数据将被重置,保存于其中信息会丢失,

同时相对于大容量存储设备,比如硬盘来说,也受限于其昂贵的价格和有限的容量。

这给许多关键业务数据库系统提出了二个重要问题:

1. 如何在确保卓越性能的同时,有效地管理内存?
2. 以及如何将有限的内存资源有效分配给待处理数据?

因此,如何在内存限制下充分利用数据库的内存管理机制,以实现卓越性能和数据持久性的平衡。已经成为软件设计架构中一个至关重要的挑战。

在解决这一挑战时,数据库的内存管理机制设计起到了至关重要的作用。
数据库系统可以充分利用内存来提高数据的访问性能,

并将数据分成不同的层次,

根据访问频率和重要性将最常用的数据存储在内存中。

这种策略有助于减轻磁盘I/O的负担,从而提高了系统的响应速度。

但是,内存数据的易失性仍然是一个问题。

为了确保数据的持久性,数据库需要实施数据持久化策略,

如事务日志记录和定期快照。

这些策略将内存中的数据变更定时同步到持久性存储介质上,以防止数据丢失。

此外,数据库的内存管理和性能优化也必不可少。

合理的内存分配和性能优化可以确保关键数据始终在内存中得到高效处理,

从而提供更快的查询响应时间,优化用户的体验。

接下我们看下 ORACLE 数据库在内存管理机制上的演变和进化。

Oracle 数据库在40多年的发展过程中,内存管理机制在不同版本中经历了多次演变和进化:

Oracle 7 和 8i

  • Oracle 7 和 8i的内存管理是基于静态参数的设置。DBA需要手动配置SGA和PGA的各个组件的大小,如SHARED_POOL_SIZE、BUFFER_POOL_SIZE、SORT_AREA_SIZE等。

Oracle 9i

  • Oracle 9i 引入了自动共享池管理(ASMM)。DBA需要设置SGA_TARGET参数,然后Oracle数据库会自动调整SGA中的共享池和其他组件的大小。

Oracle 10g

  • Oracle 10g 引入了自动PGA管理。DBA可以设置PGA_AGGREGATE_TARGET参数,数据库会自动管理PGA内存。

Oracle 11g

  • Oracle 11g 改进了ASMM,引入了自动共享池大小调整(Auto SGA)。此外,11g引入了SGA目标和PGA目标,DBA可以设置这些目标参数,而不再需要设置具体的SGA和PGA组件参数。

Oracle 12c

  • Oracle 12c 进一步加强了自动化。引入了内存管理的自动化功能,根据性能指标和工作负载的需求来动态调整内存分配。还引入了In-Memory列存储选项,允许将列存储在内存中以提高查询性能。

Oracle 18c 和 19c

  • 这些版本继续改进了内存管理的自动化,以适应不断变化的工作负载需求。引入了自动调整SGA和PGA大小的机制,以优化性能。

小结:

从Oracle 8i到9i —— 9i解决了PGA的自动管理。

从Oracle 9i到10g —— 10g解决了SGA的自动管理。

从Oracle 10g到11g —— 11g解决了整个内存(SGA+PGA)的自动管理。

从Oracle 12c到19c —— 12c引入了内存管理的自动化和 In-Memory列存储。

在Oracle数据库的不同版本中,内存管理方式经历了重要的演变和创新。

在Oracle Database 9i中,PGA可以自动管理,但是各个SGA组件的内存大小必须由数据库管理员(DBA)手动设置,这需要精确的调整和配置。

然而,随着Oracle Database 10g的推出,引入了一项新的选择:自动SGA内存管理。这一功能的引入标志着数据库开始具备内存智能自动化管理的能力,根据实际工作负载情况,在运行时分配和重新分配SGA组件的内存大小。这使得数据库管理变得更加灵活和高效。

在Oracle Database 10g及更高版本中使用自动SGA内存管理时,只需设置SGA_TARGET参数为所期望的SGA总大小,而无需考虑其他繁琐的SGA相关参数。数据库实例会接管具体的SGA设置工作,根据工作负载的需求为各个SGA池分配内存,并经过一段时间的运行后,还会根据实际情况智能地调整各个池的大小。

随着时间的推移,Oracle Database 11g再次带来了一项创新,即自动共享内存管理(Auto Shared Memory Management)【ASMM】,同时基于 ASMM 拓展出了自动内存管理 Automatic Memory Management【AMM】。

采用自动内存管理时,数据库实例不仅会利用自动SGA内存管理和自动PGA内存管理,还会根据工作负载的需要自动确定SGA和PGA的最佳大小,并在必要时进行自动调整。这使得数据库的性能优化变得更加智能和自动化。

在Oracle Database 11g及更高版本中,使用自动内存管理变得更加简单,只需设置MEMORY_TARGET参数即可。

数据库实例会智能地确定最佳的SGA和PGA大小,然后分别使用自动SGA内存管理和自动PGA内存管理来适当地配置它们内部的各个组件。

同样,随着时间的推移,数据库还会根据工作负载的变化自动调整SGA和PGA的分配,无需手动干预。

在ORACLE自动内存管理中涉及到的数据库参数包括:

  • memory_max_target
  • memory_target
  • sga_max_size
  • sga_target
  • pga_aggregate_target

如何启用自动内存管理?
方式一:在DBCA图形界面创建数据库时,可以选择“使用自动共享内存管理”。

注意:当服务器配置的内存超过4GB时,在12.2之前版本中会出现告警提示不建议使用AMM。但是从12.2开始,当主机内存大于4GB就会直接报错不允许使用自动内存管理模式,无法继续安装数据库了。

在这里插入图片描述

对此MOS文档做了说明:

12.2: [INS-35178] The Automatic Memory Management Option Is Not Allowed During RunInstaller or Using DBCA If Physical Memory Is Greater Than 4G. (文档 ID 2244817.1)

因此当服务器配置的内存超过4GB时(现在的服务器内存配置基本上都会超过4GB),应当选择自动共享内存管理(Auto Shared Memory Management)【ASMM】模式。

安装时内存管理选项
方式二:可以通过以下两个参数之一启用

  • memory_target:定义sga和pga总和的上限
  • memory_max_taregt:定义memory_target的上限

如何查看 ORACLE 是否使用了自动内存管理?
要查看Oracle数据库是否使用了自动内存管理(AMM)还是自动共享内存管理(ASMM),您可以执行以下步骤:

  1. 使用DBA账户登录到Oracle数据库。

  2. 打开SQL*Plus或SQL开发工具,以便执行SQL查询。

  3. 运行以下SQL查询来查看数据库的内存管理方式:

SELECT name, value
FROM v$parameter
WHERE name LIKE 'memory_target' OR name LIKE 'sga_target';

在这里插入图片描述

此查询将显示与内存管理相关的参数及其值。

如果查询结果中包含MEMORY_TARGET参数,那么数据库正在使用自动内存管理(AMM)。

如果查询结果中包含SGA_TARGET参数,那么数据库正在使用自动共享内存管理(ASMM)。

如果两者都存在,说明数据库同时启用了AMM和ASMM。

请注意,要查看和更改这些参数,您需要具有DBA权限或系统管理员权限。

不建议在生产环境中随意更改这些参数,因为它们可能会影响数据库的性能和稳定性。

如果需要更改这些参数,请在详细了解其影响和进行充分测试之后由专业DBA谨慎操作。

无论是采用自动内存管理还是手动内存管理,都可以观察到内存分配是基于一种称为"颗粒度(granule)"的单位进行的。

颗粒度是一种最小的内存分配单位,通常大小为4MB、8MB或16MB。

这种颗粒度单位的使用使内存管理更加灵活,尤其是在SGA大小的调整方面。

通过下面的SQL语句查询 V$SGA_DYNAMIC_COMPONENTS 视图,

SELECT component, TO_NUMBER(granule_size) / 1024 / 1024 AS granule_size_MB
FROM v$sga_dynamic_components;

可以查看各个池中的颗粒大小,这有助于了解内存分配的细节。

实际上,还可以使用这个视图来查看SGA总大小如何影响颗粒大小。

当前系统使用 ASMM(自动共享内存管理模式),通过参数 SGA_TARGET 来控制 SGA的大小。

当 SGA 小于1GB 时,内存管理颗粒度为 4MB;

当 SGA 设置为超过 1GB 时,内存管理颗粒度为 16MB;

查询SGA信息
查询内存颗粒度动态视图
可以看到当 SGA 设置为 8GB 时,Oracle 会以 16MB 的颗粒度为内存池分配空间,所以内存池的大小都将是16MB 的某个倍数。

总之,Oracle数据库的内存管理机制在不同版本中经历了重要的创新,从手动设置逐渐演化为自动智能管理。

这些创新不仅提高了数据库性能,还减轻了DBA的管理负担,使数据库系统更加适应不断变化的工作负载需求。

相关文章:

ORACLE 在内存管理机制上的演变和进化

截止目前,计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中,已成为当前各种软件和应用程序提高数据访问性能,减少访问延迟的最为有效的途径。 然而,内存作为关键的计算资源&am…...

Linux ❀ 进程出现process information unavailable时的消除方法

[rootmaster ~]# jps 74963 -- process information unavailable 78678 Jps [rootmaster ~]# cd /tmp/hsperfdata_redhat/ # redhat为启动该java进程的用户ps -ef | grep $pid查找 [rootmaster hsperfdata_redhat]# ll total 32 -rw------- 1 redhat redhat 32768 Sep 27 15:…...

ps智能填充功能平替:alpaca的安装和使用

为了解决ps beta 智能填充无法使用的问题,需要用alpaca来平替,下面是安装教程: 安装方法: 1、下载插件。 alpaca插件汉化-夸克网盘https://pan.quark.cn/s/1168b447a44e#/list/share 2、 根据使用的PS版本,选择对应文件…...

【前端打怪升级日志之ES6篇】玩转函数

学习资料 阮一峰老师《ECMAScript 6 入门》— 函数的扩展 总结应用 1. 函数参数默认值与对象解构赋值默认值的结合使用 // 场景:方法调用时传参希望只传第二个参数 // 方案1: function foo({x1,y2}){console.log(x,y); } foo({}) //1 2 foo({x:2}) /…...

网址静态码手机制作教程,附图文详解!

网址的静态码是如何生成的呢?静态码是二维码的一种常用类型,一般常见的静态码类型主要是文本或者网址,那么在电脑制作静态码的方法相信很多小伙伴都知道怎么做,那么手机上制作的方法,大家感兴趣吗?下面来给…...

服务器性能测试监控平台export+prometheus(普罗米修斯)+grafana搭建

1. export 数据采集工具 简介: export是prometheus是的数据采集组件的总称,它可以将采集到的数据转为prometheus支持的格式 node_export: 用来监控服务器硬件资源的采集器,端口号为9100mysql_export: 用来监控mysql数据库资源的采集器&…...

【24种设计模式】责任链模式

责任链模式是一种行为设计模式,它允许你将请求沿着处理链进行传递,直到有一个处理者能够处理该请求为止。这种模式将请求的发送者和接收者解耦,使多个对象都有机会处理该请求。 责任链模式的结构 责任链模式由以下几个角色组成:…...

C#异步委托的三种实现 BeginInvoke / EndInvoke / IsCompleted

本文将介绍C#异步委托的三种实现方式,并给出相关示例代码及解析。 注意事项 用委托开启线程的前提是:创建项目时必须选择“.NET Framework",如果选择的是”.Net Core“,在调用BeginInvoke时,系统会报错”Operati…...

在HTTP请求中安全传输base64编码的字符串

前言 base64是一种常见的的编码格式,它可以把二进制数据编码成一个由大小写英文字母(a-zA-Z)、阿拉伯数字(0-9),以及三个特殊字符、/、组成的字符串。 问题 但是在URL传输中,、/、这三个特殊…...

05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别

在前面的一些章节中,我们已经讲如何准备打标签的素材、如何制作标签、如何训练以及得到我们最终需要的用于YOLO目标识别的模型。那么现在我们就要正式开始,利用我们训练得到的best.pt,这个模型文件来对图片视频进行识别。 1、基本思路 公安交管场景中,我们经常会遇到需要…...

LeetCode算法题---第3天

注:大佬解答来自LeetCode官方题解 121.买卖股票的最佳时期 1.题目 2.个人解答 function maxProfit(prices) {//更新最低价格和最大利润let minPrice prices[0];let maxProfit 0;for (let i 1; i < prices.length; i) {// 如果当前价格比最低价格还低&#xff0c;更新最…...

欧洲FBA专线海运与陆运的差别

随着全球电商市场的快速发展&#xff0c;越来越多的卖家选择将产品销售到欧洲市场。然而&#xff0c;面对欧洲境内的物流问题&#xff0c;卖家们往往会面临一个重要的选择&#xff1a;选择欧洲FBA专线时是选择海运还是陆运?这两种运输方式在时效、成本和服务质量上都有所不同&…...

UDS诊断

一、UDS诊断简介 汽车诊断技术是指在不拆卸车辆的情况下&#xff0c;通过读取车辆在运行过程中所记录的数据或故障码来查明故障原因&#xff0c;并确定故障部位的汽车应用技术。通过诊断&#xff0c;可以快速检测到汽车故障来提高汽车安全性和维修效率。 USD协议诊断主要采用“…...

计算材料学学习记录1

计算材料学学习记录1 平台&#xff1a;Bohrium 老师&#xff1a;单斌教授 文章目录 1.发展史背景计算材料学 2.计算方法分类3.计算材料学的应用 1.发展史 背景 材料的研究方法发展&#xff1a; 一切靠实验理论开始起作用理论撑起半边天 “……解决全部化学的规律的数学方法…...

PHP8中的构造方法和析构方法-PHP8知识详解

今日分享的内容是php8中的构造方法和析构方法&#xff0c;我们把构造方法和析构方法这两个方法分开来讲&#xff1a; 1、构造方法 构造方法存在于每个声明的类中&#xff0c;主要作用是执行一些初始化任务。如果类中没有直接声明构造方法&#xff0c;那么类会默认地生成一个没…...

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目 &#x1f34a;前言&#x1f438;方法一-CUDA Runtime生成&#x1f61d;debug设置 &#x1f345;方法二-空项目配置&#x1f349;&#x1f349;&#x1f349;代码验证 &#x1f34a;前言 cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果…...

MySQL面试题-索引的基本原理及相关面试题

先了解一下MySQL的结构 下面我们重点讲一下存储引擎 MySQL的数据库和存储数据的目录是一一对应的&#xff0c;这些数据库的文件就保存在磁盘中对应的目录里 下面我们来看一下对应的具体数据文件 .frm是表的结构&#xff0c;不管什么样的索引都会有 .ibd代表我们现在使用的存…...

MySQL学习笔记19

MySQL日志文件&#xff1a;MySQL中我们需要了解哪些日志&#xff1f; 常见日志文件&#xff1a; 我们需要掌握错误日志、二进制日志、中继日志、慢查询日志。 错误日志&#xff1a; 作用&#xff1a;存放数据库的启动、停止和运行时的错误信息。 场景&#xff1a;用于数据库的…...

为什么u盘在mac上显示不出来

插入U盘是个看似简单的操作&#xff0c;但有时候在Mac电脑上却出现了无法显示U盘的情况。这样的问题是非常让人头疼的&#xff0c;特别是当你急需使用U盘中的文件时。那么&#xff0c;究竟为什么U盘在Mac上会显示不出来呢&#xff1f;今天就让我们一起来深入了解一下这个问题&a…...

【golang】调度系列之sysmon

调度系列 调度系列之goroutine 调度系列之m 调度系列之p 在golang的调度体系中&#xff0c;除了GMP本身&#xff0c;还有另外一个比较重要的角色sysmon。实际上&#xff0c;除了GMP和sysmon&#xff0c;runtime中还有一个全局的调度器对象。但该对象只是维护一些全局的数据&…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...