spm整体说明

目录html

一、如何工做sql

二、什么时候使用测试


一、如何工做

sql plan baseline 是一个关联sql 语句的对象,设计会影响查询优化器生成执行计划,更具体的说,一个sql baseline包含其中的一些内容,一个或多个执行计划的一组HINTS信息,基本上一个SQL plan baselines被使用会强制使查询优化器对于一个给定的sql语句生成一致的执行计划。优化


不是全部的HINTS都存储在SQL plan baselines中,有哪些不能存储呢?ui

SELECT name FROM v$sql_hint WHERE version_outline IS NULL

虽然 众多的HINTS不存储在sql plan baselines中可是不会影响执行计划(如:gather_plan_statistics)。还有一些其余会影响(如materialize和inline),这种结果,一些执行计划不能强制经过sql plan baseline 无需指定hint的模式设计


sql plan baseline其中一个好处他应用指定的sql语句,不须要修改sql 语句。实际上,sql plan baselines被存储与sql 管理基中,查询优化器自动选择他们,基本的步骤:code

  1. 第一:常规方法sql语句被解析,换句话说,查询优化器在没有sql plan baseline的支持下生成一个执行计划
  2. 以后,查询优化使sql语句无大小写敏感并文本中的空格内容能够忽略,sql 语句的结果签名(signature)被计算,进入sql 管理基中被执行,若是一个sql plan baseline有相同的签名被找到,被核对确认sql语句被优化并sql 语句关联的sql plan baseline是相同的,这个核对是必须的由于签名是一个hash 值,随后,可能会有冲突。
  3. 当测试成功,查询优化器验证sql plan baseline是否包含这个生成的执行计划,若是包含并接受的,就执行他
  4. 若是在sql plan baseline存储的被接受是其余执行计划,这个HINTS关联它被使用其余执行计划生成。注意若是这个SQL plan baseline包含若干个执行计划,查询优化器选择最低代价的一个。
  5. 最后,查询优化器核对执行计划是否经过sql plan baseline的信息提供生成所指望的执行计划,若是最后核对被知足,执行计划能够被使用,若是不能知足,这个查询优化器尝试其余接受的执行计划,若是他们都不能重现,他会在没有sql plan baseline从新生成执行计划。

image

二、什么时候使用

使用sql plan baselines有两种状况,第一,不管你什么时候优化sql 语句都不能改变应用(如,在应用中不能把增长hints选项)。第二,你应该考虑什么时候、怎么的缘由使用它,你遇到了麻烦的执行计划不稳定,由于sql plan baselinegs的目标是强制查询优化器从能够接受的执行计划的限制列表中选择一个执行计划,当你明确想限制查询优化器选择一个指定的执行计划。htm

相关文章
相关标签/搜索