oracle19C新特性功能答疑--SQL计划管理

如题

已邀请:

Q1:


SQLMonitor,这工具需要付费不??


回答:属于OracleTuningPack.可能需要OracleTuningPack的license.




这工具现在用的是哪个版本


回答:19c




Q2


软件版本需要跟oracle库的版本保持一致吗?是不是向低版本db兼容


回答:不需保持一致,向下兼容。如果您问的SQLMonitor的话,它是OracleDB的内置架


构,不是单独出来的。你可以用不同的工具去查看SQLMonitor报告。




Q3


用sql_monitor事件在搞并发负载大大环境中消耗大不大


回答:高并发建议不要用sql_monitor事件。




Q4


这个oem里监控的sql也是sqlmonitor监控的吗?一样条件是自动触发的吧


回答:一样的。只是查看工具不一样而已。


SQLDeveloper是免费的,功能强大的数据库开发和管理工具。Real-timeSQLandPL/SQL


Monitoring属于OracleTuningPack




Q5:


我有一个SQL,装在一个存储过程中,存储过程带两个参数,该存储过程里由JOB调用,每


隔一段时间去执行,问题点在于该存储过程里面的语句有时候能够很快跑完,有时候产生大


量的临时数据,侵占临时段,这个SQL的条件里有条件是存储过程的入参传进来的,因此


每次实际执行的时候,参数值是不一样的,正常执行和执行慢的时候我已经monitor出来了,


执行计划天壤之别,所以我想把这个正常的执行计划固定起来,想问下老师,该如何把这个


带有变量的语句的执行计划通过SPM固定起来


回答:找出SQLID和PlanHashValue,加到SQLplanbaseline里,然后把它设置为fix的


plan就可以了。这样,以后每次运行都会跑fix的plan.


但是,你的这个问题,需要看一下,是不是不同的传入值,返回实际行数差距会很大,也就


是说失败的SQL,是否真的就是因为返回行数巨大而失败的,如果是这样的话,需要看一看


业务逻辑,是否设计合里。可以看看失败的SQL的SQLmonitor报告到底有什么区别,特


别是预估值。




Q6:


新执行计划evolve,是根据sql执行时的环境(如白天),还是evolvejob执行的环境(如晚


上),不同时段db环境可能差别较大,是否会影响验证结果?


回答:是根据evolve时的环境,因为evolve其实是优化器去做,优化器会用当时的环境。






Q7:


如果是从AIX小机11.2.0.4迁移到x86的11.2.0.4,执行计划是否会有部分发生变化


回答:有可能会变。可以用SPA(SQLPerformanceAnalyzer)去验证是否有执行计划变化,


性能是否降级。




Q8:


请教:sql计划在演进阶段,如果验证时数据已经发生变化,那么验证时这个执行计划是可


接受的,实际执行时是不可接受的,如何防止这种现象呢?


回答:要结合自已的业务场景。如果数据变化就是很频繁且量变化大,不要用planbaseline,


让优化器自已选计划。






Q9:


JOB调用的存储过程,在JOB启动后修改了存储过程的脚本,JOB是否需要重新启动


回答:应该是不用。




Q10:


SPM自动capture是否建议只在db升级测试时使用,如果生产环境开启,是否可能造成大


量sql执行被捕获,从而增加了执行计划频繁变更的风险?


回答:自动capture一般不在生产开启。它只是捕获plan到baseline的一种方法,建议手


动捕获。




Q11:


如何看执行计划好或不好


回答:主要看成本,看看是否用了最好的方法取得数据。执行计划之间的比较可以交给优化


器,我们可以用SPM手动比较,然后看生成的报告。




Q12:


本讲的PPT和相关sql能共享么


回答:能,请关注群里信息,会统一分享。




Q13:


sql_handler和sql_hash_value有什么区别?


回答:SQL_HANDLE是在SPM里用来唯一标识一条SQL.SQLhashvalue是沿用9i的风格


用address+hash_value唯一定位一条SQL.总之,都是用来标识SQL的,关联的时候对应


好就行了。




Q14:


老师您好,我重建一张表后,发现之前一个update语句不走索引了,后来发现多了一个sql


baseline,我删除baseline以后正常走索引列,请问它是自动生成的吗,为什么生成的不走


索引,是不是建表以后和建索引之前建的baseline,这种情况一般如何处理?谢谢老师


回答:可以用我脚本里的方法,去看xplan的note部分,如果用的baseline里的计划,在


note部分里有说明。你可以跟据自已的情况分析一下。






Q15:


SPM演示的太快了,脚本没有加注释,不清楚每条SQL的作用,后期分享时能加点注释吗?


谢谢老师了!


回答:可以的。




Q16:


隔离的时候会有一些什么信息吗


回答:如果执行的SQL被隔离了,那么会返回错误提示该SQL被隔离了。






Q17:


以后还有sql优化的课程吗?感觉很好


回答:大家有需求应该就会有。请持续关注我们的群和公众号哦亲~




Q18:


数据库执行计划分为评估执行计划和真实执行计划,既然评估执行计划不准,为什么oracle


还要评估执行计划?评估执行计划主要目的是什么,是真实执行计划无法替代的?


回答:因为SQL解析的本身也耗资源,优化器会快速找一个执行计划。




Q19:


为什么有了评估执行计划,oracle不参考评估执行计划来执行,是什么导致oracle不按照评


估执行计划来执行,而是生成自己的真实执行计划来执行


回答:优化器的自适应功能,可能会在执行的时候智能的改变执行计划。




Q19:


sqlprofile和spm那个更推荐


回答:sqlprofile是对过去出现的不好执行计划做修正。SPM是预防在将来不好执行计划影


响性能。可以用SQLtuningadvisor来建议你使用什么策略。




Q19:


刚才因为加了索引,执行SQL时生成新的执行计划,那么这次SQL的执行用的是sqlbaseline


中已有的执行计划,还是新生成的执行计划?


回答:加了索引,会生成新的执行计划,但实际执行的时候还是用的sqlbaseline中已有的


执行计划。如果新的执行计划通过了验证,那么在后面可能也会被用到。优化器会从sqlplan


baseline中选一个成本最低的计划。




Q19:


请问一下,11.2.0.4LINUXRAC数据库,里面有一条sql消耗资源太大,想把它限制或者执


行,有什么办法呢?或者禁止执行,有没有类似sql黑名单的办法?


回答:可以用ResourceManager.可以选择终止这条SQL,或把它降到优先级低的组里去。




Q20:


请问老师哪些情况下会导致一条SQl执行计划变动,一下好,一下坏??


回答:数据量的变化,绑定值的不同,参数的变动等可能都会发生SQl执行计划变动。具体


问题,可以通过SQLmonitor监控一下,看看好时和坏时的区别在什么地方。也可以查


dba_hist_sqlstat去看看不同时间段的SQL执行计划变动情况。


Q20:


既然数据库会自动把SQL计划加入基线,那么什么情况下需要手动加入尼。?


回答:数据库只会自动去分析TOPSQL.手动加入用在你已知有更优的执行计划,且那些不


好的执行计划影响了性能的时候。具体使用场景可以看看后面分享出来的片子。




Q21:


如何追踪执行计划突变的根本原因


回答:对比SQLMonitor报告,参考最近的变更分析。执行计划突变并非坏事,只要SQL性


能没变差就没关系。另外,数据库升级后(包括打RU),部分SQL执行计划也会变。




Q22:


演进必须是手动的吗?


回答:在每晚的运维窗口会自动演进。




Q23:


有新的执行计划,演进能自动吗?


回答:在每晚的运维窗口会自动演进。




Q24:


sql表的关联顺序对执行会有很大影响吗?


回答:理论上是没有,优化器会自动判断先去哪个表取数据。




Q25:


是什么导致oracle的评估执行计划和真实执行计划不一致的?


回答:预估的基数和实际的会不一样。只要差不太多就没问题。预估的基数主要来自统计信


息,如果数据倾斜严重,预估的可能也不准。另外,优化器的自适应功能也会在实际执行过


程中改变执行计划。


要回复问题请先登录注册