热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

ORACLE使用STOREDOUTLINE固化执行计划

欢迎进入Oracle社区论坛,与200万技术人员互动交流进入当然我们也可以使用curosr_sharing参数来增强存储纲要的适用范围,但是这里存在一个限制,即cursor_sharing参数仅仅会影响通过CREATE_STORED_OUTLINES参数创建的存储纲要。官方文档描述如下:SeeA

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 当然我们也可以使用curosr_sharing参数来增强存储纲要的适用范围,但是这里存在一个限制,即cursor_sharing参数仅仅会影响通过CREATE_STORED_OUTLINES参数创建的存储纲要。官方文档描述如下: See A

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入


当然我们也可以使用curosr_sharing参数来增强存储纲要的适用范围,但是这里存在一个限制,即cursor_sharing参数仅仅会影响通过CREATE_STORED_OUTLINES参数创建的存储纲要。官方文档描述如下:
See Also: Oracle Database can allow similar statements to share SQL by replacing literals with system-generated bind variables. This works with plan stability if the outline was generated using the CREATE_STORED_OUTLINES parameter, not the CREATE OUTLINE statement. Also, the outline must have been created with the CURSOR_SHARING parameter set to FORCE or SIMILAR, and the parameter must also set to FORCE or SIMILAR when attempting to use the outline.
首先在session1中:
SQL> show user
USER 为 "SYS"
SQL> show parameter cursor_shar
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing string EXACT
SQL> alter system set cursor_sharing=force;
系统已更改。
session 2中
SQL> show user
USER 为 "EASY1"
SQL> select ol_name,creator,sql_text from outln.ol$;
OL_NAME CREATOR
------------------------------ ------------------------------
SQL_TEXT
--------------------------------------------------------------------------------
OUTLINE2 EASY1
select count(*) from t1 where object_id <:var
SQL> alter session set create_stored_outlines=true;
会话已更改。
SQL> select count(*) from t1 where object_id <500;
COUNT(*)
----------
478
SQL> alter session set create_stored_outlines=false;
会话已更改。
SQL> select ol_name,creator,sql_text from outln.ol$;
OL_NAME CREATOR
------------------------------ ------------------------------
SQL_TEXT
--------------------------------------------------------------------------------
SYS_OUTLINE_14010314202705203 EASY1
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(SAMPLESUB
OUTLINE2 EASY1
select count(*) from t1 where object_id <:var
SYS_OUTLINE_14010314202706005 EASY1
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS opt_param('parallel_execution_enabled', '
OL_NAME CREATOR
------------------------------ ------------------------------
SQL_TEXT
--------------------------------------------------------------------------------
SYS_OUTLINE_14010314202705001 EASY1
select count(*) from t1 where object_id <:"SYS_B_0" --系统自动创建了outline
SQL> alter session set use_stored_outlines=true;
会话已更改。
SQL> set autotrace on explain
SQL> select count(*) from t1 where object_id <600;
COUNT(*)
----------
566
执行计划
----------------------------------------------------------
Plan hash value: 3900446664
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
|* 2 | INDEX RANGE SCAN| I1 | 566 | 7358 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("OBJECT_ID"<600)
Note
-----
- dynamic sampling used for this statement (level=2)
SQL> set autotrace off
SQL> select count(*) from t1 where object_id <600;
COUNT(*)
----------
566
SQL> select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID3y9v7qyqns9ws, child number 1
-------------------------------------
select count(*) from t1 where object_id <:"SYS_B_0"
Plan hash value: 3900446664
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
|* 2 | INDEX RANGE SCAN| I1 | 4411 | 57343 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("OBJECT_ID"<:SYS_B_0)
Note
-----
- outline "SYS_OUTLINE_14010314202705001" used for this statement --已经使用了自动生成的存储纲要,但是使用autotrace或者explain却无法表明这点,可能是个bug
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
已选择23行。
另外有一点需要特别注意: When Oracle Database creates an outline, plan stability examines the optimization results using the same data used to generate the execution plan. That is, Oracle Database uses the input to the execution plan to generate an outline, and not the execution plan itself.

[1] [2] [3]


推荐阅读
  • 自SQL Server 2005以来,微软的这款数据库产品逐渐崭露头角,成为企业级应用中的佼佼者。本文将探讨SQL Server 2008的革新之处及其对企业级数据库市场的影响。 ... [详细]
  • 深入解析Apache SkyWalking CVE-2020-9483 SQL注入漏洞
    本文详细探讨了Apache SkyWalking中的SQL注入漏洞(CVE-2020-9483),特别是其影响范围、漏洞原因及修复方法。Apache SkyWalking是一款强大的应用性能管理工具,广泛应用于微服务架构中。然而,该漏洞使得未经授权的攻击者能够通过特定的GraphQL接口执行恶意SQL查询,从而获取敏感信息。 ... [详细]
  • 本文详细介绍了如何解决Oracle数据库中出现的ORA-28002错误,即密码将在1天内过期的问题,包括原因分析及解决方案。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 作为一名计算机科学专业的大三学生,我在过去的一年里自学了Visual Basic (VB),但感觉进展缓慢。VB的学习是否仅仅局限于控件的使用?如何有效地学习API?此外,有人认为Basic语言已经过时,这对VB的未来意味着什么? ... [详细]
  • 本文探讨了在Python中利用sqlite3库创建或重定义SQLite函数的方法,包括自定义函数和修改现有函数的行为。 ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
    .NETCore中的一个接口多种实现的依赖注入与动态选择看这篇就够了最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的 ... [详细]
  • 请求一段SQL代码,用于从数据库中提取当前日期前7天的数据记录。例如,如果今天是2011年5月9日,则需要获取从2011年5月3日至2011年5月9日之间的所有记录。 ... [详细]
  • SQL Server 实例默认排序规则详解
    本文详细介绍了如何在安装过程中为 SQL Server 实例指定默认排序规则,并讨论了不同安装选项下的排序规则选择逻辑。 ... [详细]
  • 使用Solr从MySQL导入数据构建全量索引
    为了更好地掌握Solr的各项功能,本文档将在本地Windows环境中演示如何从MySQL数据库中导入数据至Solr,并构建全量索引。这将有助于开发者熟悉Solr的数据处理流程,尤其是在无法直接在生产服务器上进行实践的情况下。 ... [详细]
  • MySQL中的Anemometer使用指南
    本文详细介绍了如何在MySQL环境中部署和使用Anemometer,以帮助开发者有效监控和优化慢查询性能。通过本文,您将了解从环境准备到具体配置的全过程。 ... [详细]
  • 本文旨在为读者提供SPSS中t检验和卡方检验的简单明了介绍,帮助初学者快速掌握这两种常用统计方法的应用技巧。通过实际案例分析,加深对理论知识的理解。 ... [详细]
  • 本文探讨了Oracle数据库中角色的创建与管理方法,包括如何使用SET ROLE命令激活特定角色,并调整用户的默认角色设置。 ... [详细]
  • 如何在HTML中为两个不同的div设置不同的overflow属性
    探讨在Web前端开发中,如何使用CSS的overflow属性来实现两个div的不同滚动效果,特别是当设计一个弹出窗口时的需求处理。 ... [详细]
author-avatar
wei5xiao5zou6bian6tian
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有