设为首页 收藏本站
查看: 824|回复: 0

[经验分享] SQL Profile 如何使用

[复制链接]

尚未签到

发表于 2018-10-22 10:27:49 | 显示全部楼层 |阅读模式
SQL> select * from v$version;  

  
BANNER
  
----------------------------------------------------------------
  
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
  
PL/SQL Release 10.2.0.5.0 - Production
  
CORE    10.2.0.5.0      Production
  
TNS for Linux: Version 10.2.0.5.0 - Production
  
NLSRTL Version 10.2.0.5.0 - Production
  
SQL> grant dba to scott;
  

  
Grant succeeded.
  
SQL> conn scott/tiger
  
Connected.
  
SQL> create table t1 (n number);
  

  
Table created.
  

  
插入数据
  

  
SQL> declare
  
  2  begin
  
  3  for i in 1..10000
  
  4  loop
  
  5  insert into t1 values(i);
  
  6  commit;
  
  7  end loop;
  
  8  end;
  
  9  /
  

  
PL/SQL procedure successfully completed.
  

  
SQL> select count(*) from t1;
  

  
  COUNT(*)
  
----------
  
     10000
  

  
SQL> create index idx_t1 on t1(n);
  

  
Index created.
  

  

  
收集统计信息
  

  
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T1',method_opt=>'for all columns size 1',cascade=>true);
  

  
PL/SQL procedure successfully completed.
  

  
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=1;
  

  
         N
  
----------
  
         1
  

  
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
  

  
PLAN_TABLE_OUTPUT
  
--------------------------------------------------------------------------------
  
SQL_ID  1kg76709mx29d, child number 0
  
-------------------------------------
  
select /*+ no_index(t1 idx_t1) */ * from t1 where n=1
  

  
Plan hash value: 3617692013
  

  
--------------------------------------------------------------------------
  
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  
--------------------------------------------------------------------------
  
|   0 | SELECT STATEMENT  |      |       |       |     6 (100)|          |
  
|*  1 |  TABLE ACCESS FULL| T1   |     1 |     3 |     6   (0)| 00:00:01 |
  
--------------------------------------------------------------------------
  

  
Query Block Name / Object Alias (identified by operation id):
  
-------------------------------------------------------------
  

  
   1 - SEL$1 / T1@SEL$1
  

  
Outline Data
  
-------------
  

  
  /*+
  

  
PLAN_TABLE_OUTPUT
  
--------------------------------------------------------------------------------
  
      BEGIN_OUTLINE_DATA
  
      IGNORE_OPTIM_EMBEDDED_HINTS
  
      OPTIMIZER_FEATURES_ENABLE('10.2.0.5')
  
      ALL_ROWS
  
      OUTLINE_LEAF(@"SEL$1")
  
      FULL(@"SEL$1" "T1"@"SEL$1")
  
      END_OUTLINE_DATA
  
  */
  

  
Predicate Information (identified by operation id):
  
---------------------------------------------------
  

  
PLAN_TABLE_OUTPUT
  
--------------------------------------------------------------------------------
  

  
   1 - filter("N"=1)
  

  
Column Projection Information (identified by operation id):
  
-----------------------------------------------------------
  

  
   1 - "N"[NUMBER,22]
  

  

  
41 rows selected.
  
针对上述SQL创建一个Automatic类型的SQL Profile的自动调整任务:
  
SQL> declare
  
  2  my_task_name varchar2(30);
  
  3  my_sqltext clob;
  
  4  begin
  
  5  my_sqltext :='select /*+ no_index(t1 idx_t1) */ * from t1 where n=1';
  
  6  my_task_name := dbms_sqltune.create_tuning_task(
  
  7  sql_text => my_sqltext,
  
  8  user_name => 'SCOTT',
  
  9  scope => 'COMPREHENSIVE',
  
10  time_limit => 60,
  
11  task_name => 'my_sql_tuning_task_2',
  
12  description => 'Task to tune a query on table t1');
  
13  end;
  
14  /
  

  
PL/SQL procedure successfully completed.
  

  

  
执行上述自动调整任务
  

  
SQL> begin
  
  2  dbms_sqltune.execute_tuning_task( task_name => 'my_sql_tuning_task_2');
  
  3  end;
  
  4  /
  

  
PL/SQL procedure successfully completed.
  

  

  
查看刚刚运行的自动调整任务的调整结果:
  

  
SQL> set long 9000
  
SQL> set longchunksize 1000
  
SQL> set lines 800
  
SQL> select dbms_sqltune.report_tuning_task('my_sql_tuning_task_2') from dual;
  

  
DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK_2')
  
-------------------------------------------------------------------------------
  
GENERAL INFORMATION SECTION
  
-------------------------------------------------------------------------------
  
Tuning Task Name                  : my_sql_tuning_task_2
  
Tuning Task Owner                 : SCOTT
  
Scope                             : COMPREHENSIVE
  
Time Limit(seconds)               : 60
  
Completion Status                 : COMPLETED
  
Started at                        : 07/12/2015 04:34:15
  
Completed at                      : 07/12/2015 04:34:16
  
Number of SQL Profile Findings    : 1
  

  
-------------------------------------------------------------------------------
  
Schema Name: SCOTT
  
SQL ID     : 4bh6sn1zvpgq7
  
SQL Text   : select /*+ no_index(t1 idx_t1) */ * from t1 where n=1
  

  
-------------------------------------------------------------------------------
  
FINDINGS SECTION (1 finding)
  
-------------------------------------------------------------------------------
  

  
1- SQL Profile Finding (see explain plans section below)
  
--------------------------------------------------------
  

  
  A potentially better execution plan was found for this statement.
  

  
  Recommendation (estimated benefit: 83.98%)
  
  ------------------------------------------
  
  - Consider accepting the recommended SQL profile.
  
    execute dbms_sqltune.accept_sql_profile(task_name =>
  
            'my_sql_tuning_task_2', replace => TRUE);
  

  
-------------------------------------------------------------------------------
  
EXPLAIN PLANS SECTION
  
-------------------------------------------------------------------------------
  

  
1- Original With Adjusted Cost
  
------------------------------
  
Plan hash value: 3617692013
  

  
--------------------------------------------------------------------------
  
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  
--------------------------------------------------------------------------
  
|   0 | SELECT STATEMENT  |      |     1 |     3 |     6   (0)| 00:00:01 |
  
|*  1 |  TABLE ACCESS FULL| T1   |     1 |     3 |     6   (0)| 00:00:01 |
  
--------------------------------------------------------------------------
  

  

  
Predicate Information (identified by operation id):
  
---------------------------------------------------
  

  
   1 - filter("N"=1)
  

  
2- Using SQL Profile
  
--------------------
  
Plan hash value: 1369807930
  

  
---------------------------------------------------------------------------
  
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  
---------------------------------------------------------------------------
  
|   0 | SELECT STATEMENT |        |     1 |     3 |     1   (0)| 00:00:01 |
  
|*  1 |  INDEX RANGE SCAN| IDX_T1 |     1 |     3 |     1   (0)| 00:00:01 |
  
---------------------------------------------------------------------------
  

  
Predicate Information (identified by operation id):
  
---------------------------------------------------
  

  
   1 - access("N"=1)
  

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

  
按照上面提示,输入下面的命令,接收这个SQL Profile:
  

  
SQL> execute dbms_sqltune.accept_sql_profile(task_name =>'my_sql_tuning_task_2', replace => TRUE);
  

  
PL/SQL procedure successfully completed.
  
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=1;
  

  
         N
  
----------
  
         1
  

  
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
  

  
PLAN_TABLE_OUTPUT
  
-------------------------------------------------------------------------------
  
SQL_ID  1kg76709mx29d, child number 1
  
-------------------------------------
  
select /*+ no_index(t1 idx_t1) */ * from t1 where n=1
  

  
Plan hash value: 1369807930
  

  
---------------------------------------------------------------------------
  
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  
---------------------------------------------------------------------------
  
|   0 | SELECT STATEMENT |        |       |       |     1 (100)|          |
  
|*  1 |  INDEX RANGE SCAN| IDX_T1 |     1 |     3 |     1   (0)| 00:00:01 |
  
---------------------------------------------------------------------------
  

  
Query Block Name / Object Alias (identified by operation id):
  
-------------------------------------------------------------
  

  
   1 - SEL$1 / T1@SEL$1
  

  
Outline Data
  
-------------
  

  
  /*+
  
      BEGIN_OUTLINE_DATA
  
      IGNORE_OPTIM_EMBEDDED_HINTS
  
      OPTIMIZER_FEATURES_ENABLE('10.2.0.5')
  
      ALL_ROWS
  
      OUTLINE_LEAF(@"SEL$1")
  
      INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."N"))
  
      END_OUTLINE_DATA
  
  */
  

  
Predicate Information (identified by operation id):
  
---------------------------------------------------
  

  
PLAN_TABLE_OUTPUT
  

  
   1 - access("N"=1)
  

  
Column Projection Information (identified by operation id):
  
-----------------------------------------------------------
  

  
   1 - "N"[NUMBER,22]
  

  
Note
  
-----
  
   - SQL profile "SYS_SQLPROF_01539fb60e15c000" used for this statement
  

  

  
45 rows selected.



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624857-1-1.html 上篇帖子: 搭建*** server 下篇帖子: 查看sql server数据库文件详细创建信息的sql语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表