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的管理负担,使数据库系统更加适应不断变化的工作负载需求。

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

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

相关文章

K8S-存储卷,pv,pvc

pv,pvc 一、emptyDir存储卷1.概述2.示例 二、hostPath存储卷1.概述 三、nfs共享存储卷1.在stor01节点上安装nfs,并配置nfs服务2.master节点操作3.在nfs服务器上创建index.html4.master节点操作 四、PVC 和 PV1.概述2.PV和PVC之间的相互作用遵循的生命周期…

基于Java的传统文化宣传平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

python接口自动化(一)--什么是接口、接口优势、类型(详解)

简介 经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚。接下来先看一…

Ci2451-2.4g无线MCU收发芯片

Ci2451 是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分缩短2.4GHz无线产品设计周期并优化产品成本。 添加图片注释,不超过 140 字(可选&#xff…

005:根据股票代码和起始日期获取K线数据

我们改进《001》中的部分,因为他他没法在可视化界面输入信息,这样太麻烦。我们设法在可视化界面输入股票代码和起始日期,这样可以灵活得多。这部分,我们仍旧只获取日K线的数据。 import tkinter as tk from tkinter import messa…

Spring Cloud Gateway实战WebFlux解析请求体及抛出指定错误代码和信息

概述 基于Spring Cloud开发微服务时,使用Spring Cloud原生自带的Gateway作为网关,所有请求都需要经过网关服务转发。 为了防止恶意请求刷取数据,对于业务请求需要进行拦截,故而可在网关服务增加拦截过滤器。基于此,有…

【C语言】快速排序

文章目录 一、hoare版本二、挖坑法三、前后指针法四、非递归快排五、快速排序优化1、三数取中选key值2、小区间优化 六、代码测试 一、hoare版本 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素…

蓝桥杯每日一题2023.9.27

4408. 李白打酒加强版 - AcWing题库 题目描述 题目分析 对于这题我们发现有三个变量,店,花,酒的数量,对于这种范围我们使用DP来进行分析。 dp[i][j][k]我们表示有i个店,j朵花,k单位酒的集合&#xff0c…

Databend 源码阅读:配置管理

作者:尚卓燃(PsiACE)澳门科技大学在读硕士,Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer https://github.com/PsiACE 对于 Databend 这样复杂的数据库服务端程序,往往需要支持大量的可配置选项&am…

PTA程序辅助实验平台——2023年软件设计综合实践_3(分支与循环)

第一题:7-1 印第安男孩 - C/C 分支与循环 朵拉编程的时候也想顺便练习英语。她编程从键盘读入一个整数n,如果n值为0或者1,向屏幕输出“0 indian boy.”或“1 indian boy.”;如果n大于1,比如9,则输出“9 in…

查看Linux系统信息的常用命令

文章目录 1. 机器配置查看2. 常用分析工具3. 常用指令解读3.1 lscpu 4. 定位僵尸进程5. 参考 1. 机器配置查看 # 总核数物理CPU个数x每颗物理CPU的核数 # 总逻辑CPU数物理CPU个数x每颗物理CPU的核数x超线程数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| w…

GaussDB数据库SQL系列-游标管理

目录 一、前言 二、概述(GaussDB) 1、游标概述 2、游标的使用分类 三、GaussDB中的显式游标(示例) 1、显式游标的使用与操作步骤 2、显式游标示例 四、GaussDB中的隐式游标(示例) 1、隐式游标简介…

MySQL基础进阶

文章目录 MySQL基础进阶 约束 \color{red}{约束} 约束约束的概念和分类约束的概念约束的分类 非空约束概念语法 唯一约束概念语法 主键约束概念语法 数据库设计 \color{red}{数据库设计} 数据库设计软件的研发步骤数据库设计概念数据库设计的步骤表关系一对一一对多&#xff08…

Pytest+Allure+Excel接口自动化测试框架实战

1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有用信息。 Allure 是由 Java 语言开发的…

结构型设计模式——桥接模式

摘要 桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。 一、桥接模式的意图 将抽象与实现分离开来,使它们可以独立变化。 二、桥接模式的类图 Abstraction: 定义抽象类的接口Implementor: 定义实现类接口 …

MySQL 的 C 语言接口

1. mysql_init MYSQL *mysql_init(MYSQL *mysql); mysql_init函数的作用:创建一个 MYSQL 对象(该对象用于连接数据库)。 mysql_init函数的参数: ① mysql:MYSQL 结构体指针,一般设置为 NULL 。 mysql_init函…

嵌入式芯片-NE555

目录 1、比较器(运放) 2、相反门(非门) 3、或非门 4、双稳态触发器 5、NE555功能框图 1、比较器(运放) 2、相反门(非门) 3、或非门 4、双稳态触发器 5、NE555功能框图

俞敏洪:董宇辉在北京有房子了!

据媒体报道,9月26日,俞敏洪在直播中透露,董宇辉已经在北京拥有了自己的房子,并且强调这是大家共同努力的结果。 这一消息引起了广泛关注和热议。在此之前,董宇辉曾在公开场合表示,俞敏洪老师为了给他凑钱买…

数据库索引失效

索引失效是指数据库查询在执行过程中无法有效利用索引,导致查询性能下降或索引无法被使用的情况,以下是常见的导致索引失效的原因: 模糊查询以通配符开头,自己都不知道具体要查什么,怎么使用索引呢,所以会导…

输送机使用的常见误区

输送机也称流水线,是指在自动化生产过程中起到运输货物,联通各个生产设备的主要机械设备。但在使用的过程中,很多用户对于输送机的使用存在一定的误区,导致设备故障频出,下面就针对用户已在使用输送机过程中的常见误区…