`

再述oracle数据库体系结构 之三:内存结构与动态内存管理

阅读更多

第七篇 再述oracle数据库体系结构 之三:内存结构与动态内存管理
  内存是影响数据库性能的重要因素。
  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。  

 

分享到:
评论

相关推荐

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

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

    Oracle 12c数据库体系结构图文详解手册

    Oracle 12c数据库体系结构图文详解手册是 Oracle 12c数据库管理系统的核心组件之一,该手册详细介绍了 Oracle 12c数据库的体系结构、实例、数据库、内存结构、后台进程、控制文件、重做日志文件、数据文件等概念。...

    Oracle数据库精讲之数据库管理_ Oracle数据库管理视频

    3. 掌握oracle数据库体系机构,为oracle优化奠定基础。 三、适合人群: 1.有意从事oracle 数据库工作,担任dba角色的人员; 2. Oracle数据库设计、开发和备份等管理人员; 四、课程内容: 第一讲:Oracle体系结构 ...

    oracle数据库管理体系结构.ppt

    Oracle数据库管理体系结构是指Oracle数据库的逻辑和物理结构,它包括数据库的存储结构、进程结构、内存结构等方面。 Oracle数据库管理体系结构是Oracle数据库的核心组件,负责管理和维护数据库的所有资源和数据。 ...

    培训讲义:Oracle 数据库体系结构

     ORACLE数据库体系结构决定了oracle如何使用网络、磁盘和内存。包括实例(instance),文件(file)和进程(process不包括后台进程)三部分。 实例:每一个运行的ORACLE数据库与一个ORACLE实例(INSTANCE)相联系。...

    ORACLE数据库体系结构、安全性策略浅析.pdf

    ORACLE 数据库体系结构、安全性策略浅析 本文将对 ORACLE 数据库的体系结构和安全性策略进行浅析,以帮助读者更好地理解 ORACLE 数据库的工作原理和安全机制。 一、ORACLE 数据库体系结构 ORACLE 数据库是一个...

    Oracle 9i 10g编程艺术:深入数据库体系结构

    我会深入地分析Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库(database)和实例(instance)的底层进程。然后讨论一些重要的数据库主题,如锁定、并发控制、事务、redo和undo,还会解释为什么了解...

    【试读】Oracle编程艺术:深入理解数据库体系结构(第3版)

    书中深入分析了Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题,同时分析了数据库中的物理结构,如表、索引和数据类型,并介绍采用哪些...

    ORACLE数据库体系结构讲解

    介绍ORACLE数据库管理系统的基本轮廓和程序模块结构、实例概念和组织、进程结构和功能、内存结构和用途,数据字典结构和使用、进程配置和管理、运行模式、程序接口、事务管理。

    Oracle 编程艺术深入数据库体系结构(第2版)

    Oracle 编程艺术深入数据库体系结构(第2版)涵盖了所有重要的oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及数据加密等,并利用具体的例子来...

    Oracle Database 10g:数据库管理-课堂练习I

    Oracle 数据库体系结构 1 8 数据库结构 1 9 Oracle 内存结构 1 10 进程结构 1 12 Oracle 实例管理 1 13 服务器进程和数据库缓冲区高速缓存 1 14 物理数据库结构 1 15 表...

    Oracle 9i 10g编程艺术深入体系结构 中文版

    书中深入地分析了oracle数据库体系结构,包括文件、内存结构以及构成oracle数据库和实例的底层进程,然后讨论了一些重要的数据库主题,如锁定、并发控制、事务、重做和撤销,还解释了这些内容的重要性。最后,分析了...

    Oracle 9i & 10g编程艺术:深入数据库体系结构

    书中深入地分析了Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库和实例的底层进程,然后讨论了一些重要的数据库主题,如锁定、并发控制、事务、重做和撤销,还解释了这些内容的重要性。最后,分析了...

    Oracle Database 9i 10g 11g编程艺术 深入数据库体系结构 第2版

    本书是一本关于Oracle Database 9i、10g 和11g 数据库体系结构的权威图书,涵盖了所有重要的Oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及...

    Oracle 9i_10g编程艺术:深入数据库体系结构

    书中深入地分析了Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库和实例的度层进程,然后讨论了一些重要的数据库主题,如锁定、并发控制、事务、重做和撤销,还解释了这些内重要性。*后,分析了...

    Oracle Database 9i 10g 11g编程艺术 深入数据库体系结构

    本书是一本关于Oracle Database 9i、10g 和11g 数据库体系结构的权威图书,涵盖了所有重要的Oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及...

    Oracle编程艺术:深入理解数据库体系结构 第二版

    本书是一本关于Oracle数据库体系结构的权威图书,涵盖了所有重要的Oracle体系结构特性,包括文件、内存结构和进程、锁和闩、事务、并发和多版本、表和索引、数据类型、分区和并行,以及数据加载和卸载,并利用具体的...

    数据库内存分析和数据库的体系结构详解

    Oracle的体系结构和内存分析 Oracle10个的体系结构和内存分析

    Oracle_Database_9i10g11g编程艺术深入数据库体系结构(第二版)PDF及涉及源代码

    喜欢做无偿分享,但平台现在要求最低资源分1...书中深入分析了Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题,如锁定、并发控制、事务等。

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 91 3.5 临时文件 93 3.6 控制文件 95 3.7 重做日志文件 95 3.7.1 在线重做日志 96 3.7.2 归档重做日志 98 3.8 密码文件 100 3.9 ...

Global site tag (gtag.js) - Google Analytics