`
geeksun
  • 浏览: 965391 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle的内存管理

阅读更多


oracle数据库实例启动时,需要分配共享内存,启动后台进程。

oracle数据库使用的内存主要涉及到:PGA和SGA。

一、 PGA

Program Global Area,顾名思义是程序全局区,是服务器进程(Server Process)使用的一块包含数据和控制信息的内存区域,PGA是非共享的内存,在服务器进程启动或创建时分配,并为Server Process排他访问。

进程的创建有两方式:专用服务器模式(Dedicated Server)和共享服务器模式(Shared Server)。专用服务器模式下,Oracle为每个会话启动一个Oracle进程;在共享服务器模式下,通常在服务器端启动一定数量的服务器进程,然后由多个客户端请求共享同一个Oracle服务进程。通常服务器运行在专用服务器模式下。

 

  

 
 PGA的创建过程

 

 

 

   oracle的结构图

 PGA创建过程:当客户端向服务器发送连接请求,服务器监听到客户端要求,在专用服务器模式下,在服务器端生成一个Serlver Process来代理用户的请求,服务器进程进而向实例发起连接,创建会话(Create Session),而PGA就为为Servler Process所分配和使用。

 

通常,PGA包括私有SQL区、Session信息等内容。

会话内存(Session Memory):用于存放会话的登录信息以及其他相关信息,对于共享服务器模式,这部分是共享的。

私有SQL区(Private SQL Area):包含绑定变量信息,查询执行状态信息以及查询工作区等。每个发出查询的会话都有一块私有SQL区,对于专用服务器模式,这部分内存在PGA中分配,对于共享服务器模式,这部分内存在SGA中分配。

私有SQL区又由两部分组成: 永久区域(Persistent Area):包含绑定变量等信息,这部分内存只有在游标关闭时才会被释放;运行时区域(Runtime Area),存放了SQL语句运行时所需要的信息,在执行请求时首先创建,其中包含了查询执行的状态信息、SQL Work Areas。

 

二、 UGA(User Global Area):用户全局区。由用户会话数据、游标状态和索引区组成。在共享服务器模式下,一个共享服务进程被多个用户进程共享,此时UGA是Shared Pool或Large Pool的一部分,而在专用服务器下,UGA则是PGA的一部分。

在Dedicatred模式下,PGA与UGA的关系,就如同Process和Session的关系,PGA是服务于进程的内存结构,包含进程信息;而UGA是服务于会话的,包含的是会话的信息。

固定UGA包括大约70个原子变量,小的数据结构以及指向UGA堆的指针。

还有一块内存区域是CGA(Call Glabal Area,调用全局区),存在是瞬间的,只存在于调用过程中,而且不论UGA存在于PGA还是SGA,CGA都是PGA的SubHeap.SQL解析、SQL优化需要用到CGA。这里不展开介绍。

 

 

三、 SGA(System Global Area):系统全局区,用于加载数据、对象并保存运行状态和数据库控制信息的一块内存区域,在数据库实例启动时分配,当实例关闭时释放,每个实例都有自己的SGA区。

 SGA的体系结构图上面的图已包括。

连接到Oracle数据库的用户都可以共享SGA中的数据,通常是为了更优化的性能,SGA设置得更高,可以减少物理I/O(SGA中数据缓冲区的增大可以有效地减少物理读取)。

组成:

1. 固定区域(Fixed Area): Fixed Area是SGA中的固定部分,包含几千个变量和一些小的数据结构,如Latch或地址指针等,这部分内存分配和特定的数据库版本以及平台有关,不受用户控制,固定部分只需要很小的内存。

2. Buffer Cache(缓冲区高速缓存):用于存储最近使用的数据块,这些数据块可能修改过,也可以未修改过。在Oracle对数据的处理中,代价最昂贵的就是物理I/O(Physical I/O),同样的数据从内存中得到比从磁盘上读取快得多,所以将尽可能多的数据保存在内存中,可以减少磁盘I/O操作,从而提高数据库性能。

通常的数据访问和修改都需要通过Buffer Cache来完成。当一个进程需要访问数据时,首先需要确定数据是否在内存中存在 ,如果数据在Buffer中存在,则需要根据数据的状态来判断是否可以直接访问还是需要构造一致性读取;如果数据在Buffer中不存在,则需要在Buffer Cache中寻找足够的空间以装载需要的数据,如果Buffer Cache中找不到足够的内存空间,则需要触发DBWR去写出脏数据,释放Buffer空间。

Buffer Cache使用了Hash Bucket和Cache Buffer Chain存放数据。

每个Buffer中存放的Bucket由Buffer的数据块地址(Data Block Address)运算决定。在Bucket内部,通过Cache Buffer Chain(双向链表)将所有的Buffer通过Buffer Header信息联系起来。Buffer Header存放的是对应数据块的概要信息,包括数据块的文件号、块地址、状态等。判断数据块是否在Buffer中存在,通过检查Buffer header即可确定。

 

3. Shared Pool(共享池),包含共享内存结构,如SQL区等。SQL区包含SQL解析树、执行计划等信息,通过共享池,反复执行的SQL可以在不同Session间得到共享。

Shared Pool是Oracle SGA中设置最复杂也是最重要的一环,Shared Pool可实现SQL共享、减少代码硬解析等,提高数据库的性能。

Oracle引入Shared Pool是为了帮助我们实现代码的共享和重用。

组成:

库缓存(Library Cache):主要存储SQL语句、SQL语句解析树、执行计划、PL/SQL程序块以及它们转换后能够被Oracle执行的代码等;

数据字典缓存(Data Dictionary Cache): 主要存放数据字典信息,包括表、视图等对象的结构信息,用户以及对象权限等信息,这部分信息相对稳定。



 shared pool与buffer cache的协同工作

除上述两部分,从Oracel 11g开始,在Shared Pool中划出了另外一块内存用于存储SQL查询的结果集,称为Result Cache Memory(结果集缓存)。以前的Shared Pool的主要功能是共享SQL,减少硬解析,从而提高性能,但SQL共享以后,执行查询同样可以消耗大量的时间和资源,现在Oracle尝试将查询的结果集缓存,可以将缓存的查询结果返回给用户,不需要真正去执行运算,为性能带来了极大的提升。

4. Redo Log Buffer-日志缓冲区存储重做日志条目,日志记录数据库变更,最终将被写出到重做日志文件中,在数据库崩溃或故障时用于恢复。

5. Java Pool:用于JVM等Java选件。

内存分配Oracle的建议是:Oracle最多可以使用80%的物理内存,其余20%内存给操作系统使用。

  • 大小: 14 KB
  • 大小: 26.1 KB
  • 大小: 30.6 KB
  • 大小: 35.1 KB
分享到:
评论

相关推荐

    oracle内存管理,深入浅出oracle内存管理,盖国强oracleppt

    在深入理解Oracle内存管理的过程中,我们可以从以下几个方面进行探讨: 1. **内部存储与外部存储**:内部存储主要指的是Oracle实例内存结构,包括SGA(System Global Area)和PGA(Program Global Area)。SGA是...

    Oracle内存管理(深入解析)

    总的来说,Oracle内存管理涉及到多个层面,包括进程私有内存(PGA)和全局共享内存(SGA)的配置、使用和优化。深入理解这些概念并掌握相应的监控和调整技巧,是确保Oracle数据库高效稳定运行的基础。通过持续的学习...

    Oracle内存管理

    Oracle内存管理是数据库系统中的关键组成部分,它直接影响到数据库的性能和稳定性。Oracle数据库使用复杂的内存结构来存储和处理数据,这些内存结构包括共享池、数据缓冲区缓存、PGA(程序全局区)和SGA(系统全局区...

    操作系统与Oracle内存管理比较.pdf

    【操作系统与Oracle内存管理比较】 本文探讨了操作系统与Oracle数据库在内存管理上的异同,作者王润中通过对比分析,揭示了两者在内存利用和进程管理上的策略。 1. 操作系统的内存管理 操作系统的内存管理主要...

    Oracle内存管理综述.pdf

    本文将深入探讨Oracle内存管理的核心概念,包括内存结构、内存分配策略以及如何通过配置来提升数据库效率。 Oracle内存主要分为两大部分:系统全局区(System Global Area, SGA)和程序全局区(Program Global Area, ...

    oracle内存管理

    ### Oracle内存管理详解 在Oracle数据库管理中,内存管理是一项至关重要的任务,它直接影响到数据库的性能和稳定性。本文将围绕“Oracle内存管理”这一核心主题进行深入探讨,旨在帮助读者理解Oracle内存管理的基本...

    ORACLE内存管理和后台进程.pdf

    ORACLE内存管理和后台进程.pdf

    Oracle内存分配与调整--大牛冯春培的一篇文章

    冯春培作为一位经验丰富的Oracle专家,他的这篇文章清晰而深入地介绍了Oracle内存管理的关键方面,特别是系统全局区(SGA)和进程全局区(PGA)的配置与优化。 #### 二、Oracle内存架构概览 ##### 2.1 SGA与PGA的区别 ...

    Oracle 内存全面分析 PDF文档

    理解Oracle内存管理不仅有助于提高数据库的运行效率,还能确保系统的稳定性和可靠性。通过对SGA和PGA的深入学习,DBA可以更好地诊断和解决性能问题,从而提升整体的业务运行速度。因此,这份"Oracle 内存全面分析"的...

    oracle 内存管理

    在Oracle 10g数据库系统中,内存管理是性能优化的关键环节之一,直接影响着数据库的运行效率和响应速度。本文将深入探讨Oracle 10g在Linux操作系统下的内存高级管理策略,包括系统全局区(SGA)和程序全局区(PGA)...

    oracle内存全面分析

    ### Oracle内存全面分析 Oracle数据库的性能在很大程度...总之,Oracle内存管理是确保数据库高性能的关键。深入了解SGA、PGA和UGA的内部机制,以及合理配置相关参数,对于避免性能瓶颈、提升数据库响应速度至关重要。

    调整oracle内存及调整表空间大小方法

    #### Oracle内存管理 Oracle数据库的内存管理对于确保数据库高效运行至关重要。内存配置不当可能导致性能下降甚至系统崩溃。在默认情况下,Oracle会根据系统的总内存自动调整其内存分配。然而,在某些情况下,可能...

    ORACLE自动内存管理和存储调整

    ORACLE 自动内存管理和存储调整 ORACLE 自动内存管理和存储调整是 ORACLE 数据库中的一种重要配置,它可以根据系统的实际情况自动调整内存和存储的使用,以提高数据库的性能和效率。本文将详细介绍 ORACLE 自动内存...

    oracle机制及内存区的优化建议

    系统全局区(SGA)是Oracle内存管理的关键部分,它包括了Shared Pool、Database Buffer Cache、Redo Log Buffer、Java Pool、Streams Pool、Large Pool等子区域。SGA的大小可以通过`ALTER SYSTEM SET SGA_MAX_SIZE=?...

    ORACLE内存全面分析(整理版)

    Oracle内存管理的精细度和灵活性对于实现高性能数据库环境至关重要。理解SGA和PGA的结构、功能及其关键参数,可以帮助数据库管理员和开发人员更有效地配置和优化Oracle实例,从而提高系统性能,减少故障和资源浪费。...

    wxh oracle内存分配

    Oracle数据库系统是企业级数据管理的重要工具,其性能优化很大程度上取决于内存的合理分配。"wxh oracle内存分配"这个主题主要...通过深入学习Oracle内存管理机制,可以解决各种性能问题,确保数据库系统的高效运行。

    Oracle内存分配与调整.rar

    Oracle数据库是全球广泛使用的...学习并掌握Oracle内存管理对于提升数据库性能至关重要,这不仅涉及理论知识,更需要实践经验。通过本教程,你可以深化对Oracle内存机制的理解,为实际工作中的问题解决提供有力支持。

Global site tag (gtag.js) - Google Analytics