`

Oracle-内存结构

阅读更多

SGA——Oracle的系统全局空间
SGA——数据高速缓存池(DB Buffer)
  |                             |—————————默认缓存池
  |                             |—————————保持缓存池
  |                             |—————————再生缓存池
  |
  |———共享缓存池
  |               |————————库缓存区
  |               |                             |——————共享SQL区(已编译的SQL)
  |               |                             |——————PL/SQL区(过程、函数等..)
  |               |
  |               |————————数据字典缓存区(常用的表名、列名等用于解析SQL语句的内容)
  |
  |———Redo日志缓存区
  |———大共享区(可选的特征)
  |———固定SGA


内存结构与动态内存管理
 

内存是影响数据库性能的重要因素。
  oracle8i使用静态内存管理,即,SGA内是预先在参数中配置好的,数据库启动时就按这些配置来进行内在分配,oracle10g引入了动态内存管理,即在数据库运行过程中,内存大小可以在线修改与自动配置。
  oracle数据库的内存可以分为:系统全局区、程序全局区、排序区、大池、java池。

一、系统全局区(SGA)

  系统全局区的数据被多个用户共享。当数据库实例启动时,系统全局区内存被自动分配。SGA按作用的不同,又分为:数据缓冲区、日志缓冲区、共享池。

1.数据缓冲区
  数据缓冲区用于存储从磁盘数据文件中读入的数据,供所有用户共享。修改、插入的数据存储在数据缓冲区中,修改完成或DBWR进程执行时,数据被写入数据文件。

  几个概念:
LRU:最近最少使用,系统按这个原则对缓冲区中的数据进行替换。
Dirty:脏数据,指修改后还没有写到数据文件中的数据。

  在9i之前,数据缓冲区的大小是由DB_BLOCK_BUFFER确定,之后的版本中,是由参数DB_CACHE_SIZE及DB_nK_CACHE_SIZE确定。不同的表空间可以使用不同的块大小,在创建表空间中加入参数BLOCKSIZE指定该表空间数据块的大小,如果指定的是2k,则对应的缓冲区大小为DB_2K_CACHE_SIZE参数的值,如果指定的是4k,则对应的缓冲区大小为DB_4K_CACHE_SIZE参数的值,以此类推。如果不指定BLOCKSIZE,则默认为参数DB_BLOCK_SIZE的值,对应的缓冲区大小是DB_CACHE_SIZE的值。

  缓冲区的设置对性能影响是很突出的。设一个查询要读取的数据块数为A,能够从缓冲区读取到的数据块数为C,需要从磁盘读取的数据块数为D,那么A+C+D,则C/A称为数据缓冲区的命中率。以下语句计算数据缓冲区的命中率:

SQL>SELECT A.VALUE+B.VALUE "LOGICAL_READS",C.VALUE "PHYS_READS",
    ROUND(100*((A.VALUE+B.VALUE)-C.VALUE)/(A.VALUE+B.VALUE)) "BUFFER HIT RATIO"
    FROM V$SYSSTAT A,V$SYSSTAT C
    WHERE A.STATICSTIC#=38 AND B.STATISTIC#=39 AND C.STATICSTIC#=40
一般要求命中率在90%以下,如果命中率太低,就应适当调整数据缓冲区的大小。
2.日志缓冲区
  日志缓冲区用于缓冲事务日志,在适当的时候再由LGWR进程写入日志文件。日志缓冲区的大小由参数LOG_BUGGER设定。


  日志在进入日志缓冲区时,如果日志缓冲区过小而没有空闲空间,就要等待LGWR将缓冲区中原有的日志写入日志文件以腾出空闲空间。如果有足够的空闲空间,则无需等待,直接写入日志缓冲区中。那么这个 等待的次数/总次数(等待+非等待) 就称为日志缓冲区的失败率,可以通过以下语句计算:
sql>select name,gets,misses,immediate_get,immediate_misses,
    decode(gets,0,0,misses/gets*100 ratio1,
    decode(immediate_gets+immdiate_misses,0,0,immediate_misses/(immdiate_gets+immediate_misses)*100) ratio2
    from v$latch where name in ('redo allocation','redo copy');
  显然,失败率也是影响性能的重要因素,就要实际情况调整log_buffer的大小。

3.共享池
  共享池是对sql,pl/sql程序进行语法分析,编译,执行的内存区域。包括:库缓冲区(library cache),数据字典缓冲区(data dictinary cache),用户全局区(user global area)三个部分。


  共享池的大小由参数shared_pool_size设定。
  查询数据字典的成功与失败次数:
sql>select sum(gets) "dictionary gets",
           sum(getmisses) "dictionary cache getmisses",
           from v$rowcache
   计算共享池记取数据字典的成功率:
sql>select parameter,gets,getmisses,getmisses/(gets+getmisses)*100 "miss ratio",(1-sum(getmisses)/sum(gets)+sum(getmisses))))*100 "hit ratio" from v$rowcache where gets+getmisses<>0 group by parameter,gets,getmisses;
  计算缓存的失败率,结果应小于1%:
sql>select sum(pins) "total pins",sum(reloads) "total reloads",
           sum(reloads)/sum(pins)*100 libcahe from v$librarycache;

  以上分析了SGA的三个部分,要查看SGA的总大小或空闲空间,使用比率,如下:
sql>select * from v$sga
sql>select name,sgasize/1024/1024 "allocated(m)",bytes/1024 "空闲空间百分比(%)" from (select sum(bytes) sgasize from sys.v_$sgastat) s,sys.v_sgastat f where f.name='free mamory';

二、程序全局区


  程序全局区(PGA)是包含单个用户或服务器数据的控制信息的内存区域。是在用户进程连接到oracle数据库并创建一个会话时,由oracle自动分配的,它是非共享区,主要用于在编程时存储变量与数组。会话结束时,PGA被释放。

三、排序区


  排序区用于sql的order by。oracle优先使用排序区进行排序,如果内存不够,oracle自动使用临时表空间进行排序。
  参数sort_area_size用于设置排序区的大小。

四、大池


  大池用于数据库备份工具-RMAN。
  大池的大小由参数large_pool_size确定。

五、java池


  从8i开始,oracle增加了对java的支持,所以系统提供了java池,其大小由参数java_pool_size设定。

六、oracle10g的自动共享内存管理


1.什么是自动共享内存管理?
  在10g以前的版本中,SGA的各个部分,share_pool_size,db_cache_size等需要由管理员手动设置大小,当数据库负荷太大时,若没有调整这些参数的大小,就会产生“无法分配内存”的错误。在10g中,将参数statistics_level设置为typecal 或all,再使用新参数SGA_TARGET设置SGA内存区的部大小即可,无需定义每个参数的大小,系统会根据需要自动在多个组件之间分配内存大小。

2.自动共享内存管理时,设置SGA各部分内存参数的最小值限制
  如果同时设置了SGA_TARGET和各内存参数,如:
SGA_TARGET=300M
SHARED_POOL_SIZE=32M
DB_CACHE_SIZE=90M
则表示共享池和数据缓冲区至少会分配32M和90M内存,剩下的可由系统自动分配的内存为:
300-32-90=172M

3.手动内存管理转换为自动管理
  只要设置新参数SGA_TARGET即可,如:
SGA_TARGET=1000M
   在自动内存管理模式下,如果数据库使用SPFILE,那么在数据库关闭后,系统会将上一次数据库关闭时的内存分配状态记录下来。因此,如果是自动内存管理,最好使用SPFILE而非PFILE。

 

转载:http://blog.csdn.net/hxf0759/archive/2009/04/09/4060493.aspx

分享到:
评论

相关推荐

    oracle-j2sdk1.8-1.8.0+update181-1.x86-64.rpm

    Oracle JDK的x86_64版本是为这种处理器设计的,能够充分利用64位系统的内存和计算能力。 6. **软件包的版本管理**: 更新到181意味着修复了之前版本的一些问题,可能包括安全漏洞和性能改进。版本号的结构通常为`...

    Oracle 19C安装的补充包 oracle-database-preinstall

    这些依赖对于数据库的稳定运行至关重要,例如,需要确保系统满足Oracle的内存和磁盘空间要求,以及特定的内核版本和安全补丁。 2. **用户和组创建**:Oracle数据库通常需要特定的用户(如`oracle`)和组(如`dba`)...

    oracle12c内存结构高清图

    oracle 12c 内存结构 高清图 CDB +PDB

    Oracle的内存结构和进程结构

    Oracle内存主要分为SGA、PGA、排序池、大池和Java池。 3. 系统全局区SGA: SGA是所有数据库实例共享的内存区域,包括数据缓冲区、日志缓冲区和共享池等组件。SGA的大小在数据库启动时设定,并在关闭时释放。尽管...

    oracle数据库内存结构

    详细讲解了oracle的内存结构,对数据提取、查询优化的基本原理进行了解析

    涂抹ORACLE-第16章-体系结构之数据库物理存储结构

    ### 涂抹ORACLE-第16章-体系结构之数据库物理存储结构 #### 重要知识点详述 ##### 引言与理解基础 在深入探讨Oracle数据库的物理存储结构之前,我们首先需要理解,这一章节并非侧重于具体的操作指南,而是致力于...

    oracle-sga结构

    Oracle SGA(System Global Area)是Oracle数据库管理系统中的核心组成部分,它是一个共享内存区域,用于存储数据库运行时所需的各种数据和信息。理解SGA的结构对于优化数据库性能和日常维护至关重要。 SGA主要包含...

    Oracle内存结构研究-PGA篇

    Oracle 内存结构研究 - PGA 篇 Oracle 内存结构研究 - PGA 篇是 Oracle 中最重要的内存结构之一,PG 即程序全局区,一个进程的专用的内存区。PGA 的主要组成部分包括 UGA(User Global Area)、排序区、散列区和...

    oracle数据库体系结构之一【内存结构】.docx

    Oracle数据库的内存结构是其高效运行的关键组成部分,主要分为系统全局区(SGA)、程序全局区(PGA)、排序区、大池和Java池。本文将重点讨论SGA,它是Oracle数据库中最为重要的共享内存区域。 系统全局区(SGA)是...

    Oracle 10g内存结构

    Oracle 10g的内存结构是数据库管理系统的关键组成部分,它决定了数据库的性能和稳定性。SGA(System Global Area)是Oracle数据库中一个重要的共享内存区域,用于存储数据库运行时的各种数据和控制信息。 1. SGA...

    oracle安装-卸载-初识oracle-笔记

    在安装过程中需确保遵循提示,合理配置各项参数,如内存分配、数据库字符集等。 三、安装Oracle客户端 Oracle客户端用于连接到服务器端的数据库,主要包含Net Services、SQL*Plus和其他工具。客户端安装相对简单,...

    oracle内存结构

    绝对的值得一看的文档,全都是我收集的,oracle的内存结构,有想研究内存结构的可以看一下啊

    Oracle---文档总汇

    3. **Oracle9i_DBA手册(一).2-数据库体系结构.pdf**:这部分内容详细介绍了Oracle 9i的数据库架构,包括内存结构(SGA、PGA)、数据存储、进程模型、redo logs、control files等,是理解数据库运行机制的关键。...

    oracle---网络搜集

    1. **Oracle架构**:Oracle数据库的架构包括服务器进程、后台进程、内存结构和磁盘结构。服务器进程如SQL*Net处理客户端请求,后台进程如DBWR(数据库写入器)负责将缓冲区高速缓存中的更改写入数据文件。 2. **...

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

    PGA(Program Global Area)是 ORACLE 数据库中的一种内存结构,它用于存储会话级别的数据。PGA 的调整也需要满足两个前提条件: 1. WORKAREA_SIZE_POLICY 参数必须设置为 AUTO。 2. PGA_AGGREGATE_TARGET 参数不能...

    减少Oracle内存占用

    #### 一、Oracle内存结构简介 Oracle数据库的内存结构主要由SGA和PGA两部分组成: 1. **SGA**(Shared Global Area):SGA是所有数据库进程共享的一块内存区域,它包含了多个子组件如数据缓冲区、重做日志缓冲区、...

    Oracle-12c数据库基础教程-Oracle-12c数据库管理、配置和维护PPT文档.pptx

    在学习Oracle 12c数据库基础时,理解数据库的逻辑结构至关重要。数据库包含逻辑对象(如表、视图、索引)和物理对象(如数据文件、控制文件、日志文件)。了解这些对象的性质和它们在数据库中的作用,能够帮助你更好...

    Oracle-mem-structure.doc

    ### Oracle内存结构全面解析 #### 一、Oracle内存架构概览 Oracle的内存管理对于确保数据库性能至关重要。本文档旨在全面解析Oracle内存结构,并重点介绍系统全局区域(SGA)和程序全局区域(PGA),以及如何优化...

    Oracle课程相关练习oracle-job-master.zip

    服务器部分由数据库实例和物理存储组成,实例由内存结构(如SGA和PGA)和后台进程组成。 2. **SQL语言**:Oracle支持结构化查询语言(SQL),用于查询、插入、更新和删除数据库中的数据。学习者需要熟悉SQL的基本...

Global site tag (gtag.js) - Google Analytics