




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、传统上Oracle体系结构由内存结构、进程结构、存储结构组成。其中,内存结构由SGA、PGA组成;进程结构由用户进程和Oracle进程组成;存储结构由逻辑存储、物理存储组成。 通过数据库的启动过程和一条sql的执行过程可以将oracle的内存结构、进程结构、存储结构串起来。一、内存结构(1)SGA(System Global Area):一个包含实例数据和控制信息的共享内存区域(2)PGA(Program Global Area):一个包含服务器进程和后台进程的数据和控制信息的共享内存区域1.1系统全局区SGA系统全局区,是 DB Server 中实例的必要组成部分,由很多小内存区共同构成,各
2、个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程( 包括 server process 以 及background process)共享的信息,对系统的运行性能有好处,SGA 在实例启动的时候自动分配 ,实例关闭时自动释放。SGA 暂存系统的大量共享数据,对系统有相当的性能影响,所以需要为SGA 选择适当的管理方式,根据所使用的数据库版本不同,SGA 的管理有三种方式:1)8i:SGA 的大小由所有内存组件大小之和决定,不能直接定义 SGA 大小,对内存组件的大小可后台进行修改,但只能通过直接修改参数文件的内存参数大小,而且修改完数据库必须重起后才能生效,所以这种内存管理方法叫做 S
3、GA 的静态管理。2)9i:SGA 的大小由初始化参数 SGA_MAX_SIZ E 确定,各个内存组件大小之和不能超过这个参数 。可以直接通过命令进行修改内存组件大小而不用重启,这种叫做 SGA 的动态管理3)10g:SGA 大小既可以像 9i 一人样动态管理,也可以实施 SGA 的自动管理,默认是 SGA 的自动管理,启用 SGA 自动管理只需要设置初始化参数 SGATARGET 即可,各个组件大小之和不超过 SGA TARGET 。在自动管理下,SGA 各个内存组件由数据库自动设置大小,设置各个内存区大小的依据来源于系统自动收集的统计信息。在设置内存组件大小的时候,分配的基本单位是粒度(g
4、ranule )granule 是一段连续的虚拟内存,大小取决于 SGA_MAX_SIZE 的大小,如果 SGA_MAX_SIZ E小于 128M ,Granule 为 4M,否则 Granule 为 16M。大多数内存组件的大小必须是 Granule 的整数倍,Redo Log Buffer 的大小不受这个限制,可以自行设置,它与其他小内存区共同构成 Granule 的整数倍。整个 SGA 最小不小于 3 个 Granule 大小,其中共享池一个,数据缓存区一个,其他分一个, SGA的总大小也一定是 Granule 的整数倍大小。SGA 大多数组件的大小可以动态调整,只要确保所有的内存组件大
5、小之和不超过 SGA MAXSIZE 或 SGATARGET 的大小,在 10G 中 SGA 内存组件可以自动管理 ,各个内存大小由数据库自己决定,设置 SGATARGET 参数(非 0)即可以开启内存自动管理,这个参数也可动态修改,如果设置为 0,则意味着,禁用内存自动管理,伋需要 DBA 手动调整各个内存组件大小。以下内存组件大小可以由数据库自动设置1)Buffer cache(db_cache_size)2)Shared pool(shared_pool_size)3)Large pool(large_pool_size)4)Java pool(java_pool_size)5)Stre
6、am pool(stream_poolsize)手动设置:1)LOG_BUFFER2)STREAMS_POOL3)DB_NK_CACHE_SIZE4)DB_KEEP_CACHE_SIZE5)DB_RECYCLE_CACHE_SIZESGA 的必要内存区包括 Shared Pool( 共享池)、 DB Buffer Cache(数据库高速缓存) Redo Log和Buffers (重做日志缓存区)。共享池中又包含了库高速缓存(Library Cache)和数据字典高速缓存(Data Dict Cache) 其中库高速缓存中暂存了最近常用的 SQL 和 PL/SQL 语句文件,分析代码,执行计划,
7、用于减少代码的硬解析频度;数据字典高速缓存中暂存了最近常用的数据字典信息,用于为 SQL 语句解析提供可以快速读取的数据字典信息。数据库高速缓存(DB Buffer Cache)暂存最近常用的数据块信息,减少磁盘 IO 操作,用于提高数据访问的速度。重做日志缓存区暂存最近生成的重做日志,将来批量写到重做日志文件中,这样可以确保日志能够更快的生成,提高 DML 操作的执行速度,也能够减少日志带来的写频度。除了必要内存区外,SGA 也有一些可选的内存区,主要有大池 Large Pool) Java 池 Java Pool)(,(以及流池( Stream Pool)。大池主要用于共享模式存放用户全局
8、区 (UGA) 的信息,也提供 了 对Rman 备份恢复以及并行进程的支持。 Java 池的功能类似于共享池,暂存 Java 程序的信息。Stream 池是 10G 的新内存区,支持新的流复制技术。1.1.1 共享池(Shared pool)共享池用于缓存sql,plsql、数据字典、资源锁及其它用于控制结构相关的数据,共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。太大太小都会扼杀性能,使系统停止,将会消耗大量的CPU来管理这个共享池。共享池大小由参数 shared_pool_size 决定大小,可以动态调整,它的各个内部件大小由共享池大小决定,不能单独设置alter syste
9、m shared_pool_size=100m; 设置共享池大小;如果开启了内存自动管理特性,则不需要 DBA 手动调整。共享池主要包括两个与 sql 语句解析性能相关的内存组件。清空缓存池:alter system flush shared_pool;dbms_shared_pool.purge 某个sql共享池可分为:Library Cache和Data Dictionaey Cache 库高速缓冲区(Library Cache)库高速缓存用于暂存最近常使用的 SQL 和 PL/SQL 语句的文本 ,分析代码,执行计划。SQL 文本也就是 SQL 语句。执行计划是最终 SQL
10、 语句的执行算法,分析代码则是生成执行计划的分析过程。库高速缓存暂时存放常用语句信息的目的是为了能够共享 SQL 代码,从而能够重用已经解析好的执行计划,减少硬解析带来的资源消耗与其它内存区一样,库高速缓存也遵循 LRU 算法管理内存,由于内存空间大小有限,所以总会有一些 SQL 语句的信息被挤出库高速缓存区,这意味着必然会带来一些语句代码的硬解析 ,所以需要对库高速缓存进行一些调整,以减少对解析性能的影响库高速缓存的内部又分为两个内存区,分别缓存 SQL 语句和 PLSQL 语句的信息:共享 sql 区共享 pl/sql 区库高速缓存的大小不能直接设置,受共享池的大小影响,由数据库自行决定对
11、于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Share pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。 数据字典高速缓存区(data dict cache)数据字典高速缓存用于暂存最近常使用的数据字典信息,它同样遵循 LRU 算法管理内存,在字典缓存区中主要暂存解析所需的表空间,存储,表,索引,字段,用户,权限以及其他数据库对象的相关字典信息。由于 SQL 语句解析时,服务进程需要查找相关的数据字典信息以支
12、持解析,而字典信息默认存储在数据文件的数据字典信息中,所以每次解析去 IO 读取数据文件并不是好的选择。将常用的字典信息缓存在数据字典高速缓存区中,能够快速访问所需的字典信息,有效减少解析的时间,所以 SQL 语句解析的性能得到提高。数据字典的大小也不能直接修改,受共享池的大小的影响,数据库自行决定1.1.2 数据高速缓存区(db buffer cache)用于暂存从数据文件中获得的数据块的数据映像,同样遵循 LRU 算法管理内存,不论是表中的数据块,不是索引的数据块,或回滚段的数据块,都被读取到数据高速缓存中进行处理,如果内存中的数据块发生变化,在特定的时机会被DBWR进程将修改后的数据写回
13、到数据文件中。由于大量数据块经常被反复访问,所以如果数据已经读入内存,当再次需要操作这些数据块时就可以在内存中直接获取和更新,减少了磁盘 I/O 的操作,SQL 语句的执行执行效率有大幅的提高初始化参数 DB_BLOCK_SIZE 决定了数据块的大小,这也是数据库 I/O 的最小单位,所以这个参数将影响到数据访问的性能,而且需要注意的是,这个参数在创建数据库之后将不能够被改变,数据高速缓区由多个独立的子缓存池构成,它的大小是这些缓存池的大小之和,这些子缓存区可以独立设置大小,通过下面的参数进行设置1)Default db_cache_size2)Keep db_keep_cache_size3
14、)Recycle db_recycle_cache_sizekeep缓存池适合存放常用的数据字典表,可以把这样的表直接keep在keep缓存池中; recycle缓存池,用完就释放,适合存放不常用的大表这些子缓存池的大小都可以动态调整,但是只有 db_cache_size 可以由数据库自动管理大小,默认只有 db_cache_size 被设置了有效值,其他两个缓存池大小被设置为零1.1.3 重做日志缓冲区(Redo log buffer)重做日志缓冲区用于暂存数据库中所有数据块的改变信息,这些信息将按照改变的发生时间顺序记录在缓存区中,然后在特定的时机下被写入重做日志文件,日志缓存区的内存管理
15、方法是FIFO,也就是是先进先出。重做日志主要被用于提供数据的恢复功能,应用日志前滚( roll forward)就是数据库的基本恢复原理使用重做日志缓冲区的目的是为了提高 DML 或者 DDL 语句的执行速度,减少日志产生带来的性能影响,减少系统日志 I/O 的频度。重做日志缓冲区的大小出 log_buffer 参数决定,但这个内存区不能动态调整大小,也不能被自动管理。重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于
16、3M之后的重作日志缓冲区已经没有太大的实际意义。1.1.4 大池大池是系统全局区中的一个可选内存区,但通常在系统中会进行配置,大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。大池主要以下几种情况使用:1)共享服务器存储用户全局区(UGA )信息2)启用并行进程3)使用 RMAN 作备份恢复大池由参数 large_pool_size 设置,也可以由数据库自动管理1.1.5 JAVA池Java 池也是系统全局区中的一个可选内存区,主要用于数据库中存储的 Java 程序的解析和执行,通常如果不需要在数据库中运行 java 程序,可以不启用就个内存区,但是
17、如果在数据库创建时选择了安装 JVM 组件,那么这个池必须配置。Java 池由 java_pool_size 设置,也可以动态调整.。如果 granule 是 4M,Java 池的默认大小是 24M ,如果 granule 是 16M,Java 池的默认大小是 32M ,如果使用了 JVM 组件,java 池不得小于默认的大小。1.2程序全局区PGA程序全局区是为每个连接数据库会话开辟的私有内存区,每个会话都有自己独立的PGA 区,当用户进程对应的服务进程被创建时分配,也就是会话创建时 PGA 空间分配,会话断开时 PGA空间释放,每个 PGA 区只能被一个服务进程使用。在 8i 的时候每个会
18、话的 pga 大小是固定的,由一些*.area_size 参数准定大小,这样造成了各 个PGA 大小不能结合实际会话的需求而定。从 9i 开始 PGA 使用了自动管理特性,通过参数 pga_aggregate_target 设置 pga 的总大小,而各个会话需要分配 pga 内存时,从总的 pga中直接分配,分配的 pga 空间大小取决于会话的实际需求,这样的分配方式使会话的 pga 大小更加符合实际的会话需求。由于排序内存空间属于 pga 的一个部分,所以各个会话的 pga 大小,将会影响会话的排序性能,需要根据会话的排序情况,设置合适的 PGA 大小PGAAGGREGATETARGET 参
19、数的大小设置可以借鉴一些经验值for oltp 系统:pga_aggregate_target=(总的物理内存大小80%)*20%for dss 系统:pga_aggregate_target=(总的物理内存大小80%)*50%查看PGA信息:select * from v$sysstatselect * from v$sesstat select * from v$pgastat select * from v$sql_workarea select * from v$sql_workarea_active 2.进程结构(1)用户进程:客户端用于连接数据库的程序,主要负责发布需要执行的 SQ
20、L 语句,这些进程创建和维护运行的应用程序或Oracle工具软件代码。 大多数环境中,有单独的计算机客户端进程(2)后台进程:这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护联机重做日志、清理异常中止的进程等(3)服务进程:服务端响应用户操作请求的程序,通常与用户进程一一对应,执行用户进程发出的SQL 语句,并将执行结果返回用户进程。服务进程作用:A解析并执行用户所提交sql语句B在SGA数据库缓存中搜索用户进程所访问的数据,如果搜不到则从硬盘提取数据到数据库缓存中C将数据返回用户进程。后台进程:DBWR 数据库写进程LGWR 日志写进程CKPT 检查点写进程SMON 系统监
21、控进程PMON 进程监控进程ARCH 归档进程RECO 恢复进程LCKn 封锁进程前五个为oracle的五大进程。DBWR数据库写进程将数据库缓存中被修改过的脏数据写入到数据文件中。由于脏数据可能过多,单个DBWR进程有可能忙不过来,所以DBWR可以定义多个,oracle最多允许启动10个DBWR进程,进程名称分别为DBWR0-DBWR9,统称为DBWn。写入时机:1)产生检查点2)脏数据缓冲区达到阀值 默认10%3)扫描整个data buffer没有空闲 data buffer中包含脏的和未脏的 优先写脏数据列表 再写未改的4)timeout超时 如果DBWR没事做 会被每三秒唤醒一次去巡检
22、 写不写不一定5)集群环境的ping请求触发多实例的数据写请求6)表级别的truncate或drop也会触发数据写7)表空间read only 只读8)表空间offline离线9)热备份 begin backup命令与用户的commit无关。LGWR重做日志写进程将重做日志缓存中的重做记录写入联机重做日志文件。写入时机:用户commit;写满重做日志缓存1/3;日志缓冲区达到1/3满;DBWR将数据库缓存中的脏缓存块成批写入到数据文件之前;发生超时时,每隔3秒。CKPT检查点进程发生时说明所有已提交的事务对数据的更改已写入硬盘,数据库处于完整状态。更新控制文件和数据文件。用于强制DB serv
23、er的同步操作,同步每隔一些时间会执行一次,确保同步之前所有被修改过的脏数据都被写入到了数据文件中,这些被写入的数据文件中的数据在系统崩溃时不需要恢复,只有内存中的数据丢失,需要被恢复,在系统崩溃时的这种恢复操作叫做实例恢复,实例恢复由于存储介质并没有损坏,所以仅需要应用日志记录,即可恢复检查点进程执行下面的动作来完成同步操作1)通知DBWR进程将当前的SCN之前的所有脏数据写入数据文件;2)在脏数据写入数据文件后将所有数据文件头和控制文件中记录同一个SCN号表示同步操作的完成。在数据库正常关闭时,系统一定会由检查点进程执行同步操作,以确保数据库启动时可以直接打开。在日志文件写满后发生日志切换
24、时,同样发生同步,以确保实例恢复只需要使用重做日志文件内容。SMON系统监控程序在数据库启动时检查数据库是否需要恢复,如需要则执行恢复;恢复的方法:先前滚=>后回滚=>释放资源前滚 将数据库中的SQL(包括提交的和未提交的)全部重新做一遍回滚 将没提交的SQL句从数据库中将老的镜像取出覆盖释放资源 将前滚和回滚中使用到的资源释放在排序结束后释放临时段(对临时表空间有效);合并表空间中的空闲空间碎片(在字典管理表空间时使用)。PMON进程监视程序1)清理与实例非法断开的server_process残留的资源 非正常终止的用户进程产生的垃圾资源如果PMON检测到连接异常终止,将执行下面
25、的任务:回滚该会话没完成的事务释放该事务占用的锁释放该会话占用的其他资源2)负责重启以外死掉的调度器(网络监听中使用的)3)将实例的信息注册到监听程序3.存储结构包括:物理结构和逻辑结构,这两种存储结构既相互独立又相互联系。3.1物理结构:物理存储主要是由一些物理文件组成,包括:数据文件、日志文件、控制文件、初始化参数文件:pfilespfile、passwordfile、还有一些辅助文件:archived log files、alert.log警告文件、各dump文件夹下的跟踪文件、外部表文件这些文件主要是OS层面的。即一系列物理文件的集合:数据文件:存储数据,以.dbf做后缀。一句话:一个
26、表空间对多个数据文件,一个数据文件只对一个表空间。dba_data_files/v$datafile。控制文件:控制文件记录着数据库的物理文件信息和数据库的状态信息 非常重要 一个控制文件是定义当前物理数据库当前状态的一个小的二进制文件Oracle 服务器在数据库使用的过程中会不断更新控制文件何时涉及改控制文件每次在线日志文件、数据文件的新增、修改、删除,归档等都会更新控制文件 热备份的时候触发系统事件时CKPT进程将每三秒会触发检查点进程去写控制文件alter system set control_files=路径。V$CONTROLFILE。日志文件:即Redo Log File
27、s和Archivelog Files。记录数据库修改信息。联机日志 存在的目的是为了数据完整性 通过时间向量和日志条目来维持完整性 Oracle服务器维护联机重做日志文件以使数据库中的数据丢失减到最小。重做日志文件记录了对数据库缓冲区高速缓存内数据所做的所有更改,存放着SQL条目(记录)就是改变向量重做日志按group来存放的.叫日志组一个数据库至少有2个日志组每个日志组至少有一个成员,组内成员与成员之间是镜像关系顺序切 循环写业务交易会不断生成REDO,使得REDO LOG文件越来越大,显然不利于ORACLE管理,所以设计切换模式当前组日志写满,就会触发日志切换.手动也可以触发al
28、ter system switch logfile; 手动触发日志切换重做日志文件是写多读少,要存放在写性能最好的磁盘上.而且要多元化管理(物理隔离)。重做日志文件的读写特征写 重做日志主要是写操作,由LGWR完成。读 重做在实例恢复或者介质恢复的时候才会去读,日志挖掘也能用到。参数文件:约束实例的行为实例的参数 实例受初始化参数影响里面都是非默认参数 自定义参数有文本和二进制两种文本pfile=parameter fileinitsid.ora缺陷:只能是文本文件 存放于文件系统(不能放在裸设备里)不能自动备份(不能用rman备份)动态修
29、改的参数,要下次启动不能自动校验不能共享依存于OS编辑器修改参数写太长时 校验读取失败优点:可以使用ifile 共享命名规则: init.ora 或 init<sid>.ora二进制spfile=server parameter filespfilesid.ora解决了文本的缺陷同时为RAC实现了每个实例使用不同参数 加实例名前缀或星号例如:name=value*.name===value缺陷:不可以使用编辑器修改当参数值设置错误时,启动实例加载参数不正确,实例就无法启动,而二进制文件又不能修改解
30、决方法:将二进制文件转换为文本参数文件,修改文本参数文件命名规则: spfile.ora 或 spfile<sid>.ora警告文件:show parameter background_dump_dest-使用共享服务器连接跟踪文件:show parameter user_dump_dest-使用专用服务器连接3.2逻辑结构:(1)块(Data Block):数据库数据存放在数据块中,一个数据块对应特定磁盘上字节数。块是数据库最小的逻辑存储单元。(2)区(Extend):由一系列连续的块组成的,其分配是单一分配的。区也是系统分配空间和回收空间的基本单位。(3)段
31、(Segment):表空间中特定类型的逻辑单位,由一个或多个区构成。包括数据段(Data Segment)、回滚段(Rollback Segment)、临时段(Temporary Segment)和索引段(Index Segment)。(4)表空间(Tablespace):逻辑磁盘空间,由数据文件组成,是最大的逻辑存储单元。 两种结构关系图:3.2.1 表空间(tablespace)表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。查询表空间:SQL>select * form dba_data_files
32、;查询表空间的空闲信息:SQL>select * from dba_free_space;SQL>alter tablespace * offline;限制表空间大小:SQL>alter user * quota *m on * 临时表空间用于为用户排序的ORDER BY语句使用。创建数据库时可以指定数据库的默认临时表空间。在创建用户的时候可以指定用户的默认临时表空间。例如下句就指定temp为用户的临时表空间。SQL>CREATE USER * IDENTIFIED BY * TEMPORARY TABLESPACE temp;3.2.2 段(Seg
33、ment)段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。段基本可以分为以下四种数据段(Data Segment)索引段(Index Segment)回滚段(Rollback Segment)临时段(Temporary Segment)3.2.3 区间(Extent)关于Extent的翻译有多种解释,有的译作扩展
34、,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。 在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。3.2.4 Oracle数据块(Block)ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的操作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 腹腔导管引流护理常规
- 营养支持治疗广州话讲解
- 我院抗菌药物使用统计
- 腹股沟疝气的术后护理
- 2025年培训机构协议书范本
- 吞咽困难康复护理
- 肺肿瘤术后护理方法
- 毕业论文答辩模板141
- 高考押题议论文素材和写作指导:主题奋斗精神+素材+写作思路+开头讲解+主体段结构-2025年高考语文作文素材运用
- 2025届高三英语基础写作之倡议书:倡议志愿者活动课件共27张
- 饭店兑店合同协议
- 高考期间食品安全
- 导游知识准备课件
- 瓷砖行业法规与消费者权益-全面剖析
- 2025年电气试验高级工考试题库
- 2025年全国安全生产月安全生产知识竞赛抢答题库及答案(共200题)
- 仓库经理转正述职报告
- 组织执法类面试题及答案
- 2025年授权签字人考试题及答案
- 中国书法艺术传承与发展现状分析
- 不同碳减排下生物质气化制绿色甲醇的经济性分析
评论
0/150
提交评论