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的大小是不可以动态调整的。=====================================SQLshowparametersgaNAMETYPEVALUE-------------------------------------------------------loc您正在看的Oracle是:Oracle的内存结构和进程结构。k_sgabooleanFALSEpre_page_sgabooleanFALSEsga_max_sizebiginteger164Msga_targetbiginteger0SQLaltersystemsetsga_max_size=100m;altersystemsetsga_max_size=100m*ERRORatline1:ORA-02095:specifiedinitializationparametercannotbemodified======================================系统全局区按作用不同可以分为:•数据缓冲区•日志缓冲区•共享池2-1-1:数据缓冲区(DatabaseBufferCache)如果每次执行一个操作时,Oracle都必须从磁盘读取所有数据块并在改变它之后又必须把每一块写入磁盘,显然效率会非常低。数据缓冲区存放需要经常访问的数据,供所有用户使用。修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,修改/插入数据也存储在缓冲区中,commit或DBWR(下面有详细介绍)进程的其他条件引发时,数据被写入数据文件。数据缓冲区的大小是可以动态调整的,但是不能超过sga_max_size的限制。======================================SQLshowparameterdb_cache_sizeNAMETYPEVALUE----------------------------------------------------------------db_cache_sizebiginteger24MSQLaltersystemsetdb_cache_size=128m;altersystemsetdb_cache_size=128m*ERRORatline1:ORA-02097:parametercannotbemodifiedbecausespecifiedvalueisinvalidORA-00384:Insuffic您正在看的Oracle是:Oracle的内存结构和进程结构。ientmemorytogrowcacheSQLaltersystemsetdb_cache_size=20m;Systemaltered.SQLshowparameterdb_cache_size;NAMETYPEVALUE----------------------------------------------------------------db_cache_sizebiginteger20M#此处我仅增加了1M都不行?SQLaltersystemsetdb_cache_size=25m;altersystemsetdb_cache_size=25m*ERRORatline1:ORA-02097:parametercannotbemodifiedbecausespecifiedvalueisinvalidORA-00384:Insufficientmemorytogrowcache#修改显示格式,方便查看。SQLcolumnnameformata40wrapSQLcolumnvalueformata20wrap#下面语句可以用来查看内存空间分配情况,注意SGA各区大小总和。SQLselectname,valuefromv$parameterwherenamelike'%size'andvalue'0';#先将Java_pool_size调小,然后再修改db_cache_sizeSQLshowparameterJava_pool_size;NAMETYPEVALUE----------------------------------------------------Java_pool_sizebiginteger48MSQLaltersystemsetJava_pool_size=20m;Systemaltered.SQLaltersystemsetJava_pool_size=30m;Systemaltered.#上面说明SGA中各区大小总和不能超过sga_max_size。=====================================数据缓冲区的大小对数据库的存区速度有直接影响,多用户时尤为明显。有些应用对速度要求很高,一般要求数据缓冲区的命中率在90%以上。下面给出一种计算数据缓冲区命中率的方法:•使用数据字典v$sysstat=====================================SQLselectname,valuefromv$sysstat2wherenamein('sessionlogicalreads',3'physicalreads',4'physicalreadsdirect',5'physicalreadsdirect(lob)')NAMEVALUE-----------------------------------------sessionlogicalreads895243physicalreads14992physicalreadsdirect34physicalreadsdirect(lob)0======================================命中率=1-(14992-34-0)/895243可以让Oracle给出数据缓冲区大小的建议:======================================SQLaltersystemsetdb_cache_advice=on;#打开该功能Systemaltered.SQLaltersystemsetdb_cache_advice=off;#关闭该功能Systemaltered.======================================2-1-2:日志缓冲区(LogBufferCache)日志缓冲区用来存储数据库的修改信息。该区对数据库性能的影响很小,有关日志后面还会有详细的介绍。查询日志缓冲区大小:SQLshowparameterlog_bufferNAMETYPEVALUE----------------------------log_bufferinteger2621442-1-3:共享池(SharePool)共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域。它包含三个部分:(都不可单独定义大小,必须通过sharepool间接定义)。•库缓冲区(LibraryCache)包含SQL,PL/SQL语句的分析码,执行计划。•数据字典缓冲区(DataDictionaryCache)表,列定义,权限。•用户全局区(UsrGlobalArea)用户MTS会话信息。共享池的大小可以动态修改:======================================SQLshowparametershared_pool_sizeNAMETYPEVALUE-----------------------------------------------------__shared_pool_sizebiginteger80Mshared_pool_sizebiginteger80MSQLaltersystemsetshared_pool_size=78mSystemaltered.======================================#上面的__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确定,可用下面语句查询和修改:=========================================SQLshowparameterlarge_p

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功