热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle内存结构

Oracle内存结构Oracle的3个主要的内存结构:系统全局区(SystemGlobalArea,SGA):这是一个很大的共享内存段,几乎所有的Oracle进程都要访问这个区域进程全局区(PorcessGlobalArea,PGA):这是一个进...SyntaxHighligh

Oracle内存结构
 
Oracle的3个主要的内存结构:
系统全局区  (System Global Area, SGA):这是一个很大的共享内存段,几乎所有的Oracle进程都要访问这个区域进程全局区  (Porcess Global Area, PGA):这是一个进程或线程专有的内存,其他的进程/线程不能访问。  www.2cto.com  
用户全局区  (User Global Area, UGA):这个区域与特定的会话相关联。它可能在SGA中分配,也可能在PGA中分配,取决于是用专用服务器还是共享服务器来连接数据库。如果使用专用服务器,UGA在PGA中分配,如果使用共享服务器,UGA在SGA中分配。
 
      PGA是特定于进程的一段内存。这是一个操作系统或线程专用的内存,不允许系统中的其他线程或进程访问。PGA绝对不会在Oracle的SGA中分配,而总是在进程或线程在本地分配。
     UGA就是你的会话状态。会话总能访问这部分内存。
 
     SGA是一组共享的内存结构,被所有服务器进程和后台进程使用,所以也叫全局共享区。
它由以下部分构成:数据库高速缓冲区、日志缓冲区、共享池、JAVA池、大池和流池。它的最大尺寸由SGA_MAX_SIZE控制。
 
      数据高速缓冲区(Database Buffer Cache):用于存放从数据文件读取的数据块,由初始化参数db_catch_size决定。buffer cache可以分成Default  、Keep和Recycle三个部分。Keep池存放持久存放的数据,Recycle池存放经常一次性使用的数据,而Default池一般用于当数据不指定存在在前2者的时候的存放地,一般我们的表都是存放于Default池的。除非你在建表的时候指定 Store(buffer_pool keep) or Store(buffer_pool recycle)。他们的大小由db_keep_cache_size 和db_recycle_cache_size参数指定。  
 
     在管理buffer cache的时候,一般使用2个列表--LRU LIST 和 Dirty LIST (write list 或者CheckPoint Queue)。各种List上面存放的是指向实际buffer的指针。一般读取的数据时存放在 LRU list上的,修改过后的数据被标识为Dirty,被转移到Dirty List上,并且会被DBWR写到数据文件中。       
 
      模拟下oracle进程使用高速缓冲区的过程:一个sql语句发过来,首先在高速缓冲区的LRU LIST面寻找有没要的数据,如果找到了,直接返回;反之,就需要把数据从数据文件写入到高速缓冲区中的LRU LIST。首先在LRU里面寻找有没free buffer的空间,如果有,直接把数据从数据文件写入到高速缓冲区的LRU LIST 指定的buffer里面,同时它还会将扫描到的修改过的buffer移动到Dirty List里面。如果扫描LRU超过一个阈值,一般为40%还没找到足够的free buffer,就要通知DBWR把dirty list里面指向的buffer写到数据文件里面,腾出空间给LRU LIST,然后把数据填到刚新增的free buffers里。 这里可以看出,如果你的高速缓冲区很小的,不停地写写,造成很大I/O开销。
 
    日志缓冲区(Redo Log Buffer): 用于存放日志条目,日志条目就是记录对数据的改变。当这块区域用光时,后台进程LGWR把日志条目写到磁盘上的联机日志文件中。它由初始化参数log_buffer决定大小。同样的道理下,日志缓冲区应该稍微大点,特别是有长时间运行的事务的时候,可以大量减少I/O。
 
    共享池(Shared Pool):用于存放SQL语句、PL/SQL代码、数据字典、资源锁和其他控制信息。它由初始化参数SHARED_POOL_SIZE控制其大小。
 
   它包含以下几个缓冲区:  www.2cto.com  
      库缓冲区(Library Cache):存放解析并且执行过的SQL和PL/SQL代码。可以用于共享解析树和执行计划,加快语句执行速度。共享SQL区:存放SQL语句的解析树和执行计划;私有SQL区:这部分存放的东西只被会话私有,一般包含一些变量,会话参数等。数据字典缓冲区(Data Dictionary Cache):存放一些被频繁访问的数据字典信息,防止过多对系统表空间进行访问。以行的形式存放数据,所以又叫行存储区。
 
     大池(Large Pool):一般用于数据库的备份和恢复、并行查询、共享服务器模式下的会话内存。不建立大池,所需要的内容要从共享池或者PGA内获取。它由初始化参数large_pool_size控制.
    JAVA池(JAVA Pool):用于支持在数据库中运行java代码,一般由java_pool_size控制。
     流池(Stream Pool):加强对流的支持,一般由stream_pool_size控制。
 
查询SGA区的情况:
    1.show SGA
    2.select * from v$sga
     
     NAME                      VALUE
     -------------------- ----------
     Fixed Size              1249488
     Variable Size         159387440
     Database Buffers      281018368
     Redo Buffers            7135232
 
    这里的Fixed Size表示固定区域,存储SGA各个组件的信息。不能修改大小。
               Variable Size表示可变区域,比如共享池、java池、大池等。‘
              Database Buffers表示数据库高速缓冲区。  www.2cto.com  
               Redo Buffers表示日志缓冲区。

推荐阅读
  • 导入大csv文件到mysql(CSV导入) ... [详细]
  • 本文档详细介绍了2017年8月31日关于MySQL数据库备份与恢复的教学内容,包括MySQL日志功能、备份策略、备份工具及实战演练。 ... [详细]
  • 深入探讨PHP中的输出缓冲技术(Output Buffering)
    本文深入解析了PHP中输出缓冲(Output Buffering)的原理及其在Web开发中的应用,特别是如何通过输出缓冲技术有效管理HTTP头部信息,提高代码的灵活性与健壮性。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • SQL Server 实例默认排序规则详解
    本文详细介绍了如何在安装过程中为 SQL Server 实例指定默认排序规则,并讨论了不同安装选项下的排序规则选择逻辑。 ... [详细]
  • 深入解析Apache SkyWalking CVE-2020-9483 SQL注入漏洞
    本文详细探讨了Apache SkyWalking中的SQL注入漏洞(CVE-2020-9483),特别是其影响范围、漏洞原因及修复方法。Apache SkyWalking是一款强大的应用性能管理工具,广泛应用于微服务架构中。然而,该漏洞使得未经授权的攻击者能够通过特定的GraphQL接口执行恶意SQL查询,从而获取敏感信息。 ... [详细]
  • 本文旨在探讨机器学习与数据分析之间的差异,不仅在于它们处理的数据类型,还包括技术背景、业务应用场景以及参与者的不同。通过深入分析,希望能为读者提供清晰的理解。 ... [详细]
  • 当 MySQL 的 autocommit 设置为 1 时,如果在一个事务中执行了 DDL 语句,那么该事务中从开始到执行 DDL 语句之前的所有 DML 操作将自动提交。随后的 DML 操作则需要在新的事务中进行。 ... [详细]
  • NIO 通道接口详解
    本文介绍了NIO(New Input/Output)中的通道接口及其相关概念,包括通道的基本功能、接口设计以及各类通道接口的具体用途。通过本文,读者可以深入了解NIO通道的设计原理及其在实际项目中的应用。 ... [详细]
  • 本文详细介绍了如何解决Oracle数据库中出现的ORA-28002错误,即密码将在1天内过期的问题,包括原因分析及解决方案。 ... [详细]
  • 作为一名计算机科学专业的大三学生,我在过去的一年里自学了Visual Basic (VB),但感觉进展缓慢。VB的学习是否仅仅局限于控件的使用?如何有效地学习API?此外,有人认为Basic语言已经过时,这对VB的未来意味着什么? ... [详细]
  • 本文探讨了在Python中利用sqlite3库创建或重定义SQLite函数的方法,包括自定义函数和修改现有函数的行为。 ... [详细]
  • .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
    .NETCore中的一个接口多种实现的依赖注入与动态选择看这篇就够了最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的 ... [详细]
  • 请求一段SQL代码,用于从数据库中提取当前日期前7天的数据记录。例如,如果今天是2011年5月9日,则需要获取从2011年5月3日至2011年5月9日之间的所有记录。 ... [详细]
author-avatar
小哥脾气
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有