当前位置: 首页 > 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中还有一个全局的调度器对象。但该对象只是维护一些全局的数据&…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...