收藏 分销(赏)

Oracle培训优化ORACLE数据库性能调整课程.ppt

上传人:天**** 文档编号:12860236 上传时间:2025-12-18 格式:PPT 页数:172 大小:1.21MB 下载积分:25 金币
下载 相关 举报
Oracle培训优化ORACLE数据库性能调整课程.ppt_第1页
第1页 / 共172页
Oracle培训优化ORACLE数据库性能调整课程.ppt_第2页
第2页 / 共172页


点击查看更多>>
资源描述
市场部经理 张小芊,亚信科技,(,中国,),有限公司,2007.4.5,为客户提供世界一流的软件和服务,单击此处编辑母版文本样式,第二级,第三级,提升创新2007.亚信,*,单击此处编辑母版标题样式,让,中,国,软,件,影,响,世,界,让,中,国,软,件,影,响,世,界,单击此处编辑母版标题样式,市场部经理 张小芊,亚信科技,(,中国,),有限公司,2007.4.5,ORACLE,数据库性能调整,让 中 国 软 件 影 响 世,界,研发部 杜宇,亚信科技,(,中国,),有限公司,2008.4.18,课程目的,作为当今世界上最主流、最优秀的商业数据库之一,,Oracle,在中国的电信行业中得到了非常广泛的应用。因此了解,oracle,数据库运行过程中的常见性能问题并掌握分析和解决这些问题的方法就变得尤为重要。通过本课程的学习,学员可以了解到,oracle,数据库性能调整的基本原理和各种调优工具的使用方法,并能够了解诊断和调整数据库性能的基本方法。,提升创新2007.亚信,2,课程大纲,第一部分:调优概述,oracle,的基本结构,oracle,的工作原理,调优的梯度和步骤,第二部分:调优工具,alert,日志及,trace,文件,动态性能视图,statspack,其他调优工具,第三部分:调优内存结构,调优共享池,调优,Buffer Cache,调优其他,sga,区,监视和诊断锁争用,第四部分:调优,i/o,相关,调优,i/o,争用,排序操作,调优回滚段,第五部分:调整,sql,语句,oracle,处理,sql,的过程,oracle,的优化器和,sql,的执行计划,诊断和调整,sql,的工具和方法,第六部分:其他调优方面,并行执行,分区,rac,其他,提升创新2007.亚信,3,第一部分:调优概述,oracle,的基本结构,oracle,的工作原理,调优的梯度和步骤,提升创新2007.亚信,4,Oracle,逻,辑结构图,提升创新2007.亚信,5,逻辑结构,数据块(,Data Block),:,也叫逻辑块,是,Oracle 9i,数据库输入,/,输出的基本单位,常见大小为,2KB,或,8KB,。,通常为,OS,默认数据块大小的整数倍。,数据区间,(Data Extent),:,若干个数据块构成数据区间,是数据库存储空间分配的一个逻辑单位。,数据段(,Data Segment),:,若干个数据区间构成,在,Oracle 9i,中有,4,种数据段。即:数据段、索引段、回滚段、临时段。,逻辑对象(,Logic Object),:在,Oracle 9i,数据库中提供了丰富的逻辑对象(,21,种):高级队列、数组类型、簇、数据库链接、维、函数、索引、,Java,源、实体化视图(快照)、实体化视图日志(快照日志)、对象类型、程序包、程序包体、过程、刷新组、序列、同义词、表、表类型、触发器、视图,表空间(,Tablespace,),:,这是一个虚拟概念,,Oracle,使用表空间来管理逻辑对象,用户可以将不同性质的逻辑对象存放在不同的表空间下。,提升创新2007.亚信,6,Oracle Server Architecture,提升创新2007.亚信,7,系统优化梯度,下面是对基于,ORACLE,应用的优化的推荐方法,按照投资回报减少的顺序给出优化过程步骤,对性能影响最大就越靠前:,优化商业规则,优化数据设计,优化应用程序设计,优化数据库逻辑设计,优化数据库操作,优化访问路径,优化内存分配,优化,I/O,和物理结构,优化资源争用,化所采用的平台,提升创新2007.亚信,8,数据库优化的步骤,数据库优化是一个系统工程,需要有严密的计划和严格的步骤。一个完整的优化过程应该包括:,明确系统现状,制定优化目标:任何优化都不可能是一种彻底的优化,都是针对目前系统状态的一种资源重组。优化的目标越高,优化的难度也越高,优化的成本也越高。,采集系统并分析数据:根据优化目标,对数据库进行数据采集。并对系统进行全面的分析,找到系统中的性能瓶颈。,制定优化计划:根据采集的数据和分析结果,制定优化方案和实施计划,审核优化计划:和客户一起审核优化计划,在必要的情况下还需要和应用开发商一起进行优化计划的审核,确保优化计划是切实可行的。,实施优化计划:,监测优化系统:数据库优化是整体的优化,对于某些应用,优化后可能会有反效果。因此优化完成后,需要对所有的应用系统进行监测,如果有某些应用受到比较大的影响,应该尽快解决这些问题。,评估优化效果:优化完成后,对优化的效果进行一次评估。,这个优化过程不是一次完成的,如果评估优化效果的时候发现没有达到预期的目的,这个过程还需要从头继续,直到达到优化目标为止。,提升创新2007.亚信,9,响应时间与吞吐量的折衷,根据应用类型的不同,性能优化的目标不同:,在线事务处理(,OLTP=Online Transaction Processing,)应用程序把吞吐量定义为性能指标;,决策支持系统(,DSS=Decision Support System,)把响应时间定义为性能指标。,提升创新2007.亚信,10,第二部分:调优工具,操作系统工具,alert,日志及,trace,文件,动态性能视图,statspack,其他调优工具,提升创新2007.亚信,11,操作系统工具,Oracle,数据库问题的解决从来就离不开操作系统,很多时候我们必须通过操作系统一级的手段来诊断并解决问题。,提升创新2007.亚信,12,操作系统工具,1),使用,sar,-u,命令监控,cpu,使用,$,sar,-u 5 5,10:34:15%,usr,%sys%,wio,%idle,10:34:20 54 15 13 19,Average 45 15 15 24,%,usr,运行在用户模式下,cpu,的使用百分比,%sys,运行在系统模式下,cpu,的使用百分比,%,wio,进程在等待块,I/O,时闲置状态下,cpu,的使用百分比,%idle,闲置状态时,cpu,的使用百分比,很低的,%idle,说明,cpu,负载高,或者,cpu,处理能力不足,或者也,可能是,I/O,问题。,很高的,%,wio,,,即系统,I/O,繁忙,进程获得,cpu,但在等,I/O,,,这部,分时间的比例,有可能是,I/O,存在问题。,提升创新2007.亚信,13,操作系统工具,2,)使用,top,命令发现系统中最影响性能的用户,#top,load averages:2.83,3.30,3.67,143 processes:124 sleeping,15 running,4 on,cpu,CPU states:45.9%idle,24.8%user,7.3%kernel,22.0%,iowait,0.0%swap,Memory:2048M real,36M free,2920M swap in use,982M swap free,PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND,23696,pooopt,11 52 0 586M 536M run 279:55 97.57%oracle,提升创新2007.亚信,14,操作系统工具,3,)使用,uptime,命令监控,cpu,负载,$uptime,12:45pm up 119 day(s),19:01,1 user,load average:2.96,2.98,3.30,提供快速查看,cpu,中所有任务(包括正在运行的,任务)在,1,分钟,,5,分钟,,15,分钟内的负载。,提升创新2007.亚信,15,操作系统工具,4,)使用,iostat,确定磁盘,I/O,瓶颈,iostat,可以用于报告终端和磁盘,I/O,活动情况,确定磁盘瓶颈。输出结果的第一行显示了自数据库启动以来各种,I/O,的统计数据。最常用的选项有,-d,,,-x,,,-D,,,-c,(,cpu,负载)。,提升创新2007.亚信,16,操作系统工具,-d,选项可以列出每秒传送的字节数,每秒的传输次数以及平均服务时间(以毫秒计)。,-d,仅仅显示,I/O,,,不区分读操作和写操作。,-D,选项报告每秒的读操作数量,写操作数量以及磁盘使用率。,-x,选项报告所有磁盘的扩展磁盘统计数据,提升创新2007.亚信,17,操作系统工具,5,)使用,sar,命令和,vmstat,命令监控内存,一种可以快速判定自系统启动以来是否存在任何交换活动的方法就是运行,vmstat,-S,命令,如果,swp,/in,和,swp,/out,列出现非零值,就说明很可能出现了问题。另外可以使用,sar,命令挖掘更多的信息。,提升创新2007.亚信,18,操作系统工具,6,)其它操作系统专有工具,Aix,topas,svmon,HP-UX glance,提升创新2007.亚信,19,操作系统工具,7,)使用,ipcs,命令确定共享内存的使用情况,ipcs,命令可以用来监控,sga,的使用情况。它报告,sga,中每个共享内存段的尺寸。如果在整个,sga,中没有足够的内存来容纳一个连续的内存段,,sga,就将建立非连续的内存段。在实例崩溃的情况下,可能就会出现内存无法释放的问题。如果发生了这样的情况,,ipcrm,命令可以清除这些段,(,ipcrm,-m,用于内存段,,ipcrm,-s,用于信号段)。,提升创新2007.亚信,20,数据库的调整信息来源,我们在进行,Oracle,的性能调整时,并不是凭感觉或凭经验来行事,而是根据系统在运行过程所产生的问题的信息记录来进行的。数据库级主要依据的信息来源有:,系统产生的警告日志文件、跟踪文件,动态数据视图,Oracle,的,GUI,工具,提升创新2007.亚信,21,警告日志文件,一般当,Oracle,安装完成后,系统的日常的运行的一些基本信息都被记录到警告文件中。,一般警告文件可以从初始化文件的,BACKGROUND_DUMP_DEST,参数来得到。,警告文件的文件名为,alert_sid.log,,其中,sid,是数据库实例的名字。,提升创新2007.亚信,22,后台、事件及用户跟踪文件,跟踪文件是由,Oracle,后台进程产生的一个文本文件,它包含有创建会话时的一些会话信息。跟踪文件可以在初始化参数文件,init,sid,.ora,文件中指定或由用户服务器指定。所有的跟踪文件都包含性能调整和故障解决的重要信息。,提升创新2007.亚信,23,tkprof,Tkprof,是一个用于分析,Oracle,跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用,Tkprof,工具使用排序功能格式化输出,从而找出有问题的,SQL,语句。,一般用于解析,SQL_TRACE or 10046,。,提升创新2007.亚信,24,性能调整视图,有两种主要的视图,分别以,V$,开头动态性能视图和以,DBA,开头的数据字典视图。下面是这两类视图的区别:,V$,开头的是单一的名字,而,DBA,都带有复数的名字。,多数的,V$,开头的视图在数据库,nomount,或,mount,状态都有效,而,DBA,开头只是在数据库处于,open,状态才有效。,在,V$,中的数据一般都是小写,而,DBA,中的数据都是大写。,V$,包含的动态性能数据在关闭系统后就丢失,它们总是包含自数据库系统启动以来的统计数据。而,DBA,包含固定的数据。,提升创新2007.亚信,25,V$,动态性能视图,关于诊断和调试,实例,/,数据库,V$DATABASE,T,V$INSTANCE,T,V$OPTIONT V$PARAMETER,T/P,V$BACKUP,T,V$PX_PROCESS_SYSSTAT,T/P,V$PROCESS,T,V$WAITSTAT,T/P,V$SYSTEM_EVENT,T/P,存储器,V$BUFFER_POOL_STATISTICS,T/P,V$DB_OBJECT_CACHE,T,V$LIBRARYCACHE,P,V$ROWCACHE,P,V$SYSSTAT,T/P,V$SGASTAT,P,磁盘,V$DATAFILE,T/P,V$FILESTAT,T/P,V$LOG,T,V$LOG_HISTORY,T,V$DBFILE,T/P,V$TEMPFILE,P,V$TEMPSTAT,P,用户,/,对话,V$LOCK,P,V$OPEN_CURSOR,T,V$PROCESS,T,V$SORT_USAGE,T/P,V$SESSION,T/P,V$SESSTAT,T/P,V$TRANSACTION,T,V$SESSION_EVENT,T/P,V$SESSION_WAIT,T/P,V$PX_SESSTAT,P,V$PX_SESSION,P,V$SESSION_OBJECT_CACHE,P,冲突,V$LOCK,T/P,V$ROLLNAME,T/P,V$ROLLSTAT,T/P,V$WAITSTAT,T/P,V$LATCH,T/P,对话相关的统计,T,为查错,T/P,为查错,/,性能,提升创新2007.亚信,26,重要动态性能视图,v$session,所有当前,session,的信息,包括一些用户信息如,username,,,terminal,,,program,,,logon_time,等,,command,字段表示,session,执行的什么命令。,通过,v$session.paddr,=,v$process.addr,跟,process,相关,通过,v$session.taddr,=,v$transaction.addr,跟,trancation,相关。,通过,sid,可以到相关视图中查询与这个,session,相关的各种信息,如,v$sesstat,中有,session,的统计信息,,v$sess_io,中有,session,的,io,统计信息,,v$session_wait,中有,session,的等待信息,,v$session_event,中有,session,在一段时间内所等待的各种事件的信息。,提升创新2007.亚信,27,重要动态性能视图,v$session_wait,SID:session,标识,EVENT:session,当前等待的事件,或者最后一次等待事件,全部事件,parameter,的含义可以从视图,v$event_name,中查到。,WAIT_TIME:session,等待事件的时间,(,单位,百分之一秒,),如果本列为,0,,说明,session,当前,session,还未有任何等待。,SEQ#:session,等待事件将触发其值自增长,P1,P2,P3:,等待事件中等待的详细资料,P1TEXT,P2TEXT,P3TEXT:,解释说明,p1,p2,p3,事件,提升创新2007.亚信,28,等待事件,从,oracle7.1.12,引入。,到,Oracle 8i,有,1,个,,9i,有,400,个,,10g,有,874,个。,通过等待事件,用户可以很快发现数据库性能瓶颈,从而有针对性的进行分析和优化。,提升创新2007.亚信,29,重要动态性能视图,v$sql,+,v$sqltext,+,v$sqlarea,v$sql,是,v$sqlarea,没有,group by,sql_text,的结果,如果有两个不同用户执行相同的语句,譬如,select*from test,在,v$sql,中就有两个结果。,v$sqltext,的区别是,sql_text,只有,64,位,不像,v$sqlarea,有,1000,位,故它多了,piece,列来决定,sql_text,列的顺序。,提升创新2007.亚信,30,重要动态性能视图,v$process,可以找到,unix,命令,top,出来的最耗,cpu,资源的,pid,,根据,pid,最耗资源的,sql,:,SELECT/*+ORDERED*,sql_text,FROM,v$sqltext,a WHERE(,a.hash_value,a.address,)IN(SELECT DECODE(,sql_hash_value,0,prev_hash_value,sql_hash_value,),DECODE(,sql_hash_value,0,prev_sql_addr,sql_address,)FROM,v$session,b WHERE,b.paddr,=(SELECT,addr,FROM,v$process,c WHERE,c.spid,=&,pid,)ORDER BY piece ASC/,提升创新2007.亚信,31,重要动态性能视图,v$sort_usage,temp,表空间的使用情况,当,temp,表空间变得巨大的时候,根据,session_addr,可以得到,session id,,根据,sqladdr,和,sqlhash,可以得到正在执行的,sql,:,select,se.username,se.sid,su.extents,su.blocks,*,to_number(rtrim(p.value,)as,Space,tablespace,segtype,sql_text,from,v$sort_usage,su,v$parameter,p,v$session,se,v$sql,swhere,p.name,=,db_block_size,and,su.session_addr,=,se.saddr,and,s.hash_value,=,su.sqlhash,and,s.address,=,su.sqladdr,order by,se.username,se.sid,;,提升创新2007.亚信,32,重要动态性能视图,v$lock,SID,:表示持有锁的会话信息。,TYPE,:表示锁的类型。值包括,TM,和,TX,等。,LMODE,:表示会话等待的锁模式的信息。用数字,0,6,表示,和表,1,相对应。,REQUEST,:表示,session,请求的锁模式的信息。,ID1,ID2,:表示锁的对象标识。,提升创新2007.亚信,33,重要动态性能视图,v$transaction,根据,session id,可以查到当前,session,正在执行的事务信息:,select*from,v$transaction,where,addr,in(select,taddr,from,v$session,where,sid,=&,sid,);,看下面这两个字段可以看到事务进行到什么程度了:,USED_UBLK NUMBERNumber of undo blocks usedUSED_UREC NUMBERNumber of undo records used,重复查询这两个值,可以看到变化,可以估计事务的进度,尤其是长时间的回滚操作,当这两个值为,0,,回滚也就完成了。,提升创新2007.亚信,34,重要动态性能视图,v$sysstat,按照,OracleDocument,中的描述,,v$sysstat,存储自数据库实例运行那刻起就开始累计全实例,(instance-wide),的资源使用情况。,STATISTIC#:,标识,NAME:,统计项名称,VALUE:,资源使用量注意:,Statistic#,的值在不同版本中各不相同,使用时要用,Name,做为查询条件而不要以,statistic#,的值做为条件。,提升创新2007.亚信,35,重要动态性能视图,v$system_event,本视图概括了实例各项事件的等待信息。,v$session_wait,显示了系统的当前等待项,,v$system_event,则提供了自实例启动后各个等待事件的概括。常用于获取系统等待信息的历史影象。而通过两个,snapshot,获取等待项增量,则可以确定这段时间内系统的等待项。,V$SYSTEM_EVENT,中的常用列,EVENT:,等待事件名称,TOTAL_WAITS,:此项事件总等待次数,TIME_WAITED,:此项事件的总等待时间,(,单位:百分之一秒,)AVERAGE_WAIT,:此项事件的平均等待用时,(,单位:百分之一秒,)(,time_waited/total_waits,)TOTAL_TIMEOUTS,:此项事情总等待超时次数,提升创新2007.亚信,36,重要动态性能视图,V$LOCKED_OBJECT,中的列说明:,XIDUSN,:回滚段号,XIDSLOT,:槽号,XIDSQN,:序列号,OBJECT_ID,:被锁对象,IDSESSION_ID,:持有锁的,sessionID,ORACLE_USERNAME,:持有锁的,Oracle,用户名,OS_USER_NAME,:持有锁的操作系统用户名,PROCESS,:操作系统进程号,LOCKED_MODE,:锁模式,提升创新2007.亚信,37,Oracle,的,STATSPACK,Oracle,Statspack,从,Oracle8.1.6,开始被引入,Oracle,并马上成为,DBA,和,Oracle,专家用来诊断数据库性能的强有力的工具。通过,Statspack,我们可以很容易的确定,Oracle,数据库的瓶颈所在,记录数据库性能状态,也可以使远程技术支持人员迅速了解你的数据库运行状况。,提升创新2007.亚信,38,Statspack,相关脚本,以,sp*(stat*in 8.1.6),开头位于,$ORACLE_HOME/,rdbms,/admin,下的,19,个,sql,脚本文件,spcreate.sql,安装脚本,spreport.sql,生成报告脚本,spauto.sql,建立自动采集数据的,job(job_queue_processes0),提升创新2007.亚信,39,Statspack,安装,运行脚本,spcreate.sql,建立,perfstat,用户及所属,package.,E.g.On Unix:,cd,$ORACLE_HOME/,rdbms,/admin,sqlplus,“/as,sysdba,”,spcreate.sql,To set up automatic collection of data every hour:,cd,$ORACLE_HOME/,rdbms,/admin,sqlplus,perfstat,/,spauto.sql,提升创新2007.亚信,40,Snapshots,级别,手工采样(指定级别为,7,,通常用在,rac,环境下),:,Begin,perfstat.statspack.snap(i_snap_level,=7);,End;,采样级别,:,Level=0 General performance statistics(8i,9i),Level=5 SQL Statements(default)(8i,9i),Level=6 SQL Plans(9i),Level=7 Segment statistics(9i R2),Level=10 Parent and Child latches(8i,9i),提升创新2007.亚信,41,生成报告,(,spreport.sql,),根据任意两个采样时刻,可以生成这段时间内的报告(之间实例没有重启过),sqlplus,perfstat,/,spreport.sql,生成的文件名默认为,sp_.,lst,提升创新2007.亚信,42,报告的章节,Context0,Cache Sizes0,Load Profile0,Instance Efficiency0,Timed/Wait Events(renamed now includes CPU time)0,SQL(Buffer Gets/Disk Reads/Executions/Parses)5,Instance Statistics0,Tablespace,and,Datafile,IO0,Buffer Pool Statistics0,Rollback Activity0,Latch Statistics0,10,Segment Statistics(introduced in 9.2)7,Library Cache Statistics0,SGA Pool Breakdown0,Instance Parameters0,提升创新2007.亚信,43,设置,STATSPACK,参数,参数设置的方法,在收集数据时设置但不影响以后的数据收集,execute,statspack.snap(i_snap_level,=5,i_modify_parameter=false);,在收集数据时设置且作为以后数据收集的参数值,execute,statspack.snap(i_snap_level,=5,i_modify_parameter=true);,只改变参数值供以后数据收集使用,execute,statspack.modify_statspack_parameter(i_snap_level,=5,i_buffe,r_gets_th,=1000);,12/18/2025,设置,STATSPACK,参数,存储参数的表,STATS$STATSPACK_PARAMETER,控制数据收集的门槛参数,i_executions_th,正整数,缺省,100,。,SQL,语句执行次数超过此数值的,SQL,语句归于数据采集范围,i_disk_reads_th,正整数,缺省,1000,。,SQL,语句执行硬盘读取次数超过此数值的,SQL,语句归于数据采集范围。,i_parse_calls_th,正整数,缺省,1000,。,SQL,语句解析次数超过此数值的,SQL,语句归于数据采集范围。,i_buffer_gets_th,正整数,缺省,10000,。,SQL,语句请求的,BUFFER,过此数值的,SQL,语句归于数据采集范围,i_sharable_mean_th,i_version_count_th,12/18/2025,数据管理,数据删除,删除不再需要的数据(,ID1-ID2,),SQL,sppurge,删除所有的数据,SQL,sptrunc,注意,使用,sppurge,删除数据需要较大的回滚段,建议每次只删除较小的范围内的数据或者使用,sptrunc,12/18/2025,UTLBSTAT/UTLESTAT,在,Statspack,发布之前,我们通常能够使用诊断数据库的工具是两个脚本,UTLBSTAT.SQL,和,UTLESTAT.SQL,。,BSTAT/ESTAT,是一个非常简单的性能诊断工具。,UTLBSTAT,获得开始时很多,V$,视图的快照,,UTLESTAT,通过先前的快照和当前视图生成一个报表。,提升创新2007.亚信,47,STATSPACK与UTLBSTAT/UTLESTAT比较,Statspack,搜集更多的信息,;,Statspack,预先计算更多的调整有用的比率信息,如:,cache hit ratios,rates,and transaction statistics;,由,PERFSTAT,拥有的永久表来存放性能信息。可替代每次都得创建,/,删除表;,Statspack,从报告中分开数据的搜集。当快照发生时数据被搜集;,数据的搜集可用,DBMS_JOB,或操作系统完成;,Statspack,在,COMMIT,或,ROLLBACK,事务后计算,而,BSTAT/ESTAT,只在事务提交时考虑;,提升创新2007.亚信,48,第三部分:调优,oracle,内存结构,调优共享池,调优,Buffer Cache,调优其他,sga,区,监视和诊断锁争用,提升创新2007.亚信,49,调整共享池,Oracle,系统中的共享池(,SHARED POOL,)是用来存放,SQL,语句、,PL/SQL,语句、各种包及,Oracle,系统的数据字典数据。调整共享池与重做日志文件及检查点等有关。下面介绍共享池及相关参数的调整。,提升创新2007.亚信,50,理解共享池的用途,Shared pool,是,SGA,的一部分,它是用来存放由应用用户发出的,SQL,和,PL/SQL,语句。,Shared Pool,由,LRU(Least,Recently Used),算法来进行管理。一旦,Shared Pool,被填满,,LRU,算法就对那些最近很少用的语句请出,Shared Pool,区。,Oracle,服务器保留那些经常被使用的,SQL,和,PL/SQL,语句在,Shared Pool,区里。我们也可以将那些经常使用的,SQL,语句保留(或缓存,-Caching,)在,Shared Pool,区里。,Shared Pool,由三个部件组成,即库缓存(,Library Cache,),数据字典(,Data Dictionary Cache,)和用户全局区(,User Global Area,)。每个在,SQL,和,PL/SQL,运行中都担当一种角色。,提升创新2007.亚信,51,库缓存(,Library Cache,),库缓存,(,library cache,)用来存放由应用用户刚发出的,SQL,及,PL/SQL,语句,存储过程、函数、包、触发器、同义词,PL/SQL,包及,JAVA,类库等对象信息。应该有下面几个部分:,实际语句的,text,部分;,与语句相关的,Hash,值;,语句的,P-code;,与语句相关的统计;,语句的执行计划。,提升创新2007.亚信,52,数据字典(,Data Dictionary Cache,),为了确保表,列等信息的存在,不管是否发出,SQL,语句和,PL/SQL,语句。数据字典都是被检查的。与前面的语句一样,这些表等的信息也被缓存在,Shared Pool,的,Data Dictionary Cache,内存里。这里的内存也是按照,LRU,来进行管理。,由于使用,Data Dictionary Cache,,所以,Oracle,服务器将数据字典与,SQL,语句分开存放。这样做的理由是:,对,Libaray,Cache,和,Data Dictionary Cache,分别进行,LRU,操作;,子查询应用用户发出类似的语句,可能完全不同,但与某个表有关的,也可以得到一些好处(虽然语句可能被执行,但表被保留在里面)。,提升创新2007.亚信,53,用户全局区(,User Global Area,),如果使用,MTS,选件时,用户全局区才有用。在,MTS,结构下,用户全局区用于存放用户会话的应用。这些信息必须以共享的方式来被访问,在非,MTS,结构下,这些会话信息由程序全局区(,Process Global Area,)来管理。,提升创新2007.亚信,54,改善,Shared Pool,的性能,改善,Shared Pool,性能可以有以下几种办法:,稍微加大,Shared Pool,参数值;,为,PL/SQL,开较大的空间;,在内存中导入,PL/SQL,代码;,鼓励代码重用;,建立大的,Pool,提升创新2007.亚信,55,较大的,Shared Pool,最简单的办法就是加大,Shared Pool,的大小。因为,Oracle,是动态地从,Shared Pool,中来管理,library,和,Data Dictionary,的大小。加大,Shared Pool,可以改善,Library cache,和,data dictionary Cache,的命中率。,Shared Pool,的大小在,INITsid.ora,文件中的,SHARED_POOL_SIZE,参数指定。这个参数以字节指定,默认下,,64,操作系统是,64MB,32,为操作系统是,32MB,。如果你使用的,Oracle,带有,JAVA,兼容(有,JAVA,类库)。一定要确保,SHARED_POOL_SIZE,大于等于,50MB,才行。,提升创新2007.亚信,56,给大的,PL/SQL,语句一个空间,如果应用调用了一个大的,PL/SQL,包或触发器,则可能由,LRU,算法而将其他的,SQL,语句逐出内存。这样一来,如果有应用需要再读这些语句的话,就影响了,Libaray,Cache,的命中率。为避免这样的问题发生。,Oracle,给你一种能力在,Library cache,旁设置一个区(,portion,)。这个区就叫共享池保留区,(Shared Pool Reserved Areas),。,共享池保留区需要在,INITsid.ora,文件中的,SHARED_POOL_RESERVED_SIZE,参数来设置。它的大小以字节计。它可以是,SHARED_POOL_SIZE,的,50%,。默认下它仅是,SHARED_POOL_SIZE,的,5%,。,提升创新2007.亚信,57,在内存中保持,PL/SQL,代码,DBMS_SHARED_POOL,包提供了访问,shared pool,的方法,允许显示,shared pool,中存放对象的大小,保持或取消保持对象以减低内存碎片。,访问频率高的对象可以采用驻留在内存的方法来提高系统处理速度。,提升创新2007.亚信,58,鼓励代码重用,要想使,SQL,和,PL/SQL,语句达到命中率高,就要养成代码编写的规范。只有这样才能达到代码重用。请看下面例子:,SQLselect,last_name,first_name,from,a.customer,where,customer_id,=14;,SQLselect,last_name,first_name,from,a.customer,where,customer_id,=13;,两个语句分别查询 顾客代码为,14,和,13,,除此以外,语句的其它部分是相同的,如果我们将这个使用频率很高的语句改为,这样就可以达到代码重用的目的。,SQLselect,last_name,first_name,from,a.customer,where,customer_id,=:,customer_id,;,提升创新2007.亚信,59,建立大池,增加,SHARED_POOL,大小、设置保留区(,RESERVRED_AREA,)、在内存中驻留,PL/SQL,包等都是改善共享池(,SHARED_POOL,)的有效方法。,Oracle,现在给出一个能建立大的,POOL,的参数,,Oracle,服务器使用大的池,(LARGE_POOL_SIZE),来给,I/O,服务进程,RMAN,和,MTS,分配内存。如果你的系统采用,MTS,或采用,RMAN,进行备份,可在初始化文件,INITsid.ORA,中用 一个叫,LARGE_POOL_SIZE,参数来指定。在默认下,该参数的值为,0,(即没有,LARGE_POOL_SIZE,参数存在)。除非你说明了,PARALLEL_AUTOMATIC_TUNING,参数为,TRUE,。当手工配置该参数时,允许用最小的非,0,值是,600K,。一旦配置完成,对于,Shared Pool,来说,内存的分配就将不被进程所取消。,提升创新2007.亚信,60,调整数据缓冲区,数据库缓冲区(,Database buffer cache,)是,SGA,区的一部分。它是用来存放有应用用户要访问的数据块。每个块都一样大,数据库缓冲区存放的对象有:,表,索引,簇,大对象段,(Large Object segment),回滚段,临时段,提升创新2007.亚信,61,调整参数,最简单的办法就是将,database buffer cache,加大。加大主要是在,initsid.ora,文件中考虑两个参数的值,即,DB_BLOCK_SIZE,和,DB_BLOCK_BUFFERs,。,在,Oracle7,、,Oracle8,、,Oracle8i,版本里,数据库缓冲区由初始化参数文件中的,DB_BLOCK_BUFFERS(,以块为单位,),参数来确定;而,9i,版本则用,DB_CACHE_SIZE(,以
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服