Oracle数据库基础学习07-实例内存管理

本文深入探讨Oracle数据库的内存管理,包括系统全局区(SGA)和程序全局区(PGA)的结构与作用。SGA主要包含数据库缓冲区、共享池、重做日志缓冲区等组件,而PGA为每个服务器进程提供私有内存。Oracle通过自动内存管理机制,如MEMORY_TARGET参数,优化内存使用。了解这些内存结构有助于提升数据库性能。
摘要由CSDN通过智能技术生成

    当用户请求数据库中的数据时,Oracle实际上会先检测内存中是否存在相应的数据块,因为从内存中获取数据往往要比磁盘快很多,只有在Oracle无法找到内存中的数据时,才会去磁盘中提起数据,Oracle除要使用内存缓冲数据外们还会缓冲Oracle的共享可执行的SQL或PL/SQL代码,同时Oracle也会使用内存来管理重做日志。基本上Oracle数据库需要大量的内存来管理数据库,内存越大,意味着访问的速度越快。

Oracle内存结构

Oracle会在内存中存储一下信息:

  • 已经执行过的SQL或PL/SQL代码;
  • 已经连接的会话信息,包括当前活动的及非活动的会话;
  • 程序执行过程中所需要的信息,比如某个查询的状态;
  • 需要在Oracle进程间共享并通信的信息;
  • 数据文件内数据的缓存,例如数据块及重做日志项;

Oracle将内存划分为两种内存结构:

  • 系统全局区,全称是 System Global Area,简称SGA,这个区域中的数据会被所有的服务器进程和后台进程所共享
  • 程序全局区,全称是 Program Global Area,简称PGA,每个服务器和后台进程私有的内存区域,即每个进程都具有自己的PGA区域

依赖于服务器的连接方式的不同,在Oracle中还有一个用户全局区 UGA,它是存储在会话状态的内存。如果通过专用服务器连接到Oracle,UGA内存会在PGA区域中分配,如果是共享服务器连接,UGA会在SGA中进行内存分配。

注意:在使用DBCA创建数据库时,DBCA会提示用户选择连接类型,默认使用专用服务器模式。

Oracle内存结构示意图​​​​

 

 由图中可以看到,SGA中包含了各种各样的池和缓冲区,比如Java池,大池,流池等,SGA之外的服务器进程和后台进程可以与SGA交换信息,同时每个进程具有自己的PGA内存区域,可以存放进程的私有数据。

 

系统全局区SGA

系统全局区SGA时一个非常庞大的共享内存结构,它的目的时提高查询性能,允许大量并发的数据库活动。每次Oracle启动时,就会分配指定的SGA内存。SGA区实际上是由一组不同结构的内存组件构成的,他是可读写的。在SGA区中包含了如下几个内存数据结构:

  • 数据库缓冲区高速缓存:它用来保存从数据文件中读取的数据块的副本;
  • 共享池:包含库高速缓存,用来缓存已经执行过并存储起来的SQL和PL/SQL的已分析过的代码,使得多次访问相同的代码可以进行共享使用。共享池还包含了数据字典高速缓存,用来保存重要的数据字典信息。
  • 重做日志缓冲区:用来缓存重做日志项,在指定的条件满足时将缓冲区的数据写入到磁盘中。
  • Java池:给出实例化Java对象的栈空间;
  • 大池:存储大内存的配置,比如RMAN备份缓冲区;
  • 流池:用来支持Oracle流功能

在SGA区中,还包含了一个数据库及实例的状态信息的内存,以供后台进程使用,这部分内容被称为固定SGA(FIXED SGA)。系统全局区的内存组成结构如图所示

系统全局区内存结构图

 可以看到,Oracle在SGA区中包含了很多用来处理数据块操作的组件,通过查询数据库字典试图 V$sgainfo ,可以了解到当前服务器的SGA内存使用状态。

Oracle11g具有自动内存管理机制,在创建数据库时,只需要指定 MEMORY_TARGET 初始化参数指定实例使用的最大内存大小,SGA 和 PGA 会由Oracle根据需要来分配内存。也可以使用 alter system 语句来更改这个内存设置


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值