OracleDatabase10g教程第7章数据库实例OracleDatabase10g教程本章内容Oracle实例概述Oracle内存结构Oracle后台进程OracleDatabase10g教程本章要求掌握Oracle实例基本概念掌握Oracle实例的内存结构、功能及管理了解Oracle进程分类及其作用掌握Oracle后台进程、功能及管理OracleDatabase10g教程7.1实例概述1.Oracle实例的概念–数据库实例是用户与数据库进行交互的中间层。–Oracle数据库主要由两部分构成:•放在磁盘中的物理数据库•对物理数据库进行管理的数据库管理系统。–其中:数据库管理系统是处于用户与物理数据库之间的一个中间层软件,又称为实例.–实例由一系列内存结构和后台进程组成。OracleDatabase10g教程7.1实例概述–启动数据库:•Oracle-〉在内存中获取一定的空间-〉启动各种用途的后台进程-〉创建一个数据库实例-〉由实例装载数据文件和重做日志文件-〉打开数据库。–用户操作数据库的过程:•与数据库实例建立连接-〉通过实例来连接、操作数据库OracleDatabase10g教程2.数据库与实例的关系单实例数据库系统1:1OracleDatabase10g教程2.数据库与实例的关系多实例数据库系统1:n多个实例同时驱动一个数据库的架构称做“集群”。同一时间一个用户只能与一个实例联系。OracleDatabase10g教程3.实例组成Oracle实例内存结构后台进程系统全局区(SGA)程序全局区(PGA)OracleDatabase10g教程3.实例组成进OracleDatabase10g教程处理数据的内存结构实例后台进程客户应用程序服务器进程数据库OracleDatabase10g教程实例SGA重做日志缓冲区共享池数据字典缓冲区库缓冲区DBWRSMONPMONCKPTLGWROthers用户进程服务器进程PGA控制文件数据文件归档日志文件参数文件口令文件重做日志文件数据库高速数据缓冲区OracleDatabase10g教程7.2Oracle内存结构内存是重要的信息缓存和共享区域,主要存储执行的程序代码、连接会话信息、中间数据和共享信息等。根据使用范围的不同,分为:–系统全局区(SystemGlobalArea,SGA)–程序全局区(ProgramGlobalArea,PGA)OracleDatabase10g教程1.SGA–SGA是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。–当多个用户同时连接同一个实例时,SGA数据可供多个用户共享,SGA又称为共享全局区(SharedGlobalArea)。–用户对数据库的各种操作主要在SGA中进行。–该内存区随数据库实例的创建而分配,随实例的终止而释放。OracleDatabase10g教程PGA–PGA是在用户进程连接数据库、创建一个会话时,由Oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息,该区又称为私有全局区(PrivateGlobalArea)。–每个服务器进程只能访问自己的PGA,所有服务器进程的PGA总和即为实例的PGA的大小。OracleDatabase10g教程7.2.1SGASGA包含的内存结构有:–数据高速缓冲区(DatabaseBufferCache)–共享池(SharedPool)–重做日志缓冲区(RedoLogCache)–大型池(LargePool)–Java池(JavaPool)–流池(StreamsPool)–其他结构(如固定SGA、锁管理等)OracleDatabase10g教程1.数据高速缓冲区(1)功能–存储最近从数据文件中检索出来的数据,供所有用户共享。–应用程序要访问的数据必须从磁盘的数据文件读到数据缓冲区中处理。–在数据缓冲区中被修改后的数据由数据写入进程写到硬盘的数据文件中永久保存。–提高获取和更新数据的性能。OracleDatabase10g教程数据高速缓冲区的工作过程OracleDatabase10g教程(2)缓冲块的类型–脏缓存块(DirtyBuffers)•保存的是已经被修改过的数据。•最终由DBWR进程写入数据文件,永久保存。–空闲缓存块(FreeBuffers)•不包含任何数据•等待后台进程或服务器进程向其写入数据。•当Oracle从数据文件中读取数据时,将会寻找空闲缓存块,以便将数据写入其中。–命中缓存块(PinnedBuffers)•正被使用,或者被显式地声明为保留的缓存块。•始终保留在数据高速缓冲区中,不会被换出内存。OracleDatabase10g教程(3)缓存块的管理–脏缓存块列表:已经被修改但还没有写入数据文件的脏缓存块。–LRU列表(LeastRecentlyUsed):包含所有的空闲缓存块、命中缓存块和那些还没有来得及移入到脏缓存块列表中的脏缓存块。OracleDatabase10g教程(4)数据高速缓冲区大小–数据高速缓冲区越大,用户需要的数据在内存中的可能性就越大,即缓存命中率越高,从而减少了Oracle访问硬盘数据的次数,提高了数据库系统执行的效率。–如果数据高速缓冲区的值太大,Oracle就不得不在内存中寻找更多的块来定位所需要的数据,反而降低了系统性能。–需要确定一个合理的数据高速缓冲区大小。–DB_CACHE_SIZE(标准块)OracleDatabase10g教程查看数据高速缓冲区的构成2019年12月19日第21页SQLaltersystemsetdb_cache_size=80m;SystemalteredOracleDatabase10g教程2.重做日志缓冲区(1)功能–重做日志缓冲区用于缓存用户对数据库进行修改操作时生成的重做记录。–数据库的修改包括:–数据库对象的创建、修改、删除等–数据信息的插入、修改、删除等–重做日志缓冲区是一个循环缓冲区OracleDatabase10g教程重做日志缓冲区的工作过程重做记录OracleDatabase10g教程(2)重做日志缓冲区的大小–LOG_BUFFER–较大的重做日志缓冲区,可以减少对重做日志文件写的次数,适合长时间运行的、产生大量重做记录的事务。OracleDatabase10g教程3.共享池功能–共享池用于缓存最近执行过的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句、PL/SQL程序进行语法分析、编译、执行的区域。OracleDatabase10g教程共享池组成–库缓存•库缓存用于缓存已经解释并执行过的SQL语句和PL/SQL程序代码,以提高SQL或PL/SQL程序的执行效率。•包括SQL工作区和PL/SQL工作区–数据字典缓存区•数据字典缓存区保存最常用的数据字典信息,如数据库对象信息、账户信息、数据库结构信息等。OracleDatabase10g教程共享池大小–SHARED_POOL_SIZE–合适的共享池大小,可使编译过的程序代码长驻内存,大大降低重复执行相同的SQL语句、PL/SQL程序的系统开销,从而提高数据库的性能。SQLaltersystemsetshared_pool_size=50m;SystemalteredOracleDatabase10g教程4.大型池功能–大型池是一个可选的内存配置项,主要为Oracle共享服务器、服务器I/O进程、数据库备份与恢复操作、执行具有大量排序操作的SQL语句、执行并行化的数据库操作等需要大量缓存的操作提供内存空间。–如果没有在SGA区中创建大型池,上述操作所需要的缓存空间将在共享池或PGA中分配,因而影响共享池或PGA的使用效率。OracleDatabase10g教程4.大型池大型池大小参数:SQLaltersystemsetlarge_pool_size=10m;SystemalteredOracleDatabase10g教程(5)Java池功能–Java池是一个可选的内存配置项,提供对Java程序设计的支持,用于存储Java代码、Java语句的语法分析表、Java语句的执行方案和进行Java程序开发。Java池大小–JAVA_POOL_SIZE–通常不小于20M,以便安装Java虚拟机。OracleDatabase10g教程(6)流池功能–流池是一个可选的内存配置项,用于对流的支持。流池大小–STREAMS_POOL_SIZEOracleDatabase10g教程7.2.2SGA的管理1.SGA组件大小调整–DB_CACHE_SIZE–LOG_BUFFER–SHARED_POOL_SIZE–LARGE_POOL_SIZE–Java_POOL_SIZE–STRAMS_POOL_SIZE–SGA_MAX_SIZEOracleDatabase10g教程7.2.2SGA的管理注意–除了SGA_MAX_SIZE不能修改外,其他几个参数可以使用ALTERSYSTEM语句进行动态调整。–SGA中内存的分配与回收是以特定单位进行的。通常,SGA总量小于1GB时,该单位为4MB;SGA总量大于1GB时,该单位为16MB。OracleDatabase10g教程2019年12月19日第34页SQLselect*fromv$sgainfo;NAMEBYTESRESIZEABLE----------------------------------------------------FixedSGASize1290208NoRedoBuffers7098368NoBufferCacheSize96468992YesSharedPoolSize167772160YesLargePoolSize12582912YesJavaPoolSize8388608YesStreamsPoolSize0YesGranuleSize4194304NoMaximumSGASize293601280NoStartupoverheadinSharedPool41943040NoFreeSGAMemoryAvailable011rowsselectedOracleDatabase10g教程2.SGA自动管理–在Oracle10g中,通过设置初始化参数SGA_TARGET,可以实现对SGA中的数据高速缓冲区、共享池、大型池、Java池和流池的自动管理,即这几个组件的内存调整不需要DBA来干预,系统自动进行调整。–但是对于日志缓冲区、非标准块的数据高速缓冲区、保留池、回收池等其他区域的调整还需要DBA使用ALTERSYSTEM语句手动进行调整。OracleDatabase10g教程设置SGA自动管理的方法–计算参数SGA_TARGET的大小•SELECT((SELECTSUM(value)FROMV$SGA)-•(SELECTCURRENT_SIZEFROM•V$SGA_DYNAMIC_FREE_MEMORY))/1024/1024||'MB'SGA_TARGETFROMDUAL;OracleDatabase10g教程设置SGA自动管理的方法–设置参数SGA_TARGET•通过ALTERSYSTEM语句设置参数SGA_TARGET的值,该值可以是(1)中计算出来的结果,也可以是当前SGA大小与SGA_MAX_SIZE之间的某个值。OracleDatabase10g教程–将SGA中与自动管理相关的组件大小设置为0•ALTERSYSTEMSETSHARED_POOL_SIZE=0;•SQLALTERSYSTEMSETLARGE_POOL_SIZE=0;•SQLALTERSYSTEMSETJava_POOL_SIZE=0;•SQLALTERSYSTEMSETLARGE_POOL_SIZE=0;•SQLALTERSYSTEMSETSTREAMS_POOL_SIZE=0;如果要取消自动管理,只需将参数SGA_TARGET设置为0即可。OracleDatabase10g教程