首页 Oracle的内存结构跟进程结构

Oracle的内存结构跟进程结构

举报
开通vip

Oracle的内存结构跟进程结构 1:Oracle实例(Instance)          在一个服务器中,每一个运行的Oracle数据库都与一个数据库实例相联系,实例是我们 访问数据库的手段。  实例在操作系统中用ORACLE_SID来标识,在Oracle中用参数INSTANCE_NAME来标识, 它们两个的值是相同的。数据库启动时,系统首先在服务器内存中分配系统全局区(SGA), 构...

Oracle的内存结构跟进程结构
 1:Oracle实例(Instance)          在一个服务器中,每一个运行的Oracle数据库都与一个数据库实例相联系,实例是我们 访问数据库的手段。  实例在操作系统中用ORACLE_SID来标识,在Oracle中用参数INSTANCE_NAME来标识, 它们两个的值是相同的。数据库启动时,系统首先在服务器内存中分配系统全局区(SGA), 构成了Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了Oracle的 进程结构,内存区域和后台进程合称为一个Oracle实例。                   数据库与实例之间是1对1/n的关系,在非并行的数据库系统中每个Oracle数据库与一个 实例相对应;在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个 实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。在任何 情况下,每个实例都只可以对应一个数据库。 2:Oracle10g动态内存管理  内存是影响数据库性能的重要因素,Oracle8i使用静态内存管理,Oracle10g使用动态 内存管理。所谓静态内存管理,就是在数据库系统中,无论是否有用户连接,也无论并发用 量大小,只要数据库服务在运行,就会分配固定大小的内存;动态内存管理允许在数据库服 务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读 取标准内存块时使用标准内存设置。  按照系统对内存使用方法的不同,Oracle数据库的内存可以分为以下几个部分:  •系统全局区:SGA(SystemGlobalArea)  •程序全局区:PGA(ProgrameGlobalArea)  •排序池:(SortArea)  •大池:(LargePool)  •Java池:(JavaPool) 2-1:系统全局区SGA(SystemGlobalArea)   SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信  息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。  当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。  SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。  SGA的有关信息可以通过下面的语句查询,sga_max_size的大小是不可以动态调整的。   =====================================   SQL>showparametersga   NAME                                TYPE       VALUE   -------------------------------------------------------   loc您正在看的Oracle是:Oracle的内存结构和进程结构。k_sga                            boolean    FALSE   pre_page_sga                        boolean    FALSE   sga_max_size                        biginteger164M   sga_target                          biginteger0      SQL>altersystemsetsga_max_size=100m;   altersystemsetsga_max_size=100m                *   ERRORatline1:   ORA-02095:specifiedinitializationparametercannotbemodified   ======================================    系统全局区按作用不同可以分为:   •数据缓冲区   •日志缓冲区   •共享池  2-1-1:数据缓冲区(DatabaseBufferCache)    如果每次执行一个操作时,Oracle都必须从磁盘读取所有数据块并在改变它之后   又必须把每一块写入磁盘,显然效率会非常低。数据缓冲区存放需要经常访问的数据,   供所有用户使用。修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,   修改/插入数据也存储在缓冲区中,commit或DBWR(下面有详细介绍)进程的其他条   件引发时,数据被写入数据文件。    数据缓冲区的大小是可以动态调整的,但是不能超过sga_max_size的限制。   ======================================   SQL>showparameterdb_cache_size   NAME                                TYPE       VALUE   ----------------------------------------------------------------   db_cache_size                       biginteger24M      SQL>altersystemsetdb_cache_size=128m;   altersystemsetdb_cache_size=128m   *   ERRORatline1:   ORA-02097:parametercannotbemodifiedbecausespecifiedvalueisinvalid   ORA-00384:Insuffic您正在看的Oracle是:Oracle的内存结构和进程结构。ientmemorytogrowcache   SQL>altersystemsetdb_cache_size=20m;   Systemaltered.      SQL>showparameterdb_cache_size;   NAME                                TYPE       VALUE   ----------------------------------------------------------------   db_cache_size                       biginteger20M      #此处我仅增加了1M都不行?   SQL>altersystemsetdb_cache_size=25m;   altersystemsetdb_cache_size=25m   *   ERRORatline1:   ORA-02097:parametercannotbemodifiedbecausespecifiedvalueisinvalid   ORA-00384:Insufficientmemorytogrowcache   #修改显示格式,方便查看。   SQL>columnnameformata40wrap   SQL>columnvalueformata20wrap      #下面语句可以用来查看内存空间分配情况,注意SGA各区大小总和。   SQL>selectname,valuefromv$parameterwherenamelike'%size'andvalue<>'0';      #先将Java_pool_size调小,然后再修改db_cache_size   SQL>showparameterJava_pool_size;   NAME                                TYPE       VALUE   ----------------------------------------------------   Java_pool_size                      biginteger48MSQL>altersystemsetJava_pool_size=20m;   Systemaltered.   SQL>altersystemsetJava_pool_size=30m;   Systemaltered.   #上面说明SGA中各区大小总和不能超过sga_max_size。   =====================================    数据缓冲区的大小对数据库的存区速度有直接影响,多用户时尤为明显。有些应   用对速度要求很高,一般要求数据缓冲区的命中率在90%以上。    下面给出一种计算数据缓冲区命中率的方法:    •使用数据字典v$sysstat    =====================================    SQL>selectname,valuefromv$sysstat       2 wherenamein('sessionlogicalreads',       3 'physicalreads',       4 'physicalreadsdirect',       5 'physicalreadsdirect(lob)')    NAME                             VALUE    -----------------------------------------    sessionlogicalreads              895243    physicalreads                      14992    physicalreadsdirect                  34    physicalreadsdirect(lob)             0    ======================================    命中率=1-(14992-34-0)/895243    可以让Oracle给出数据缓冲区大小的建议:    ======================================    SQL>altersystemsetdb_cache_advice=on;#打开该功能    Systemaltered.    SQL>altersystemsetdb_cache_advice=off;#关闭该功能    Systemaltered.    ======================================2-1-2:日志缓冲区(LogBufferCache)    日志缓冲区用来存储数据库的修改信息。该区对数据库性能的影响很小,有关日   志后面还会有详细的介绍。    查询日志缓冲区大小:SQL>showparameterlog_buffer   NAME           TYPE         VALUE   ----------    ----------- -------   log_buffer    integer      262144   2-1-3:共享池(SharePool)    共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域。    它包含三个部分:(都不可单独定义大小,必须通过sharepool间接定义)。    •库缓冲区(LibraryCache)包含SQL,PL/SQL语句的分析码,执行 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 。    •数据字典缓冲区(DataDictionaryCache)表,列定义,权限。    •用户全局区(UsrGlobalArea)用户MTS会话信息。   共享池的大小可以动态修改:    ======================================    SQL>showparametershared_pool_size    NAME                                TYPE       VALUE    -----------------------------------------------------    __shared_pool_size                  biginteger80M    shared_pool_size                    biginteger80M        SQL>altersystemsetshared_pool_size=78m     Systemaltered.    ======================================    #上面的__shared_pool_size一行奇怪? 2-2:程序全局区PGA(ProgrameGlobalArea)   程序全局区是包含单个用户或服务器数据和控制信息的内存区域,它是在用户进程连  接到Oracle并创建一个会话时由Oracle自动分配的,不可共享,主要用于用户在编程存  储变量和数组。      如上图:    •StackSpace是用来存储用户会话变量和数组的存储区域;    •UserSessionData是为用户会话使用的附加存储区。     |--SessionInformation     |--SortArea     |--CursorInformation      注意Sessioninformation(用户会话信息)在独占服务器中与在共享服务器中所处  的内存区域是不同的。 2-3:排序区,大池,Java池   排序区(SortArea)为有排序要求的SQL语句提供内存空间。系统使用专用的内存区  域进行数据排序,这部分空间就是排序区。在Oracle数据库中,用户数据的排序可使用  两个区域,一个是内存排序区,一个是磁盘临时段,系统优先使用内存排序区进行排序。  如果内存不够,Orcle自动使用磁盘临时表空间进行排序。为提高数据排序的速度,建议  尽量使用内存排序区,而不要使用临时段。   参数sort_area_size用来设置排序区大小。(好象不能动态修改?)   大池(LargePool)用于数据库备份工具--恢复管理器(RMAN:RecoveryManager)。  LargePool的大小由large_pool_size确定,可用下面语句查询和修改:  =========================================  SQL>showparameterlarge_pool_size  NAME                 TYPE       VALUE  -----------------  ------------------  large_pool_size    biginteger     8M  SQL>altersystemsetlarge_pool_size=7m;  Systemaltered.   =========================================      Java池主要用于Java语言开发,一般来说不低于20M。其大小由Java_pool_size来  确定,可以动态调整。 2-4:Oracle自动共享内存管理(AutomaticSharedMemory(SGA)Management)  在Oracle8i/9i中数据库管理员必须手动调整SGA各区的各个参数取值,每个区要根据 负荷轻重分别设置,如果设置不当,比如当某个区负荷增大时,没有调整该区内存大小,则 可能出现ORA-4031:unabletoallocate...bytesofsharedmemory错误。  在Oracle10g中,将参数STATISTICS_LEVEL设置为TYPICAL/ALL,使用SGA_TARGET指 定SGA区总大小,数据库会根据需要在各个组件之间自动分配内存大小。 下面是系统自动调整的区域:  •固定SGA区及其他•共享池•数据缓冲区• Java池•大池。  注意:如果不设置SGA_TARGET,则自动共享内存管理功能被禁止。  ==========================================  SQL>showparameterstatistics_level  NAME                    TYPE       VALUE  --------------------------------------------  statistics_level     string     TYPICAL    SQL>altersystemsetstatistics_level=all;  Systemaltered.  #typical和all有什么区别?    SQL>altersystemsetstatistics_level=typical;<BR<p>>  Systemaltered.  SQL>showparametersga_target  NAME           TYPE       VALUE  ----------------------------------  sga_target   biginteger0  SQL>altersystemsetsga_target=170m;  altersystemsetsga_target=170m  *  ERRORatline1:  ORA-02097:parametercannotbemodifiedbecausespecifiedvalueisinvalid  ORA-00823:Specifiedvalueofsga_targetgreaterthansga_max_size  SQL>altersystemsetsga_target=20m;  Systemaltered.  #不过后来又发现sga_target的值变成了140M?下面是语句执行情况。  SQL>showparametersga_target  NAME         TYPE       VALUE  -------------------------------  sga_target   biginteger140M    SQL>altersystemsetsga_target=0;  Systemaltered.  SQL>showparametersga_target  NAME                                TYPE       VALUE  -----------------------------------------------------  sga_target                          biginteger0  #改为20M  SQL>altersystemsetsga_target=20m;  Systemaltered.  #显示的是140M  SQL>showparametersga_target  NAME                                TYPE       VALUE  -----------------------------------------------------  sga_target                      &nbsp;   biginteger140M  #不可缩减?  SQL>altersystemsetsga_target=130m;  altersystemsetsga_target=130m  *  ERRORatline1:  ORA-02097:parametercannotbemodifiedbecausespecifiedvalueisinvalid  ORA-00827:couldnotshrinksga_targettospecifiedvalue    #不可增加  SQL>altersystemsetsga_target=141m;  altersystemsetsga_target=141m  *  ERRORatline1:  ORA-02097:parametercannotbemodifiedbecausespecifiedvalueisinvalid  ORA-00823:Specifiedvalueofsga_targetgreaterthansga_max_size  3:Oracle实例的进程结构(ProcessStructure) Oracle包含三类进程: •用户进程(UserProcess) •服务器进程(ServerProcess) •后台进程(BackgroundProcess)  3-1:用户进程和服务器进程  当数据库用户请求连接到Oracle的服务时启动用户进程(比如启动SQLPlus时)。  •用户进程首先必须建立一个连接。  •用户不能直接与Oracle服务器,必须通过服务器进程交互。  •服务器进程是用户进程与服务器交互的桥梁,它可以与OracleServer直接交互。  •服务器进程可以有共享和独占两种形式。                3-2:后台进程(BackgroungProcess)  数据库的物理结构与内存结构之间的交互要通过后台进程来完成。数据库的后台进程包 含两类,一类是必须的,一类是可选的:  •Mandatorybackgroundprocesses   |--DBWn(DatabaseWriter):数据写入   |--PMON(ProcessMoniter):进程监控   |--LGWR(LogWriter):日志写入   |--SMON(SystemMoniter):系统监控   |--RECO(Recovery):恢复   |--CKPT(Chekpoint):检查点  •Optionalbackgroundprocesses   |--ARCn(Archiver):归档   |--LCKn(Lock):锁   |--Dnnn(Dispatcher):调度   |--......  可以用下面的语句查看正在运行的后台进程:  =========================================SQL>select*fromv$bgprocesswherepaddr<>'00';  PADDR     PSERIAL#NAME DESCRIPTION                            ------------------------------------------------------  6B0ED064         1PMON processcleanup                        6B0ED4E4         1MMAN MemoryManager                         6B0ED964         1DBW0 dbwriterprocess0                    6B0EDDE4         1LGWR Redoetc.                              6B0EE264         1CKPT checkpoint                             6B0EE6E4         1SMON SystemMonitorProcess                 6B0EEB64         1RECO distributedrecovery                   6B0EEFE4         1CJQ0 JobQueueCoordinator                  6B0F01E4         1QMNC AQCoordinator                        &nbs
本文档为【Oracle的内存结构跟进程结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
Jenny
暂无简介~
格式:doc
大小:397KB
软件:Word
页数:0
分类:房地产
上传时间:2020-02-05
浏览量:0