使用oracle sql profile固定执行计划
2013-02-05 16:19:36
使用sql profile固定执行计划实验
10g之前有outlines,10g之后sql profile作为新特性之一出现。
如果针对非绑定变量的sql,outlines则力不从心。
下面是实验过程
- --1.准备阶段
- SQL> select*fromv$version;
- BANNER
- ----------------------------------------------------------------
- Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Prod
- PL/SQL Release 10.2.0.1.0 - Production
- CORE 10.2.0.1.0 Production
- TNS for32-bitWindows: Version 10.2.0.1.0 - Production
- NLSRTL Version 10.2.0.1.0 - Production
- SQL> createtabletest_raugherasselect*fromdba_objects;
- 表已创建。
- SQL> createindexind_objectidontest_raugher(object_id);
- 索引已创建。
- SQL> selectobject_idfromtest_raugherwhererownum<2;
- OBJECT_ID
- ----------
- 20
- SQL> execdbms_stats.gather_table_stats(user,'TEST_RAUGHER',cascade=>true);
- PL/SQL 过程已成功完成。
- --原sql执行计划
- SQL> setautot trace explain
- SQL> select*fromtest_raugherwhereobject_id=20;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 800879874
- --------------------------------------------------------------------------------------------
- | Id | Operation | Name|Rows| Bytes | Cost (%CPU)|Time|
- --------------------------------------------------------------------------------------------
- | 0 | SELECTSTATEMENT | | 1 | 95 | 2 (0)| 00:00:01 |
- | 1 | TABLEACCESSBYINDEXROWID| TEST_RAUGHER | 1 | 95 | 2 (0)| 00:00:01 |
- |* 2 | INDEXRANGE SCAN | IND_OBJECTID | 1 | | 1 (0)| 00:00:01 |
- --------------------------------------------------------------------------------------------
- Predicate Information (identified byoperation id):
- ---------------------------------------------------
- 2 - access("OBJECT_ID"=20)
- SQL>
- --新sql执行计划
- SQL> select/*+full(test_raugher) */ *fromtest_raugherwhereobject_id=20;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name|Rows| Bytes | Cost (%CPU)|Time|
- ----------------------------------------------------------------------------------
- | 0 | SELECTSTATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
- |* 1 | TABLEACCESSFULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Predicate Information (identified byoperation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=20)
- --2.获取新sql的sql_id
- SQL> col sql_id fora20
- SQL> col sql_text fora100
- SQL> selectsql_id,sql_textfromv$sqlwheresql_textlike'%full(test_raugher)%';
- SQL_ID SQL_TEXT
- -------------------- ----------------------------------------------------------------------------------------------------
- 5nkhk378705z3 selectsql_id,sql_textfromv$sqlwheresql_textlike'%full(test_raugher)%'
- g23hbdmcsdahc select/*+full(test_raugher) */ *fromtest_raugherwhereobject_id=20
- dqp79vx5pmw0k EXPLAIN PLAN SETSTATEMENT_ID='PLUS4294967295'FORselect/*+full(test_raugher) */ *fromtest_raug
- her whereobject_id=20
- --3.获取新sql的outline
- SQL> setpagesize 1000
- SQL> select*fromtable(dbms_xplan.display_cursor('g23hbdmcsdahc',null,'outline'));
- PLAN_TABLE_OUTPUT
- -----------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------
- SQL_ID g23hbdmcsdahc, child number 0
- -------------------------------------
- select/*+full(test_raugher) */ *fromtest_raugherwhereobject_id=20
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name|Rows| Bytes | Cost (%CPU)|Time|
- ----------------------------------------------------------------------------------
- | 0 | SELECTSTATEMENT | | | | 166 (100)| |
- |* 1 | TABLEACCESSFULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Outline Data
- -------------
- /*+
- BEGIN_OUTLINE_DATA
- IGNORE_OPTIM_EMBEDDED_HINTS
- OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
- ALL_ROWS
- OUTLINE_LEAF(@"SEL$1")
- FULL(@"SEL$1""TEST_RAUGHER"@"SEL$1")
- END_OUTLINE_DATA
- */
- Predicate Information (identified byoperation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=20)
- 已选择31行。
- --4.创建sql profile(SQLPROFILE_001)
- SQL> declare
- 2 v_hints sys.sqlprof_attr;
- 3 begin
- 4 v_hints:=sys.sqlprof_attr(
- 5 'BEGIN_OUTLINE_DATA',
- 6 'IGNORE_OPTIM_EMBEDDED_HINTS',
- 7 'OPTIMIZER_FEATURES_ENABLE(''10.2.0.1'')',
- 8 'ALL_ROWS',
- 9 'OUTLINE_LEAF(@"SEL$1")',
- 10 'FULL(@"SEL$1" "TEST_RAUGHER"@"SEL$1")',
- 11 'END_OUTLINE_DATA');
- 12 dbms_sqltune.import_sql_profile(
- 13 'select * from test_raugher where object_id=20',
- 14 v_hints,'SQLPROFILE_001',
- 15 force_match=>true,replace=>false);
- 16 end;
- 17 /
- PL/SQL 过程已成功完成。
- --5.查看是否使用sql profile
- SQL> setautot trace explain
- SQL> select*fromtest_raugherwhereobject_id=20;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name|Rows| Bytes | Cost (%CPU)|Time|
- ----------------------------------------------------------------------------------
- | 0 | SELECTSTATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
- |* 1 | TABLEACCESSFULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Predicate Information (identified byoperation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=20)
- Note
- -----
- - SQL profile "SQLPROFILE_001"usedforthis statement
- SQL> select*fromtest_raugherwhereobject_id=200;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name|Rows| Bytes | Cost (%CPU)|Time|
- ----------------------------------------------------------------------------------
- | 0 | SELECTSTATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
- |* 1 | TABLEACCESSFULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Predicate Information (identified byoperation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=200)
- Note
- -----
- - SQL profile "SQLPROFILE_001"usedforthis statement
创建sql profile
- DBMS_SQLTUNE.IMPORT_SQL_PROFILE(
- sql_text => 'FULL QUERY TEXT',
- profile => sqlprof_attr('HINT SPECIFICATION WITH FULL OBJECT ALIASES'),
- name=>'PROFILE NAME',
- force_match => TRUE/FALSE,
- replace=>TRUE/FALSE);
sql_text用于指定sql的全文本,可查询V$SQLAREA.SQL_FULLTEXT或DBA_HIST_SQLTEXT.SQL_TEXT获得。
删除sql proflie
- BEGIN
- DBMS_SQLTUNE.DROP_SQL_PROFILE(name=>'PROFILE NAME');
- END;
- /
sql profile相关视图
- SELECTname, created,category,sql_Textfromdba_sql_profilesORDERBYcreatedDESC;
- SELECTsql_attr.attr_val outline_hints
- FROMdba_sql_profiles sql_profiles, sys.SQLPROF$ATTR sql_attr
- WHEREsql_profiles.signature = sql_attr.signature
- ANDsql_profiles.name='SQLPROFILE_001'
- ORDERBYsql_attr.attr#ASC;
使用oracle sql profile固定执行计划相关推荐
- 利用sql profile固定执行计划加快OGG同步
ogg是逻辑同步,不想ADG利用后镜像直接修改block中的内容,ogg是根据redo片中SQL,以及SQL对应的后镜像值进行表的修改,这样如果大表上面没有索引,或者走错索引就会导致同步慢.但是OGG ...
- oracle数据库通过SQL profile 绑定SQL最优执行计划(个人实践)
1.执行SQL语句,同时使用如下命令查找SQL ID select a.SQL_ID,b.SQL_TEXT,b.LAST_LOAD_TIME,b.LAST_ACTIVE_TIME from v$s ...
- SQL BASELINE修改固定执行计划
SQL BASELINE修改固定执行计划 2011-06-10 12:50:51 分类: Linux http://www.itpub.net/thread-1445125-1-1.html http ...
- PostgreSQL SQL OUTLINE插件sr_plan (保存、篡改、固定 执行计划)
标签 PostgreSQL , sql plan outline , 执行计划篡改 , query rewrite , sr_plan , pg plan hint 背景 功能较为强大的数据库,通常都 ...
- 熊军 oracle 迁移 spm,Oracle ---- 固定执行计划之SPM
今天终于说到了SPM,一个ORACLE官方推荐使用的SQL执行计划固定方法.为什么最常使用的方法最后说呢?因为介绍SPM使用方法的公开资料最多,ORACLE提供的接口也最丰富,用一篇几百字的小文进行说 ...
- oracle++spm,ORACLE 11G 使用SPM来调整SQL语句的执行计划
跟大家说明一下: ITSM 数据库迁移升级到11G后,有几条SQL语句的执行计划不正确,而且这些语句都是使用绑定变量的. 最初的调整想法是获得这些的语句的绑定变量值,将获得的字面值直接替换SQL语句的 ...
- 使用SPM固定执行计划
作者:闫彬彬 原文来源: https://tidb.net/blog/83b454f1 [是否原创]是 [首发渠道]TiDB 社区 [正文] 1 前言 错误的SQL执行计划是生产系统中经常碰到的问题, ...
- 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释
一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...
- 【Oracle】看懂执行计划之基于规则的优化器(RBO)
[Oracle]看懂执行计划之基于规则的优化器(RBO) 简介 基于规则的优化器(RBO)是通过编码在 Oracle 数据库中的一系列固定的规则,来决定目标 SQL 的执行计划.Oracle 事先 ...
最新文章
- LeetCode--485
- python装饰器类-Python装饰器15-开始使用类作为装饰器
- Java 判断操作系统类型(适用于各种操作系统)
- 『数据库』数据库的查询可不是只知道Select就可以的--关系数据库系统的查询处理
- scipy是python下的什么_SciPy是什么
- 图论算法(六)-- 二分图的最大分配问题(JAVA)
- python规定浮点数类型可以不带小数部分吗_Python标准数据类型-数字
- Codeforces Round #381 (Div. 2)
- react-native 发送接收“广播”
- python编程(virtualenv环境)
- 邮件整体解决方案_为什么推荐用EmailCamel来做Shopify邮件营销?
- PPT文件如何大幅度瘦身、减小所占空间、提高播放速度?
- jk-fourm.php,JK车头灯与我的新年期望(已更新完毕)
- Oracle exists与not exists的用法总结
- ibm wodm studio 开发
- 能上QQ,无法打开网页解决办法!!!(亲测能用)
- 台式计算机蓝牙在哪,台式电脑蓝牙在哪里打开(台式电脑连接蓝牙教程分享)...
- google map 谷歌地图 更改当前定位图标icon大头钉小蓝点
- J-LINK 软件下载地址
- LVDS 显示屏的两种接口标准:VESA 和 JEIDA;单/双路 LVDS 信号
热门文章
- Java按包编译jar_java用命令行编译运行时带有包和使用外部jar包的情况
- 重构是什么、为什么要重构
- Unity官网进不去?打不开?下载不了?
- Unity3d中使用百度语音识别及语音合成【含源码】
- Vue 3.0 Beta
- 创建用于图像大小调整和裁剪器保持纵横比的ASP.NET控件
- 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第1部分
- 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法
- parallels desktop 启动过失败_使用u启动软件制作启动盘时注意哪些【详细介绍】...
- mysql不同的类的个数_Mysql-SQL优化-统计某种类型的个数_MySQL