15 sql base line 工作机制
<个人Configuration>正常配置一下, 就OK了, 不用理了, oracle 11g 默认启动 发展:1、从Oracle的发展角度来看,估计这种方法是Oracle发展和改进的方向,如今outline已经被废弃,sql profile估计在后续的发行版本中也难有改进,因此,对于从11g开始接触Oracle的朋友来说,一定要对sql计划基线有所了解,因为这是以后的主流!2、SQL执行计划基线保存在数据字典中,查询优化器会自动判断使用他们。工作机制从Oracle 11g开始,由于基线的存在,一条语句的解析过程大概如下:1.SQL语句被硬解析后,CBO(优化器)会产生很多个的执行计划,CBO从中选择一个成本最低执行计划。2.基于SQL语句的文本形成一个哈希值(signature),通过这个哈希值来检查数据字典中是否存在同样的基线。3.如果基线存在,优化器会对刚刚产生的执行计划和保存在SQL plan baseline中的执行计划进行比较。4.如果基线中有与CBO刚产生的执行计划的匹配的SQL执行计划存在,并且被标记为可接受(‘accepted’),则这个CBO生成的执行计划被启用。5.如果基线中没有匹配的SQ执行计划存在,CBO评估基线中被标记为‘accepted’的的多个执行计划,并选择其中cost最低的执行计划。(注意,一个语句的基线可以有多个执行计划被保存,这是与其他Outline和SQL profiel都不同的地方)6.如果刚刚硬解析过程中CBO选择的执行计划比保存在基线中的执行计划COST都低,这个新生成的执行计划被标记为‘not-accepted’并保存在基线中。直到这个执行计划被演化且验证后才会被考虑使用,即标记为accepted(演化和验证,可以简单理解为Oracle确认这个执行计划可以带来更好的性能)。Oracle 就是通过上面这种方式来确保SQL语句的性能不会退化(即第一部分中我归纳的第二个主要作用),称为“执行计划保守选择策略”基线的一些特点1.通过OPTIMIZER_USE_SQL_PLAN_BASELINE来控制Oracle是否使用基线,默认值为TRUE,即会自动使用基线。2.11g中默认是不会自动创建基线3.与OUTLINE和SQL Profile不同,基线中不存在分类的概念4.与OUTLINE和SQL Profile不同,每个SQL语句可以有多个基线。Oracle根据制定的规则来判断具体是否哪个基线5.基线针对RAC中所有的实例都生效6.基线有两个表示,一个为sql_handle,可以理解为表示语句文本的唯一标识,一个为sql_plan_name可以理解为执行计划的唯一标识7.不能像sql profile一样通过force_matching属性将字面值不一样的SQL语句使用一个基线应用多个语句。创建基线的几种方式1、自动捕获基线,通过将optimizer_cature_sql_plan_baselines设置为true,优化器为重复执行两次以上的SQL语句生成并保存基线(可以系统级或会话级修改)2、从SQL调优集合中加载,通过使用包dbms_spm.load_plans_from_sqlset来从SQL调优集合中加载基线DECLAREl_plans_loaded PLS_INTEGER; BEGINl_plans_loaded := DBMS_SPM.load_plans_from_sqlset(sqlset_name => 'my_sqlset');END;/3、从库缓存中加载,通过包dbms_spm.load_plans_from_cursor_cache函数为一条已经在游标缓存中的语句创建基线DECLAREl_plans_loaded PLS_INTEGER;BEGINl_plans_loaded := DBMS_SPM.load_plans_from_cursor_cache(sql_id => '1fkh93md0802n',plan_hash_value=>null);END;/备注:可以有多种方式加载,例如可以根据sql文本进行模糊匹配、SQL语句解析的用户名等等方式,具体见文档基线的几种状态一个SQL语句对应的基线,我将它们归纳为三种状态1.accepted(可接受),只有这种状态的基线,优化器才会考虑此基线中的执行计划2.no-accepted(不可接受),这种状态的基线,优化器在SQL语句解析期间不会考虑。这种状态的基线必须通过演化和验证通过后,转变为accepted状态后,才会被优化器考虑使用3.fixed为yes(固定),这种状态的基线固有最高优先级!比其他两类基线都要优先考虑查看基线1、基本视图:dba_sql_plan_baselines、dba_sql_management_config2、底层视图:sqlobj$data 、 sqlobj$ (保存具体的hint),如下查看基线中保存的执行计划语句:selectextractvalue(value(d), '/hint') as outline_hintsfromxmltable('/outline_data/hint'passing (selectxmltype(comp_data) as xmlvalfromsqlobj$data sod, sqlobj$ sowhere so.signature = sod.signatureand so.plan_id = sod.plan_idand comp_data is not nulland name like '&baseline_plan_name')) d;3、通过函数来查看基线的详细信息:select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle=>'SYS_SQL_11bcd50cd51504e9',plan_name=>'SQL_PLAN_13g6p1maja1790cce5f0e'));演化基线 为了验证基线中一个处于不可接受状态的执行计划是否比一个处于可接受状态的执行计划具有更高的效率,必须通过演化来验证,需要让优化器以不同的执行计划来执行这条SQL语句,观察不可接受状态的执行计划基线是否会带来更好的性能,如果性能确实更高,这个不可接受状态的基线将会转换为可接受状态。演化的方式有两种:1、手工执行运行SELECT DBMS_SPM.evolve_sql_plan_baseline(sql_handle => 'SYS_SQL_xxxxxxxxxxxxx') From dual;还有time_limit/verify/commit几个参数,可以参考文档2、调优包实现基线的自动演化,可以理解为,启动一个调度任务,周期性的检查是否有不可接受状态的基线可以被演化 修改基线可以通过dbms_spm.alter_sql_plan_baseline包来修改基线的一些属性,主要有如下几个属性1.ENABLED :设置该属性的值为NO告诉Oracle 11g临时禁用某个计划,一个SQL计划必须同时标记为ENABLED和ACCEPTED,否则CBO将忽略它2.FIXED:设置为YES,那个计划将是优化器唯一的选择[最高优先级],即使如果某个计划可能拥有更低的成本。这让DBA可以撤销SMB的默认行为,对于转换一个存储概要进入一稳定的SQL计划基线特别有用,注意当一个新计划被添加到被标记为FIXED的SQL计划基线,该新计划不能被利用除非它申明为FIXED状态3.AUTOPURG:设置这个属性的值为NO告诉Oracle 11g无限期保留它,从而不用担心SMB的自动清除机制4.plan_name : 改变SQL plan 名字5.description : 改变SQL plan描述语法:SET SERVEROUTPUT ONDECLAREv_text PLS_INTEGER;BEGINv_text := DBMS_SPM.alter_sql_plan_baseline(sql_handle => 'SYS_SQL_xxxxxx',plan_name => 'SYS_SQL_PLAN_xxxxxxxxx',attribute_name => 'fixed',attribute_value => 'YES');DBMS_OUTPUT.put_line('Plans Altered: ' || v_text );END;/
转载于:https://www.cnblogs.com/moveofgod/p/4660523.html
15 sql base line 工作机制相关推荐
- NAMENODE工作机制,元数据管理(元数据存储机制、元数据手动查看)、元数据的checkpoint、元数据目录说明(来自学习资料)
NAMENODE工作机制 学习目标:理解namenode的工作机制尤其是元数据管理机制,以增强对HDFS工作原理的理解,及培养hadoop集群运营中"性能调优"."nam ...
- SQL语言的事务机制_转摘
什么是数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: · 更新客户所购商品的库存信息 · 保存客户付款信息--可能 ...
- android 6.0 高通平台sensor 工作机制及流程(原创)
最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...
- android 6.0 高通平台sensor 工作机制及流程
最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...
- 详解模板引擎工作机制
本文讲的是详解模板引擎工作机制, 我已经使用各种模版引擎很久了,现在终于有时间研究一下模版引擎到底是如何工作的了. 简介 简单的说,模版引擎是一种可以用来完成涉及大量文本数据的编程任务的工具.一般而言 ...
- ORACLE的工作机制
我们从一个用户请求开始讲,ORACLE的完整的工作机制是怎样的,首先一个用户进程发出一个连接请求,如果使用的是主机命名或者是本地服务命中的主机名使用的是机器名(非IP地址),那么这个请求都会通过DNS ...
- mysql的proxy机制_MySQL Proxy工作机制浅析
MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断.改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate之类的网络代理服务器的基本思想是一样的.代理服务器是和T ...
- SQL Server DBA工作内容详解
原文:SQL Server DBA工作内容详解 在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色. ...
- Yarn基本架构和工作机制
Yarn基本架构和工作机制 概念 Yarn基本架构 ResourceManager (RM)作用 NodeManager (NM)作用 ApplicationMaster (AM)作用 contain ...
最新文章
- Android AM命令行启动程序的方法
- 北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A
- Java SimpleTimeZone setStartRule()方法与示例
- 解决百度 ueditor v1.4.3 编辑器上传图片失真的bug?
- 老李分享云计算基本概念 2
- 编译内核是几个常用的命令备忘
- MP4文件中提取H264码流保存成H264文件
- 如何免费下载百度文库,豆丁网等付费文章
- 360黑客攻防技术分享会
- 投票 java_java实现投票程序设计
- 组装台式计算机需要哪些配件,组装一台电脑需要哪些配件【详细列举】
- PIPIOJ1166PIPI的棋盘
- 什么是OXC(全光交叉)?
- 关于所谓U盘有占用空间,却看不到文件的一些看法
- arcgis通俗易懂教程(一)------入门教程
- 常用的几种集合(Map另写)
- 对接支付宝网站支付接口
- 最新云智推任务提交版拉新任务分销系统源码+功能强大
- 【案例分享】项目施工进度报告 - 树形报表
- 使用 HSDB 查看Spring AOP产生的代理类
热门文章
- [APIO2018]铁人两项——圆方树+树形DP
- 致年轻的创业者:人脉没那么重要
- C++ code:main参数
- 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路
- Impala性能优化
- jquery ajax json 数据的遍历
- 【Android Developers Training】 104. 接受地点更新
- POJ 1821 Fence ★(单调队列优化DP)
- Linux内核模块学习笔记(转载)
- 2011年中国网络游戏市场实际销售收入达到428.5亿元