SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0 - Production CORE 11.2.0.4.0 Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production SQL> create table table_gl as select * from dba_objects; Table created SQL> create index idx_gl on table_gl(object_id); Index created 手动搜集统计信息,以免执行计划不准确 SQL> EXEC DBMS_STATS.gather_table_stats(user,'table_gl',CASCADE=>TRUE); PL/SQL procedure successfully completed 然后执行SET AUTO TRACE EXP 查看出执行计划,发现走的索引查询 SQL> EXPLAIN PLAN FOR SELECT OBJECT_NAME FROM table_gl WHERE OBJECT_ID=100; Explained SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 358855602 -------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Ti -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 30 | 2 (0)| 00 | 1 | TABLE ACCESS BY INDEX ROWID| TABLE_GL | 1 | 30 | 2 (0)| 00 |* 2 | INDEX RANGE SCAN | IDX_GL | 1 | | 1 (0)| 00 -------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("OBJECT_ID"=100) 14 rows selected 使用hint参数强制该表走全表扫描 SQL> EXPLAIN PLAN FOR SELECT /*+ FULL(table_gl)*/OBJECT_NAME FROM table_gl WHERE OBJECT_ID=100; Explained SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 3610250390 ------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 30 | 294 (1)| 00:00:04 | |* 1 | TABLE ACCESS FULL| TABLE_GL | 1 | 30 | 294 (1)| 00:00:04 | ------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("OBJECT_ID"=100) 13 rows selected 把以下SQL拿到其他窗口执行 SELECT /*+ FULL(table_gl)*/OBJECT_NAME FROM table_gl WHERE OBJECT_ID=100; 然后查看该SQL的SQL_ID SQL> SELECT SQL_ID,SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE '%/*+ FULL(table_gl)*/%'; SQL_ID SQL_TEXT ------------- -------------------------------------------------------------------------------- c073nzyv9h0s3 EXPLAIN PLAN FOR SELECT /*+ FULL(table_gl)*/OBJECT_NAME FROM table_gl WHERE OBJ 2qvpsar7w0k85 SELECT SQL_ID,SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE '%/*+ FULL(table_gl)*/%' chwqmxqgyqqpg SELECT /*+ FULL(table_gl)*/OBJECT_NAME FROM table_gl WHERE OBJECT_ID=100 获得对应Outline SQL> select * from table(dbms_xplan.display_cursor('chwqmxqgyqqpg',null,'outline')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID chwqmxqgyqqpg, child number 0 ------------------------------------- SELECT /*+ FULL(table_gl)*/OBJECT_NAME FROM table_gl WHERE OBJECT_ID=100 Plan hash value: 3610250390 ------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | | 294 (100)| | |* 1 | TABLE ACCESS FULL| TABLE_GL | 1 | 30 | 294 (1)| 00:00:04 | ------------------------------------------------------------------------------ Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.4') PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$1") FULL(@"SEL$1" "TABLE_GL"@"SEL$1") END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("OBJECT_ID"=100) 32 rows selected 可以另找窗口执行,创建sql profile declare v_hints sys.sqlprof_attr; begin v_hints:=sys.sqlprof_attr( 'BEGIN_OUTLINE_DATA', 'IGNORE_OPTIM_EMBEDDED_HINTS', 'OPTIMIZER_FEATURES_ENABLE(''11.2.0.4'')', 'DB_VERSION(''11.2.0.4'')', 'ALL_ROWS', 'OUTLINE_LEAF(@"SEL$1")', 'FULL(@"SEL$1" "TABLE_GL"@"SEL$1")', --这个是由于hint产生,其实我们需要的就是这个 'END_OUTLINE_DATA'); dbms_sqltune.import_sql_profile( 'SELECT OBJECT_NAME FROM table_gl WHERE OBJECT_ID=100', v_hints,'SQLPROFILE_gl', --sql profile 名称 force_match=>true,replace=>true); end; / 验证sql profile结果,发现即使不加hint参数,执行计划也是全表扫描 SQL> EXPLAIN PLAN FOR SELECT OBJECT_NAME FROM table_gl WHERE OBJECT_ID=100; Explained SQL> SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 3610250390 ------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 30 | 294 (1)| 00:00:04 | |* 1 | TABLE ACCESS FULL| TABLE_GL | 1 | 30 | 294 (1)| 00:00:04 | ------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("OBJECT_ID"=100) Note ----- - SQL profile "SQLPROFILE_gl" used for this statement 17 rows selected
Oracle SQL Profile固定执行计划的方法
来源:这里教程网
时间:2026-03-03 12:53:51
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- RMAN -- Frequently Asked Question (FAQ) (Doc ID 469777.1)
- Word 中如何取消所有的超级链接 技巧
Word 中如何取消所有的超级链接 技巧
26-03-03 - Oracle11g RAC安装GI时会遇到INS-06006报错处理过程
Oracle11g RAC安装GI时会遇到INS-06006报错处理过程
26-03-03 - Oracle利用coe_load_sql_profile脚本绑定执行计划
Oracle利用coe_load_sql_profile脚本绑定执行计划
26-03-03 - Oracle静态监听和动态监听
Oracle静态监听和动态监听
26-03-03 - 静默错误:为什么看了那么多灾难,还是过不好备份这一关?
静默错误:为什么看了那么多灾难,还是过不好备份这一关?
26-03-03 - oracle删除表空间以后为什么仍然能够对表进行读写
oracle删除表空间以后为什么仍然能够对表进行读写
26-03-03 - ORACLE 18C启动数据库报错ORA-04031
ORACLE 18C启动数据库报错ORA-04031
26-03-03 - 开工大吉:Oracle 18c已经发布及新特性介绍
开工大吉:Oracle 18c已经发布及新特性介绍
26-03-03 - 如何在Word2007中快速填充表格中的序列号
如何在Word2007中快速填充表格中的序列号
26-03-03
