Oracle - 数据库的内存结构

Oracle数据库使用多种内存区域,包括System Global Area(SGA)、Program Global Area(PGA)和User Global Area(UGA)。SGA是共享内存,包含如Buffer Cache、Redo Log Buffer等组件,用于存储数据和控制信息。PGA是每个进程的私有内存,用于存储进程数据。UGA存储会话信息,当使用共享服务器时,存储在SGA中。这些内存结构优化了数据库性能和资源管理。
摘要由CSDN通过智能技术生成

一、内存结构的概述
    Oracle数据库为 程序代码、用户共享的数据 以及 每个连接用户的私有数据区域,创建和使用了多个内存区域。这些相关的基本内存结构包括System Global Area(SGA)、Program Global Area(PGA)、User Global Area(UGA)、Software Code Areas等。

 

    在数据库实例启动时,首先在服务器内存中分配一个包含了实例数据和控制信息的共享内存区域(SGA),然后启动一组常驻内存的后台进程(执行维护任务,例如执行实例恢复、清理进程、编写重做缓冲区到磁盘等)。当客户端/应用程序连实例操作接数据库时,实例通过创建服务器进程(基于客户端请求执行工作,例如解析SQL查询并将放在共享池、创建和执行查询计划、从缓冲区缓存或磁盘中读取数据块),分配该进程专用的包含进程数据和控制信息的内存区域(PGA),来处理连接到该实例的客户端进程的请求。

 

    

 

二、SGA 
    即系统全局区域,是一组共享的内存结构,包含一个数据库实例的相关数据和控制信息,在实例启动时自动分配,在实例关闭时回收,包含一个数据库实例的相关数据和控制信息。所有的用户和服务器进程都共享。

 

    SGA与后台进程一起构成一个数据库实例。服务器和后台进程是不驻留在SGA中的,而是存在于单独的内存空间。 SGA由多个内存组件组成,这些内存组件是用于满足特定类别的内存分配请求的内存池,其中包括Database Buffer Cache、Redo Log Buffer、In-Memory Column Store、Shared Pool、Large Pool、Java Pool、Streams Pool、Fixed SGA等。

    SGA 中的数据字典缓存和其他信息会被实例的后台进程所访问,它们在实例启动后就固定在SGA中了,而且不会改变,所以这部分又称为固定SGA(Fixed SGA);Shared Pool、Java Pool、Large Pool和Streams Pool这几块内存区的大小是随系统参数设置而改变的,所以又通称为可变SGA(Variable SGA )。

    SQL> show sga
    Total System Global Area 4259229696 bytes  --总系统全局区域大小
    Fixed Size                  2220072 bytes  --固定SGA大小
    Variable Size            1660948440 bytes  --可变SGA大小
    Database Buffers         2583691264 bytes  --数据缓冲区缓存大小
    Redo Buffers               12369920 bytes  --重做日志缓冲区缓存大小

 

    1、Database Buffer Cache
        也叫Buffer Cache,即数据库缓冲区缓存或者缓冲区缓存,是存储从数据文件中读取的数据块的副本的内存区域。Oracle进程如果发现需要访问的数据块已经在Buffer Cache中,就可以直接读写在内存中的相应区域即相应的缓冲块,而无需读取数据文件以提高性能。
        一个缓冲块(Buffer)的状态包括:Unused,不用的(从未被使用过或当前未被使用的块,是可供使用的块);Clean,干净的(较早被使用而现在包含了在一个时间点上是读一致版本的块,数据库可以定位并重用的块);Dirty,脏的(缓冲块中包含尚未写入磁盘的已修改数据。数据库必须在重新使用之前检查的块)
        为了使缓冲区访问有效,必须确定要在内存中缓存哪些缓冲区以及从磁盘访问哪些缓冲区,数据库默认使用了基于LRU的替换算法,是通过两个重要的链表实现的:写链表和最近最少使用链表(the Least Recently Used,LRU)。写链表所指向的是所有脏数据块缓存(即被进程修改过,但还没有被回写到数据文件中去的数据块,此时缓冲中的数据和数据文件中的数据不一致)。而LRU链表指向的是所有空闲的缓存、正在被访问的缓存以及还没有来的及移入写链表的脏缓存。LRU列表有一个热端和冷端。冷端的缓冲区是最近没有使用的缓冲区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值