自动化管理.ppt
如何进行有效的时间管理以优化PPT内容 #生活技巧# #工作学习技巧# #PPT制作设计#
《自动化管理.ppt》由会员分享,可在线阅读,更多相关《自动化管理.ppt(91页珍藏版)》请在一课资料网上搜索。
1、自动化管理是Oracle 10g数据库引入的最大亮点,也是Oracle数据库今后发展的趋势。从Oracle10g数据库开始,Oracle引入了主动式的、自动化管理框架。在该框架下,Oracle服务器能够进行自我的诊断、从而找出潜在的问题,在问题没有恶化以前,把该问题显示出来。自动化管理框架涉及的几个问题1、自动化工作负载信息库(automatic workload repository):他由多个schema对象组成,包含大约200个表以及多个程序包。在默认情况下,每隔一个小时,oracle服务器会对整个数据库生成一个数据库快照。并把快照信息保存在AWR相应的表中。捕获下来的数据可以由内置的自
2、动化组件进行分析,也可以由DBA进行分析。2、自动化任务:通过分析AWR里面的信息,自动化组件可以确定是否需要进行一些日常的维护工作,例如备份、收集并刷新统计信息。3、服务器告警信息(server alert):对于那些不能自动解决而需要DBA介入的工作,自动化组件会生成服务器告警信息,从而通知DBA4、顾问:自动化组件里面包含多个顾问,每个顾问负责一个方面的子系统,例如专门负责内存的顾问、优化SQL的顾问,这些顾问自动分析AWR里记录的信息,从中找出潜在的问题,并得出改进的意见自动数据库诊断监控(automatic database diagnostic monitor ADDM):每次收集
3、完AWR快照以后,Oracle都会启动ADDM进程,ADDM进程负责对最近两个快照(最近一个小时的两个快照)的数据库活动进行分析,从而判断最近这一个小时是否出现了潜在的问题。如果ADDM发现了潜在的问题,则会根据问题所属的类型,自动调用各个相关的顾问,对所发现的问题提供建议,从而防止这些问题的进一步恶化。Oracle 10g数据库中,所有自动化的功能由初始化参数statistics_level决定。1、typical(默认值):表示启用所有的自动化功能,并会为此而收集数据库里所需要的相关信息。2、all:如果设置为all,则除了typical时收集的信息以外,还会收集额外的信息,可能会为了收集
4、诊断信息而消耗过多的服务器资源3、basic:关闭所有的自动化功能不同的收集信息需要在typical还是all下面进行。通过分析AWR里面的数据,数据库能够判断是否需要进行一些日常的维护工作,例如收集优化器统计信息等,Oracle会通过自动化任务和调度器来定期进行维护。需要定期进行维护的工作包括:1、收集优化器统计信息优化器对SQL语句解析而得到最佳的执行计划,优化器在生成执行计划的过程中,必须参考SQL语句所引用的表以及列的信息,这些信息用于描述表里面数据的分布情况,包括表里面的行数、数据块的个数、列上的索引等,这叫做优化器统计收集信息10g中,创建数据库以后,会创建一个自动收集统计信息的任
5、务,并每天晚上自动收集统计信息2、段顾问(segment advisor)找出哪些段占用的空闲空间过多,从而可以通过执行收缩(shrink)操作释放可用空间3、自动备份任务如果创建数据库的时候,指定了自动备份,该任务会负责完成每天的自动备份AWR体系结构AWR是Oracle 10g数据库中的一个基础架构,提供了收集数据库的诊断信息、对潜在问题进行分析以及进行自我调整的功能。AWR中,包含以下两个主要部分一、在内存中,通过读取动态性能视图和数据字典里的数据,从而收集有关数据库工作负载的信息,这些信息包括下面的部分1、基本的统计信息:比如优化统计信息、操作系统的统计信息2、指标值:衡量数据库活动的
6、各个指标值3、Active Session History(ASH),记录历史上session的活动情况(非常重要)4、顾问得到的建议,针对各个问题,顾问分析后得出的结论也存在AWR中5、快照信息:每隔一段时间,数据库会针对整个数据库生成一个快照,快照中的数据来源于动态性能视图和数据字典,快照存在相应的表里二、每隔一段时间,通过一个名为MMON(manageability monitor)的后台进程,将内存里的数据写入到磁盘上的表空间里面,AWR中包含上百个表,都位于名为SYSMAN的用户下,并存放在sysaux表空间里,不建议直接访问AWR的表,而是通过图形界面或者包来访问(dbms_wor
7、kload_repository)快照每隔一段时间,AWR都会收集一次快照,快照表示在一个特定时间点上所捕获的数据库相关的统计信息。在oracle中,几乎所有的统计信息体现的都是截止到目前为止的累计值,因此每隔一段时间获取一次累计信息,然后将两次的统计信息相减,从而得到这段时间内,所发生的有关数据库活动的变化信息,这就为数据库的诊断提供了指导。每个快照都会有一个唯一的快照ID(snap_id),在默认情况下,AWR每隔60分钟收集一次快照,该时间间隔可以根据需要进行调整。由于oracle各个优化顾问都会访问快照里面的数据,因此时间间隔可能影响顾问判断的正确性和精确性。可以通过程序包手工的创建一
8、个快照。AWR里存储的快照存储在sysaux表空间中,AWR里收集的统计信息主要取决于数据库中活动的session的个数。例如10个活动的session、如果取默认值为7天的保留策略(AWR只保留最近的7天数据),则AWR里保存的数据大致是200MB到300MB创建快照、删除快照估算SYSAUX空间的重要脚本根据输入的负载情况,估计空间需要情况。还有一个脚本awrinfo.sql可以显示不同组件的增长率。1、AWR检测到空间不足时,会自动删除那些最早的快照,并发出告警信息。2、MMON默认会删除那些比保留时间要长的快照,默认删除7天之前的快照3、可以将快照纳入到快照集中(snapshot se
9、t),该快照就不会被MMON进程自动删除。快照集是让我们保留重要时间段的快照信息的一种方法,通过指定两个快照的snap_id,从而将这两个快照ID之间的所有快照数据定为一个快照集。快照集通常用于保留重要快照数据(用于性能比较的、作为基线的快照)快照集就是一堆快照的一个集合,只是建立了这么个集合。这个集合的参数取决于:时间段+snap段要了解系统性能是否发生变化,就需要知道数据库活动发生了哪些变化。Oracle10g中引入了指标(metric)、告警信息(alert)、以及基准线(baseline)服务器告警信息(10g中引入)当数据库处于某种不正常状态下,需要DBA关注的时候,就会产生服务器告
10、警信息,默认情况下,数据库会通过database control来显示服务器告警信息。我们可以在database control中配置,从而将服务器的告警信息以邮件的形式发送给DBA服务器告警信息分为两大类1、基于上限的告警信息(threshold)2、不基于上限的告警信息指标(metric)大部分的告警信息是通过为指标设置上限值来触发的,从10g开始,为了衡量数据库运行是否优良。在数据库内部定义了很多的指标,比如physical reads per secuser commits per secsql service reponse time等等除了tablespace space usag
11、e是数据库级别的指标以外,所有的指标都是实例级别的,反映的都是当前实例的运行健康状况服务器告警(server alert)我们可以为这些指标设定一个上限值,当超出这个上限值的时候,就产生告警信息。具有上限的告警信息叫做有状态的告警信息(stateful alert),引起告警信息的情况消失以后,告警也会消失对于有状态的告警信息产生告警信息以后,可以在视图dba_outstanding_alerts中检索到,当告警信息被自动清除以后,告警信息从dba_outstanding_alerts中删除,进入dba_alert_history视图中,该视图显示历史上出现过的告警信息对于不具有上限的告警信息
12、,例如快照过旧等告警信息,直接进入到dba_alert_history中。指标(metric)的应用,指标反映的是一个变化的状态,例如每秒物理读,是计算出来的。指标也存储在AWR中,作为快照的一个部分被写入到数据库的sysaux表空间中。指标主要是和服务器告警联合使用的,定义了指标(主要使用系统自带的指标)以后,系统会自动的根据指标的定义情况,产生服务器告警。修改了时区以后,em才能正常的启动。两个时区要能够对应起来。设定指标的上限值1、warning表示一般级别的警告信息2、critical表示非常紧急的警告信息举一个例子。表空间的使用超过85%,则会发出一个warning的警告,超过97%
13、,则发出一个critical的警告AWR快照里记录了在快照启动时各个指标的值1、在收集统计信息的时候,首先收集的是基础统计信息,也就是动态性能视图和数据字典信息中直接可以检索出来的数据。2、其次就是在这些原始数据的基础上,提炼出各个指标的值3、大部分的指标值都是对数据库活动变化的追踪,例如最近60分钟内,数据库里平均每秒的物理读就是一种指标值4、MMON进程定期对基础统计信息进行汇总,提炼出各个指标值,并将这些指标值记录到AWR相关的表中,从而交给各个自动化组件在进行系统监控、检测问题以及自我调优时使用上面讲了两个概念:基础统计信息、指标值我们可以定义自己的指标值每隔5分钟,查询一下表ftes
14、t.alert1的数据行数。Warning和critical的数值分别是5和10行,如果每隔5分钟,查询一次,超过5行就发出warning告警,超出10行就发出critical告警。这个指标不会出现在“所有度量”里面,但是会产生alert,并且出现在主页的alert部分。这个是具体的定义。1、每一个指标值有自己的频率,因为大部分指标值是反映一个变化状态的,例如每秒物理读。根据不同的频率,会生成不同时刻的指标值,当这个指标值超过warning或者critical的时候。就会产生一个服务器告警。2、生成数据库快照的时候,根据当前的基础统计信息,会生成一个快照这个时刻的指标值,然后一同写入到数据库中
15、。这个指标值位于快照中,而且反映的是快找那个时刻的指标值。3、数据库根据每个指标值的频率,定期的生成一些指标,这些指标反映的是数据库的实时的运行状态,这些指标值会产生服务器告警信息。快照中的指标值就是根据当时的基础信心计算出来的,反映这个时刻的指标值。数据库在正常的运行中,还会按照指标值的频率定期的生成指标值。基准线1、如果我们想判断今天的性能与上周的今天的性能相比是否不一样,必须将当前性能的指标值与一个基准线进行比较基准线是用来比较的,不是绝对值2、基准线是一种快照集,由多个快照组成,是用来衡量、比较性能好坏的依据3、我们通常将运行最平稳的时候产生的快照加入到基准线里4、快照在统计信息上分组
16、汇总,就产生了不同的时间段基准线的统计信息5、10g之前,如果需要比较性能好坏,我们需要手工将各个性能指标数据与基准线里对应的指标值进行比较,10g数据库里,创建完基准线以后,数据库自动将当前值与基准线做比较,如果超出就产生告警日志。基准线是一段时间里面、数个快照组成的快照集。基准线跨度时间比较长,因此可以对基准线进行细分,分成不同的时间段。创建基准线1、启用基准线2、创建度量基准线:一个数据库只能有一个动态、可以有多个静态静态基准线基准线里包含的快照在创建时指定,快照里的数据在创建以后就保持不变。启用静态基准线以后,我们可以设定,只要当前数据库性能的某个指标值大于所启用的静态基准线里所对应的
17、指标值,就发出告警信息。移动窗口基准线其所含的快照是不固定的,这些快照会随着时间的推进,而自动发生变化。但是移动窗口基准线所跨越的时间长度则是固定的,比如,默认情况下,移动窗口基准线的时间跨度是7天,表示始终保留最近7天的快照信息,则我么设定,如果当前数据库中每秒发生的事务数量大于最近7天内的平均值,则发出告警日志。如果是11月10日,则基准线为11-3至11-9着7天的平均数据,而到了明天,就是11-11.则用来比较的基准线就是11-2至11-10这7天的快照,这就是移动3、创建静态基准线这个时间段必须大于7天,这个时间上快照就构成了基准线基准线里,每个指标会有24个值,跨度为19天,在计算
18、9点的基准线时,就是将7天里,每天9点的指标值汇总除7创建两个分组,白天7:00-晚上7:00和晚上7点到第二天的早上7点。每个指标有两个值针对每个指标值,都有24个数据。反映的是不同的时间段。基准线里分组的概念创建完成基准线以后,要先计算统计信息。静态基准线只能在创建的时候执行一次。在进行分组的时候,要避免数据不足的情况,例如1、例如我们创建的基准线所在的时间段是7天,那么如果选择“按照星期几”的方式,那么至少需要两个周,因此出现数据不足的情况2、解决方案1、将基准线的时间段设置为14天以上2、改变分组方式,按照工作日和周末的方式创建动态基准线默认是AWR的数据保留时间。无论是动态还是静态基
19、准线,都需要进行分组。就是求各个不同的时间段的指标值。例如:分组的依据是什么?主要确定的是你的业务的规律性周一到周五是否负载相当工作日和周末是否相当上面的确定以后,周划分就确定了。如果每天的负载都很不同,那么就可以设计成:星期几,如果工作日和周末不同,那就设计成按照工作日和周末还有就是每天的不同时段是否相同每天24个小时都很不相同,那么就设计成按小时如果白天和夜晚不同,那就是设计成白天和黑夜总之是根据你的业务的不同的程度,可以划分成不同的粒度可以划分为按照星期几+每小时还可以工作日周末+每小时还可以星期几+白天黑夜还可以工作日周末+白天黑夜主要看你的业务的变化情况,如果变化范围大,那么就可以增
20、加粒度,否则就可以减小粒度。按摘星期几至少要求14天以上,否则数据不足注意:选择好分组列以后,先不要着急OK,而是继续单击compute statistics,只能在创建基准线的时候计算一次,创建完成以后就不能重新计算了。计算完成以后,如果出现数据不够的话,则会在列中显示感叹号一个时间点上只能有一个静态基准线。无论是动态还是静态基准线,他们的原理如下1、都是使用快照数据进行计算2、都需要选择一段时间,将这段时间作为基准线的代表时间3、都需要进行分组,这就取决于业务的不同的时间段的变化情况,分组的目的主要是让基准线更加精确的反映这个是时间段的业务负载情况,我们可以分的更细,例如星期几+每小时,分
21、的细是没有坏处的4、这些都完成以后,就要设计下面的问题如何使用这个基准线,基准线是用来比较的,让现在实时的指标值和基准线的指标值进行比较,那么如何比较呢?这就是一个设置阈值的问题针对不同的指标,例如每秒事务数,我们可以设置一个具体的上限值,一旦违反了上限值则产生警告。现在我们可以设置一个具有参比性的上限值,那就是和基准线的指标值进行比较。静态基准线:和过去的某一个指定时间段例如3-01至3-20,进行比较动态基准线:从现在计算起,总是过去7天的基准线我们只能为一部分指标设置动态上限值1、性能指标:用来测量响应时间。并表示系统是否运行良好2、工作负载指标:测量系统的负载。以及系统所处理的工作量的
22、程度3、工作负载类型指标:用于区分系统工作类型只有三类可以设置动态上限值。高出基准线的百分比。例如HIGH 0.95,那么表示高出基准线95以后,才会产生告警。如果基准线是1000,HIGH就是1950,这个是以基准线的平均值为依据基准线乘以这个百分比就是告警值,这个是以基准线的最大值为依据超出告警值2次就产生告警管理AWR以及生成AWR报表 我们使用位于dbms_workload_repository程序包里的modify_snapshot_settings存储过程来管理AWR快照的收集1、保留时间(retention)默认为7天(10080分钟),最少为1天,设置为0表示禁用自动删除功能2
23、、设定每次收集快照之间的时间间隔(interval),最少为10分钟,最大为100年,默认为60分钟,如果为0,关闭自动收集快照的功能,也就关闭了很多数据库的自我管理功能3、topnsql:捕获性能时,捕获前N条SQL语句,可以设定的值包括:default(如果statistics_level设置为typical,那么就是30条,如果设置为all,那么就是100条);n(捕获SQL语句的数量);maximum(捕获内存里所有的SQL)AWR报表1、database control生成报表2、使用脚本生成报表分析某一段时间的某一段snap数据,得到一个报表。然后对表进行详细的分析。ASH体系结构
24、Oracle10g之前,并没有视图能够提供有关session在历史上的每个时间点上都做了什么,以及在等待什么资源的信息。Oracle10g之前只是提供了v$session以及v$session_wait两个视图,来显示当前session正在执行什么SQL语句以及正在等待什么资源。因此只能让用户重复执行出现问题的操作,并在该过程中,监控v$session和v$session_wait视图。Oracle10g之后,提供了ASH(active session history)来解决这个问题。在数据库里记录了有关活动的session的历史信息。每隔1秒钟,ASH都会将当时活动的session的信息记录
25、到SGA的一块缓冲区里。在ASH中,这个过程叫做采样。通过每秒钟的时间点上session状态进行采样,获得session状态变化的大致过程。V$session+v$session_wait等非SQL方式插入ASH而是直接内存访问V$active_session_history读取顺序写入顺序每隔60分钟 MMON缓存使用到达2/3 MMNLDBA_HIST_ACTIVE_SESSION_HISTORYAWRWRH$_ACTIVE_SESSION_HISTORY内存采样1/10的数据写入到AWR的分区表里面ASH的工作原理1、对活动session的采样数据存放在SGA中,该空间为循环使用。2、因
26、为session的信息量非常的大,因此ASH只从v$session等少数相关的视图中获取那些活动的session相关的信息3、ASH每隔一秒钟收集session信息,不是通过SQL语句完成,而是直接访问内存的方式,相对来说高效4、ASH里的数据还是很大,全部刷新到磁盘会过度消耗磁盘空间,因此只是刷新十分之一的数据。5、该过程由MMON进程每隔60分钟自动进行,同时当ASH缓存的使用率达到三分之二时,会由MMNL(manageability monitor light)进程刷新到AWR中6、ASH是一个固定大小的内存区域,每个CPU对应2MB空间,ASH最大不能超过shared pool的5%或
27、者sga_target的5%7、通过查询v$active_session_history视图获得当前ASH缓存里的数据,而ASH里的数据则刷新到WRH$_ACTIVE_SESSION_HISTORY表里,该表是一个分区表,其中的数据通过dba_hist_active_sess_history视图展现出来 访问ASH1、将内存里的ASH数据转储到跟踪文件2、通过SQL语句直接访问v$active_session_history视图,获得最近一个小时里session的历史信息3、通过SQL语句直接访问dba_hist_active_sess_history视图,获得最近7天(默认为AWR数据的保留
28、时间)里的session的历史信息4、生成ASH报表5、通过 database control诊断页面转储方式访问ASH表示将最近10分钟的数据转储到跟踪文件使用SQL语句访问ASH利用经典的SQL语句,作如下的一些事情1、查找最近1分钟里,最消耗CPU的SQL语句2、查找最近1分钟里,最消耗IO的SQL语句3、查找最近1分钟里,最消耗CPU的session4、查找最近1分钟里,最消耗资源的SQL语句5、查找最近1分钟里,最消耗资源的session具体见脚本创建ASH报表方式访问ASH在某一个时间间隔内的ASH的信息。ADDMADDM是内建在数据库里面的一个自我诊断机制,属于内核的一部分。MM
29、ON会自动运行ADDM,从而主动监测是否出现问题。每次生成快照,都会触发ADDM,对最近的两个快照之间的时间段进行分析,这是一种主动的方式,使得当问题真正成为瓶颈之前,就被检查出来。每次ADDM分析的结构都保存在AWR中,可以通过DBCONTROL和手工调用ADDM可以分析任意的两个快照之间的数据。数据库时间为完成用户请求,花费在数据库内部的时间的总额,当一个用户提出请求,从用户发出请求,到获得结果,这一段时间叫做响应时间。该响应时间包括在网络上传递的时间、应用服务器的时间、传到数据库以后,在数据库上的处理时间,数据库时间指的是花费在数据库那段的时间ADDM的目标是降低对于某个给定时间的工作量
30、所花费的数据库时间ADDM的两个模型1、时间模型表示在处理用户请求的不同阶段上,所花费的数据库时间,这个模型中的类型包括连接到数据库所花费的时间、优化器对SQL请求的优化、执行SQL语句等2、等待模型表示在处理用户请求而等待数据库资源时,所花费的数据库时间,这里所指的数据库资源包括硬件资源和软件资源,前者包括CPU和I/O等,而后者包括lock等ADDM会查询花费在这两个模型上的、每个类别的数据库时间,并追踪消耗了最多数据库时间的大类根节点用户连接优化SQL语句执行SQL语句.CPU处理能力I/O处理能力数据库lock资源.Buffer cache 过小I/O带宽不足ADDM在研究DB Tim
31、e树时,从根节点开始,并且遍历所有的子节点。以确定在哪个环节上消耗了最多的数据库时间上图中:分支节点确定性能问题,叶子节点则用来确定性能问题的根本原因当找到终端节点所对应的原因以后,ADDM测量每个根本原因在数据库时间中所占的百分比。然后试图找到能够解决或者减轻问题的方法(ADDM会使用AWR里收集并保存的各种指标和统计信息来试图获得调优建议)在分析的最后阶段,ADDM会报告所找到的最重要的根本原因,按照每个原因所带来的性能影响的百分比,由大到小进行倒序排列ADDM能够检测的问题包括以下这些类别CPU瓶颈、I/O子系统的性能问题、执行时消耗过多资源的SQL语句、编译时消耗过多资源的SQL语句、
32、执行时消耗过多资源的java应用程序、尺寸过小的内存组件、比如SGA、buffer cache以及shared pool等、低效的连接管理、RAC中有关Cache Fusion的相关问题(并发访问数据问题、从而导致buffer busy waits)、数据库配置问题(例如redo buffer设置过小等)、检查点问题找到原因以后,ADDM会调用各种顾问,通过这些顾问尝试找到可能的解决方法,例如对于消耗资源过多的SQL语句,可以调用SQL Tuning AdvisorADDM依靠的是数据库快照,数据库在每次收集完成快照以后,都会启动ADDM,我们也可以手工的指定一个起始快照和终止快照,来创建自己
33、的ADDM分别选在起始和终止快照,起始和终止快照之间必须连贯,不能有实例重启的情况不同的时间点,处于不同状态(等待某种资源、使用IO、使用CPU)的session的个数数据库时间的总和ADDM要能够工作,必须设置初始化参数statistics_level为typical或者allADDM在分析IO的时候,会参考一个ADDM参数,DBIO_EXPECTED,该参数体现了对要分析的IO子系统的期望的性能,该参数表示读取单个数据块所花费的平均时间。以微妙为单位,ADDM使用默认的值为10000微妙。该参数对大部分硬件都适用,大部分结果在5000-20000之间,测量读取单个数据块所需要的平均时间,采
34、用随机IO的方式顾问(advisor)1、是一种服务器组件,通过使用AWR里捕获的数据,ADDM使得数据库可以分析自己的性能,并尝试对发现的问题进行解决。ADDM每次收集分析完AWR快照以后,都会潜在的调用其他的顾问程序顾问的框架结构ADDMSQL Tuning AdvisorMemory advisorSQL Acccess advisor空间顾问恢复顾问PGASGAPGA advisorBuffer cache advisorLibrary cache advisorSegment advisorUndo advisorMTTR advisorSQL Tuning Advisor:对单个S
35、QL语句提供调优建议SQL Acccess advisor:对整个负载(包括多个SQL语句)提供调优建议PGA advisor:对整个PGA的尺寸设置提供建议,也就是初始化参数pga_aggregate_target的值Buffer cache advisor:对buffer cache的尺寸提供建议,也就是设置初始化参数db_cache_size、db_keep_cache_size以及db_recycle_cache_size的值Library cache advisor:对shared pool的尺寸提供建议,也就是设置初始化参数shared_pool_size的值Segment adv
36、isor:找出那些分布比较稀疏、占用过多空间的对象。例如某个表包含100条记录,但是这100记录分布在200个数据块里面,那么这个表就需要进行收缩(shrink)Undo advisor:为undo表空间的大小尺寸设置提供建议MTTR advisor:为实例恢复的时间提供建议使用内存顾问使用内存顾问时,如果启用了ASMM,也就是设置了初始化参数sga_target(整个SGA大小)。通过内存顾问来获得SGA大小的建议。将Total SGA设置成拐点即可。如果我们没有设置sga_target,而是分别定义了SGA中各个组件的大小时。则可以使用buffer cache的顾问和shared pool
37、的顾问分别给出的建议。分别使用两个advisor给出的建议PGA顾问设置PGA参数使用恢复MTTR顾问这个参数影响CKPT的执行0-3600秒1、0秒表示禁用自动CKPT进程对SQL语句进行调优是DBA的日常工作,Oracle10g通过一个新增的优化器(automatic tuning optimizer)ATO来实现自动的SQL调优。ATO通过两种工具来体现STA(SQL tuning advisor)和SAA(SQL access advisor)在SQL调优中,第一步是先通过ADDM等工具找到需要调整的SQL语句,对找到的SQL语句进行优化Oracle 10g调优工具最大的改进就是:自动
38、SQL调优(ATO)技术STA会接收一个或者多个SQL语句作为输入,并提供如何优化这些SQL语句的方法、估计的性能百分比、实际实施这些建议的命令,我们只要简单的选择接受这些建议,执行建议的脚本,从而调优这些语句。STA调用ATO对执行计划进行分析的时候,会进行下面四个方面的诊断1、分析统计信息确定SQL语句所引用对象上是否存在统计信息,如果存在统计信息,则这些统计信息是否陈旧,ATO同时进行一些额外的操作,确认统计信息是否正确,并提出建议来收集统计信息。ATO也会使用非常高效的采样技术,生成额外的信息,来补充不足或者丢失的统计信息,这些信息保存在SQL Profile里。该SQL Profil
39、e的内容提供给优化器足够的信息来帮助优化器生成更加好的执行计划,不过这些信息只是额外信息,不能替代dbms_stats包所产生的统计信息ATO不仅使用统计信息、而且还对统计信息进行判断、同时还会生成一些额外的信息来帮助优化器(这些额外的信息储存在SQL Profile里)2、分析访问路径ATO会判断是否通过创建新的索引来极大的提高查询速度。如果ATO提供建议创建索引来提高速度,则应该先在测试库上创建该索引,然后运行SAA来判断创建新索引以后,是否会对整个系统负载造成不好的影响。如果没有不好的影响,则在产品库中创建该索引。3、分析SQL语句的结构ATO会分析SQL语句的结构,判断是否由于SQL语
40、句写法的问题导致较差的执行计划,并提供相关的建议,使得我们能够重新构建SQL语句。分析SQL语句的时候,优化器会对比一套内建的规则,来确定是否出现了低效的写法,并提供相应的建议。我们在应用建议以前,需要确认该建议是否合适。SQL结构分析能够辨别出的问题包括以下几类:1、使用not in替换not exists、或者使用exits替换in2、where条件的列上具有索引,但是数据类型不匹配,则会建议采用匹配的数据类型进行重写,例如:某个表的c1列为varchar2型,并且c1列上存在索引。SQL优化器对c1=1这样的where条件进行评估的时候,会改写成where to_number(c1)=1
41、,这样就不能使用c1列上的索引了,因此ATO会建议我们将where条件写成where c1=13、设计错误,比如没有写关联条件,导致笛卡尔集等4、生成SQL ProfileATO会通过收集额外的信息,并放入SQL Profile中,可以使得ATO产生更加精确的计划。优化器在优化SQL语句的时候,都是不实际执行SQL语句的情况下,通过统计信息(多少条记录、每条记录占多大空间、每个列上的值有多少)来预测SQL语句可能返回的行数,并根据返回的行数乘以每条记录所占的空间,从而估算出该SQL语句可能要扫描的数据量,并由此来判断,为了返回这些数据行,应该采用什么样的路径来完成。通过对多种访问路径的比较,从
42、中选择一个成本最低的访问路径作为SQL语句的最佳执行计划。有时,查询优化器由于缺乏足够的信息,导致对SQL语句的执行结果的估计不够精确,就产生了较差的执行计划。用户可以通过手工添加提示(hint)来引导优化器产生较为正确的决定。STA通过使用SQL Profile来解决这个问题。ATO会执行一系列的确认步骤,来判断他对SQL语句所产生的成本估计是否正确。确认步骤包括对数据抽样、对样本数据实际的执行SQL语句,从返回的结果集来判断所作的估计是否正确。另外一个确认预测值是否正确的方法就是执行SQL语句的一个片段,也叫做部分执行。ATO会选择合适的方法,以及使用SQL语句在历史上的执行信息,来确认合
43、适的optimizer_mode的值。例如,如果曾经执行该SQL语句时,显示总是返回较少的行,那么即使结果集很大,ATO也会将optimizer_mode设置为first_rows,从而替换默认的all_rows分析后的结构就是SQL Profile,针对SQL语句所收集的额外信息都存放在SQL Profile里面。SQL Profile对SQL语句的作用,就像统计信息对表和索引的作用。额外信息(存储在SQL Profile里面)加上统计信息,从而产生一个较好的执行计划。如果某条SQL语句已经存在一个SQL Profile了,则每次解析的时候,SQL优化器都会使用SQL Profile里的内容
44、,并参考优化器的统计信息,从而产生一个较好的执行计划。由于ATO在确认所作的预测是否正确的时候,可以采用抽样的方法,也可以采用部分执行的方式。因此可能消耗比较多的时间,ATO为我们提供了以下的两种运行模式Limited模式:在该模式下面运行STA的时候,不会生成SQL ProfileComprehensive模式:在该模式下面运行STA,会尝试生成SQL profileSQL Profile会影响SQL语句的执行计划,但是不是固定的,随着统计信息的改变,例如删除了索引、数据行数增加等,SQL执行计划也会发生改变。使用STA,可以同时调优一条或者多条SQL语句,这些语句的来源包括1、由ADDM找
45、到的消耗过多资源的SQL语句2、当前在shared pool里的SQL语句3、从AWR相关的表里获取的SQL语句4、用户指定的多个SQL语句STA在调优多条SQL语句时,可以创建一个新的对象,叫做SQL Tuning Set(STS),并把STS里所有的SQL语句作为一个整体,传递给STA进行调优,STS不仅包含了多条SQL语句,还保存了下面的信心1、执行SQL语句时的上下文,包括解析的schema名称、绑定变量等2、执行SQL语句时的统计信息,执行次数、平均执行时间、CPU时间等我们来做一个例子,使用dbcontrol来调用STA,也可以使用oracle提供的程序包。Top activity
46、:表示从当前数据库里消耗资源最严重的SQL语句中挑选那些较差的SQL语句,并交给STA进行调整。Period SQL:从曾经执行过的SQL语句中挑选要调整的SQL语句SQL Tuning Sets:选择事先创建的STS,并将该STS里的多个SQL语句交给STA进行调整Snapshots:从生成的快照中选择一个快照,并将该快照里包含的SQL语句传给STA进行调整Preserved snapshot sets:从生成的快照集中选择一个快照集,并将该快照集里的SQL语句传递给STA进行调整选择第一项进入鼠标放在SQLID上以后,就会显示SQL语句的全部文本。选择调度SQL优化指导实施这个操作以后,性
47、能将会提高多少。STA不但找出问题、还提供具体的解决办法、以及具体实施的命令。我们只需要执行就可以。使用dbms_sqltune程序包可以调用STA我们举一个例子来看一下如何使用程序包调用STA建立了一个调优任务。执行一个调优任务。.显然还是使用dbcontrol更加清楚。删除调优任务。显示所有的已经建立的调优任务。SQL Access AdvisorSAA从另外一个角度来提供SQL优化的建议,他与STA协同工作,从而提供一个整体的解决方案。SAA能够得出的建议包括创建和删除索引、创建和删除物化视图SAA提供的建议是对整个的工作负载进行评价,不是仅仅为了提高一条语句、一个表的速度SAA和STA
48、的两个主要区别:1、SAA考虑整个的工作量,他的建议用来提高整个工作量的性能,而不是仅仅提高一个SQL语句的性能。STA得出的建议可能是创建一个索引,但是该索引可能会引起DML的性能下降,因此,在测试环境中按照STA的建议创建索引以后,再由SA对整个的工作负载进行测试,由SAA来判断该新增索引所带来的好处与对DML语句所带来的坏处相比,哪个更大,SAA会考虑索引所带来的在整体上的对性能产生的影响,从而决定创建索引还是删除索引2、STA只会考虑建议生成B数索引,而SAA则会根据不同的情况,考虑建议生成各种类型的索引,比如B树索引、Bitmap索引等SAA所分析的工作量可以从多个数据源处获得1、将shared pool里的SQL语句作为工作量2、STS3、指定某个或某些特定表所涉及的SQL语句,还可以使用类似HR.%的方法来指定用户HR下的表所涉及的所有SQL语句都传入SAA进行分析如果安装数据库的时候,选中了sample schema,就会有sh用户以及对象。以SH建立连接,然后执行下面的SQL语句,从而模拟出整个工作量工作量模拟完成以后,我们启动SAA对SQL语句进行筛选,只需选择那些访问SH用户下面的对象的SQL语句进行调优。Cost将会答复的下降一共是四个建议,每个建议一个ID选择第一个建议,看一下详情。建议我们建立物化视图。
网址:自动化管理.ppt https://www.yuejiaxmz.com/news/view/1276939
相关内容
班级自动化管理(PPT)自动化管理培训PPT课件.ppt
住宅小区物业管理自动化系统.ppt
运动与健康管理PPT
教科初中物理九下《9.4 家庭生活自动化、智能化》PPT课件.ppt
8页心理压力自我管理PPT
教科版九年级物理下册《9.4家庭生活自动化、智能化》PPT课件.ppt
班级自动化管理一览表
压力自我管理 PPT
环境管理PPT