2.1物理结构2.2逻辑结构2.3数据库例程2.4内存结构2.5进程结构2.6数据字典第二章Oracle9i体系结构数据库例程是指Oracle用来访问数据库文件的系统全局区(SGA)以及一系列后台进程的集合,它是存取和控制数据库的软件机制。2.3Oracle数据库例程Instance=SGA+{BackgroundProcess}用户例程数据库请求结果请求结果DBA创建数据库例程11对应2.4内存结构2.4.1系统全局区SGA2.4.2程序全局区PGA2.4.3排序区SORT_AREA2.4.4软件代码区SoftwareCodeArea系统全局区是内存结构的主要组成部分,是Oracle为一个例程分配的一组共享内存缓冲区,保存着Oracle系统与所有数据库用户的共享信息。是例程的主要部分。2.4.1系统全局区SGA目的:提高系统性能2.4.1系统全局区数据块缓冲区重做日志缓冲区共享池(=库高速缓存+数据字典高速缓存)大池JAVA池数据块缓冲区中存放着Oracle系统最近从数据文件中读取的数据块。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。1.数据块缓冲区DatabaseBufferCache数据块缓冲区数据文件DBWR通过最近最少使用(LRU)算法来管理。相关初始化参数DB_CACHESIZE数据块缓冲区数据文件DBWR对数据库进行的任何修改在记录到重做日志文件之前都必须首先放到重做日志缓冲区(RedoLogBuffer)中。重做日志缓冲区中的内容将被LGWR后台进程随时写入重做日志文件。重做日志缓冲区是一个循环缓冲区,在使用时自顶向下写入数据,然后再返回到缓冲区的起始点循环写入。相关初始化参数:LOG_BUFFER2.重做日志缓冲区RedoLogBuffer重做日志缓冲区日志文件LGWR重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度但是考虑到数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长,所以重作日志缓冲区一般都很小。共享池是SGA中最关键的内存缓冲区,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。共享池又可以分为以下两个部分:库高速缓冲区librarycache数据字典高速缓冲区dictionarycache相关初始化参数:SHARED_POOL_SIZE3.共享池SharedPool当一个用户提交一个SQL语句,Oracle会对这个SQL语句进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL语句后,Oracle会把它的分析结果给保存在Sharedpool的LibraryCache中,当数据库第二次执行这个SQL语句时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL比第二次运行的SQL要慢一点的原因。3.1库高速缓冲区librarycacheSQLselectcount(*)fromscpass;COUNT(*)----------243Elapsed:00:00:00.08这是在Share_pool和DatabaseBufferCache都没有数据缓冲区的情况下所用的时间SQLaltersystemflushSHARED_POOL;Systemaltered.清空Share_pool,保留DatabufferSQLselectcount(*)fromscpass;COUNT(*)----------243Elapsed:00:00:00.02SQLselectcount(*)fromscpass;COUNT(*)----------243Elapsed:???00:00:00.00对于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到select*fromV$Sqltext;select*fromv$Sqlarea;对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计得差的应用程序可以毁掉整个数据库的Sharedpool提高SQL语句的重用率必须先养成良好的编程习惯,尽量使用Bind变量。数据字典高速缓冲区用于保存从数据字典中读出内容。数据字典缓冲区也通过最近最少使用(LRU)算法来管理。3.2数据字典高速缓冲区用来存储Java代码。Oracle在内核中加入了对Java的支持。该程序缓冲区就是为Java程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。4.Java池JavaPool大池的得名不是因为大,而是因为它用来分配大块的内存,在8.0开始引入。5.大池LargePool在共享服务器模式下——用作会话内存语句的并行查询——用作消息缓冲器备份——用于RMAN磁盘I/O缓存下面情况使用大池:程序全局区PGA也称进程全局区(ProcessGlobalArea,PGA)在Oracle9i中,PGA是SGA的一部分相关初始化参数:PGA_AGGREGATE_TARGET2.3.2程序全局区PGA图Oracle9i的一个最重要的加强是对于连接到Oracle数据库的全部专用连接,都无需要拥有一个独立的PGA空间。在Oracle8i中,对于专用的Oracle连接,我们都需要在内存中分配一个独立的区域,称为PGA。PGA空间中包含有SORT_AREA_SIZE和额外的RAM控制结构以用来维护连接任务的状态。在Oracle9i中,PGA空间已经被OracleSGA中的一个新内存空间代替,它是通过PGA_AGGREGATE_TARGET参数来设置的。但是在Oracle9i中,PGA_AGGREGATE_TARGET参数仅对专用服务器模式下(DedicatedServer)的专属连接有效,对共享服务器(SharedServer)连接无效;从Oracle10g开始PGA_AGGREGATE_TARGET对专用服务器连接和共享服务器连接同时生效。排序区用于sql的orderbyoracle优先使用排序区进行排序,如果内存不够,oracle自动使用临时表空间进行排序。相关初始化参数:SORT_AREA_SIZE2.3.3排序区(SortArea)软件代码区用于存储正在执行的程序代码。2.3.4软件代码区(SoftwareCodeArea)InstanceSGA重做日志缓冲区共享池字典缓存区库缓存区DBWRSMONPMONCKPTLGWROthersUserprocessServerprocessPGAControlfilesDatafilesDatabase数据块缓冲区RedoLogfilesJava池大池ParameterfileArchivedLogfiles进程又称任务,是操作系统中一个极为重要的概念。一个进程执行一组操作,完成一个特定的任务。对Oracle数据库管理系统来说,进程由用户进程、服务器进程和后台进程所组成。2.5进程结构•当用户运行一个应用程序时,系统就为它建立一个用户进程。•用户进程执行的是一个应用程序或Oracle工具程序的代码,以完成用户所指定的任务。•用户进程不是例程。2.5.1用户进程•服务器进程处理用户进程的请求•它与用户进程通信,为与用户服务2.5.2服务器进程Oracle数据库有两种工作模式专用服务器模式:每个用户进程都对应有一个专用的服务器进程为其提供服务。用户进程结束时,对应的服务器进程就会中止。如果同时存在大量的用户进程,就需要启动同样数量的服务器进程。共享服务器模式:Oracle始终保持一定数量的服务器进程用户进程启动时,首先连接到调度进程,然后由调度进程分配一个服务器进程为该客户进程提供服务。只需少量的服务器进程就可以为大量的客户进程服务适用场合:专用服务器:预期客户机连接总数较小,或客户机向数据库的请求持续时间较长共享服务器:并行连接到数据库的用户较多为了提高系统性能,更好地实现多用户功能,Oracle在后台启动一些后台进程,用于数据库的各种数据操作。2.5.3后台进程完成自动例程恢复;回收临时表空间;1、SMON系统监控进程在用户进程出现故障时,负责撤销进程,释放该进程所使用的资源周期性地检查服务器进程和调度进程的状态,如果这些进程处于僵死状态,则重新启动它们2、PMON进程监控进程•DBWR是dbblockbuffer的管理进程•DBWR负责把内存中已被修改的数据库块写入到数据文件中•保证当服务进程需要从数据文件中读取数据到dbblockbuffer中时dbblockbuffer有足够的空闲空间3、DBWR数据库写进程3、DBWR数据库写进程•DBWR工作的条件检查点发生时;dirtybuffer的块数达到阀值时;当扫描空闲块达不到所要求的数量时;timeout发生时;表空间离线时;表空间改成只读时;drop表或者truncate时;开始表空间备份时。LGWR负责将日志缓冲区内的重做项写入磁盘上的日志文件4、LGWR日志文件写进程LGWR工作的条件用户提交一个事务RedoLogBuffer为三分之一满有大于1M重做日志缓冲区未被写入磁盘DBWR需要写入的数据的SCN号大于LGWR记录的SCN号,DBWR触发LGWR写入•作用:同步数据文件,日志文件和控制文件•由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一致,这就需要CKPT进程来同步5、CKPT检查点进程CKPT工作的条件在日志切换的时候数据库正常关闭时超时•ARCH负责将磁盘上的已经写满的日志文件复制到一个指定的存储设备上。•ARCH是一个可选进程。只有下面两种情况下才启动:在归档模式下DBA发出手动归档请求6、ARCH归档进程•RECO是在分布式数据库中使用的一个进程。•用于解决分布在多个地点的数据保持同步的问题。7、RECO恢复进程•LCKN是一个可选进程,用于并行服务器系统。•完成例程之间的锁定。8、LCKN锁定进程2.6数据字典数据字典是Oracle数据库的重要组成。它由一组只读表组成。包括:•所有数据库对象的框架定义(表、视图、索引、群集、同义词、序列、过程、函数、包、触发器等)•空间的分配和使用情况•列的默认值•完整性约束信息•数据库安全信息,包括用户、权限、角色等•审计信息数据字典的结构前缀范围USER用户视图ALL用户可访问的视图DBA数据库管理员视图V$动态性能视图数据字典的结构SQL语句的执行过程A、用户发出SQL请求,打开游标;B、把SQL语句语法分析,执行计划,数据字典等信息存入内存中共享池内;C、从数据文件中把相关数据块读入数据缓冲区;D、做相应操作,若做修改,先加上行级锁,经确认后,把对数据库的修改记录到重做日志缓冲区中;E、返回结果给用户,关闭游标。备注:SQL语句大小写敏感的,同样的一个语句,若大小写不同,oracle需分析执行两次。COMMIT的步骤当COMMIT执行时:1服务器进程在redologBuffer中放置一个SCN作为commit记号。2LGWR执行一个不间断的写操作,包括所有的redologbuffer写到redologfiles及commit记号。3用户被通知COMMIT完成。.4服务器进程显示事务已经完成,锁可以被释放。