免费动画模板素材网站,鹤岗做网站,WordPress推荐主机配置,店铺设计软件截止目前#xff0c;计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。
将频繁访问的数据尽可能地置于内存中#xff0c;已成为当前各种软件和应用程序提高数据访问性能#xff0c;减少访问延迟的最为有效的途径。 然而#xff0c;内存作为关键的计算资源计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。
将频繁访问的数据尽可能地置于内存中已成为当前各种软件和应用程序提高数据访问性能减少访问延迟的最为有效的途径。 然而内存作为关键的计算资源不仅受限于其易失性一旦电源中断或计算机重新启动内存中的数据将被重置保存于其中信息会丢失
同时相对于大容量存储设备比如硬盘来说也受限于其昂贵的价格和有限的容量。
这给许多关键业务数据库系统提出了二个重要问题
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解决了整个内存SGAPGA的自动管理。 从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_targetmemory_targetsga_max_sizesga_targetpga_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您可以执行以下步骤 使用DBA账户登录到Oracle数据库。 打开SQL*Plus或SQL开发工具以便执行SQL查询。 运行以下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 设置为 8GB 时Oracle 会以 16MB 的颗粒度为内存池分配空间所以内存池的大小都将是16MB 的某个倍数。
总之Oracle数据库的内存管理机制在不同版本中经历了重要的创新从手动设置逐渐演化为自动智能管理。
这些创新不仅提高了数据库性能还减轻了DBA的管理负担使数据库系统更加适应不断变化的工作负载需求。