oracle11g new feature SPM

有助于保持sql的语句特性,仅仅同意运行性能提高的运行计划。

它不同于stored outlines, spm在于稳定sql性能,而store outlines在于冻结sql运行计划





事列

1.启用optimizer_cature_sql_plan_baselines 捕获sql语句

SQL> alter session set optimizer_capture_sql_plan_baselines = true;

Session altered.

SQL> select * from objs where object_id = 2;

no rows selected

SQL> select * from objs where object_id = 2;

no rows selected

SQL> alter session set optimizer_capture_sql_plan_baselines = false;

Session altered.

2.查询dba_sql_plan_baselines,确定sql的spm状态

SQL> select plan_name, sql_handle, enabled, accepted, fixed,

  2             module, sql_text

  3  from dba_sql_plan_baselines;

PLAN_NAME                      SQL_HANDLE           ENABLED   ACCEPTED  FIXED     MODULE               SQL_TEXT

------------------------------ -------------------- --------- --------- --------- -------------------- --------------------------------------------------

SQL_PLAN_4pzq3z6xcqkpwd0984253 SQL_4afec3f9bacb4abc YES       YES       NO        SQL*Plus             select * from objs where object_id = 2

3.添加索引改变环境再执行sql

SQL> alter session set optimizer_capture_sql_plan_baselines = true;

Session altered.

SQL> select * from objs where object_id = 2;

no rows selected

SQL> select * from objs where object_id = 2;

no rows selected

SQL> alter session set optimizer_capture_sql_plan_baselines = false;

Session altered.

4.查询dba_sql_plan_baselines

SQL> select plan_name, sql_handle, enabled, accepted, fixed, module, sql_text from dba_sql_plan_baselines;

PLAN_NAME                      SQL_HANDLE           ENABLED   ACCEPTED  FIXED     MODULE               SQL_TEXT

------------------------------ -------------------- --------- --------- --------- -------------------- --------------------------------------------------

SQL_PLAN_4pzq3z6xcqkpwbe4c314c SQL_4afec3f9bacb4abc YES       NO        NO        SQL*Plus             select * from objs where object_id = 2

SQL_PLAN_4pzq3z6xcqkpwd0984253 SQL_4afec3f9bacb4abc YES       YES       NO        SQL*Plus             select * from objs where object_id = 2

SQL>

5.測试

SQL>

SQL> set autotrace on

SQL> select * from objs where object_id = 2;

no rows selected

Execution Plan

----------------------------------------------------------

Plan hash value: 954894094





--------------------------------------------------------------------------

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      |     1 |    98 |   247   (1)| 00:00:03 |

|*  1 |  TABLE ACCESS FULL| OBJS |     1 |    98 |   247   (1)| 00:00:03 |

--------------------------------------------------------------------------





Predicate Information (identified by operation id):

---------------------------------------------------





   1 - filter("OBJECT_ID"=2)





Note

-----

   - SQL plan baseline "SQL_PLAN_4pzq3z6xcqkpwd0984253" used for this statement









Statistics

----------------------------------------------------------

        255  recursive calls

          0  db block gets

       1044  consistent gets

        879  physical reads

          0  redo size

       1343  bytes sent via SQL*Net to client

        513  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

         28  sorts (memory)

          0  sorts (disk)

          0  rows processed





SQL> alter session set optimizer_use_sql_plan_baselines = false;

Session altered.

SQL> select * from objs where object_id = 2;

no rows selected

Execution Plan

----------------------------------------------------------

Plan hash value: 613004408





-----------------------------------------------------------------------------------------------

| Id  | Operation                   | Name            | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |                 |     1 |    98 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| OBJS            |     1 |    98 |     2   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | IDX_OBJSID_OBJS |     1 |       |     1   (0)| 00:00:01 |

-----------------------------------------------------------------------------------------------





Predicate Information (identified by operation id):

---------------------------------------------------





   2 - access("OBJECT_ID"=2)









Statistics

----------------------------------------------------------

          1  recursive calls

          0  db block gets

          2  consistent gets

          4  physical reads

          0  redo size

       1343  bytes sent via SQL*Net to client

        513  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          0  rows processed

能够看到当启动optimizer_user_sql_plan_baselines时走索引应该是最优的却没有使用

plan_name accecpt 为 no 影响了走索引计划

oracle spm使用1的更多相关文章

  1. Oracle - SPM固定执行计划

    1. 通过dbms_xplan.display_cursor查看指定sql都有哪些执行计划 SQL> select * from table(dbms_xplan.display_cursor( ...

  2. Oracle - SPM固定执行计划(一)

    一.前言 生产中偶尔会碰到一些sql,有多种执行计划,其中部分情况是统计信息过旧造成的,重新收集下统计信息就行了.但是有些时候重新收集统计信息也解决不了问题,而开发又在嗷嗷叫,没时间让你去慢慢分析原因 ...

  3. Oracle - SPM固定执行计划(二)

    一.前言 前面文章(https://www.cnblogs.com/ddzj01/p/11365541.html)给大家介绍了当一条sql有多个执行计划时,如何通过spm去绑定其中一条执行计划.本文将 ...

  4. Oracle 固定执行计划-使用SPM(Sql Plan Management)固定执行计划

    固定执行计划-使用SPM(Sql Plan Management)固定执行计划 转载自:http://www.lunar2013.com/2016/01/固定执行计划-使用spm%EF%BC%88sq ...

  5. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  6. Oracle DB SQL 性能分析器

    • 确定使用SQL 性能分析器的优点 • 描述SQL 性能分析器工作流阶段 • 使用SQL 性能分析器确定数据库更改所带来的性能改进 SQL 性能分析器:概览 • 11g 的新增功能 • 目标用户:D ...

  7. Oracle 11g 执行计划管理1

    1. 执行计划管理的工作原理 1.1控制执行计划的稳定性 11g之前,可以使用存储大纲(stored outline)和SQL Profile来固定某条SQL语句的执行计划,防止由于执行计划发生变化而 ...

  8. oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)

    1.   简介 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套允许DBA捕获和保持任意SQL语句执行计划最优的新工具,这样,限制了刷新优化器统计 ...

  9. 转://Oracle数据库升级后保障SQL性能退化浅谈

    一.数据库升级后保障手段 为了保障从10.2.0.4版本升级到11.2.0.4版本更加平稳,我们事先采用了oracle性能分析器(SQL Performance Analyzer)来预测数据库的关键S ...

随机推荐

  1. python基础学习笔记——os模块

    #OS模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = os. ...

  2. 深入浅出Oracle:DBA入门、进阶与诊断案例(读书笔记1)

    一.数据库的启动和关闭 Oracle Server共有2部分组成:Instance和Database. Instance是指一组后台进程/线程和一块共享内存区域,而Database是指存储在磁盘上的一 ...

  3. swift写一个简单的列表unable to dequeue a cell with identifier reuseIdentifier - must register a nib or a cla

    报错:unable to dequeue a cell with identifier reuseIdentifier - must register a nib or a class for the ...

  4. JSON.parse与eval区别

    两种方式都可以解析json字符串,不过有时候JSON.parse解析会失败,失败原因有多种,下面会指出一种. JSON.parse()解析json格式的数据,会对要解析的字符串进行格式检查,如果格式不 ...

  5. 怎么样给CentOS6.5增加swap分区

    再给服务器添加zabbix监控的时候,发现服务器有个报错“Lack of free swap space on localhost”,通过查找得知,在安装服务器的时候忘了划分swap分区.为了减少报错 ...

  6. 【Luogu】P2015二叉苹果树(DP,DFS)

    题目链接 设f[i][j][k]表示给以i为根节点的子树分配j条可保留的树枝名额的时候,状态为k时能保留的最多苹果. k有三种情况. k=1:我只考虑子树的左叉,不考虑子树的右叉,此时子树能保留的最多 ...

  7. 【Luogu】P1594护卫队(前缀和+DP)

    TM搞了半天的二维DP方程还是错的. 这是题目链接: 设f[i]表示前i辆车顺利通过的最小时间. 则对于每一个i枚举该组车的起点j,然后从所有的f[j]+Min[j][i]中选一个最小的. Min[j ...

  8. BZOJ 1043 [HAOI2008]下落的圆盘 ——计算几何

    倒着考虑,加入一个圆,判断和前面有没有完全覆盖的情况. 如果没有,和圆盘一一取交集,然后计算它们的并集,然后计算即可. #include <map> #include <cmath& ...

  9. leetcode 347 priority,map的使用

    主要是对次数进行排序,然后去前几个最大次数的值,输出即可 class Solution { public: vector<int> topKFrequent(vector<int&g ...

  10. Linux(12):期中架构(4)--- 前端部分:HTTP & Nginx & LNMP架构

    HTTP协议概念原理说明 1. 当用户访问一个网站时经历的过程 # ①. 利用DNS服务,将输入的域名解析为相应的IP地址 a 本地主机输入域名后,会查询本地缓存信息和本地hosts b 本地主机会向 ...