博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何验证SQL PROFILE的性能?
阅读量:6970 次
发布时间:2019-06-27

本文共 9596 字,大约阅读时间需要 31 分钟。

如何检验sql profile的性能 10g以后的sql tuning advisor(可以通过Enterprise Manager或DBMS_SQLTUNE包访问)会给出对于SQL的建议包括以下四种: 1. 收集最新的统计信息 2. 彻底重构该SQL语句 3. 创建推荐的索引 4. 启用SQL TUNING ADVISOR找到的SQL PROFILE 这里我们要注意的是在production环境中显然不可能让我们在没有充分测试的前提下随意为SQL接受一个PROFILE,因为这可能为本来就性能糟糕而需要调优的系统引来变化。 但是如果恰巧没有合适的TEST环境,而你的SQL PROFILE又可能是性能压力的救命稻草时,我们可以使用以下方法在production环境中局部测试SQL PROFILE,仅在session级别生效:    
Oracle Database 12c Enterprise Edition Release 12.1.0.0.2 - 64bit BetaWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> create table profile_test tablespace users as select * from dba_objects;Table created.SQL> create index ix_objd on profile_test(object_id);Index created.SQL> set linesize 200 pagesize 2000SQL>  exec dbms_stats.gather_table_stats('','PROFILE_TEST');PL/SQL procedure successfully completed.SQL> set autotrace traceonly;SQL>  select /*+ FULL( profile_test) */ * from profile_test where object_id=5060;Execution Plan----------------------------------------------------------Plan hash value: 663678050----------------------------------------------------------------------------------| Id  | Operation         | Name         | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------|   0 | SELECT STATEMENT  |              |     1 |   113 |   408   (1)| 00:00:01 ||*  1 |  TABLE ACCESS FULL| PROFILE_TEST |     1 |   113 |   408   (1)| 00:00:01 |----------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter("OBJECT_ID"=5060)Statistics----------------------------------------------------------          0  recursive calls          0  db block gets       1471  consistent gets          0  physical reads          0  redo size       1779  bytes sent via SQL*Net to client        543  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          1  rows processed		  f3v7dxj4bggvqTune the sql~~~~~~~~~~~~GENERAL INFORMATION SECTION-------------------------------------------------------------------------------Tuning Task Name   : TASK_226Tuning Task Owner  : SYSWorkload Type      : Single SQL StatementScope              : COMPREHENSIVETime Limit(seconds): 1800Completion Status  : COMPLETEDStarted at         : 11/30/2012 13:13:27Completed at       : 11/30/2012 13:13:30-------------------------------------------------------------------------------Schema Name   : SYSContainer Name: CDB$ROOTSQL ID        : f3v7dxj4bggvqSQL Text      :  select /*+ FULL( profile_test) */ * from profile_test where                object_id=5060-------------------------------------------------------------------------------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: 99.79%)  ------------------------------------------  - Consider accepting the recommended SQL profile.    execute dbms_sqltune.accept_sql_profile(task_name => 'TASK_226',            task_owner => 'SYS', replace => TRUE);  Validation results  ------------------  The SQL profile was tested by executing both its plan and the original plan  and measuring their respective execution statistics. A plan may have been  only partially executed if the other could be run to completion in less time.                           Original Plan  With SQL Profile  % Improved                           -------------  ----------------  ----------  Completion Status:            COMPLETE          COMPLETE  Elapsed Time (s):             .005407           .000034      99.37 %  CPU Time (s):                 .004599                 0        100 %  User I/O Time (s):                  0                 0  Buffer Gets:                     1470                 3      99.79 %  Physical Read Requests:             0                 0  Physical Write Requests:            0                 0  Physical Read Bytes:                0                 0  Physical Write Bytes:               0                 0  Rows Processed:                     1                 1  Fetches:                            1                 1  Executions:                         1                 1  Notes  -----  1. Statistics for the original plan were averaged over 10 executions.  2. Statistics for the SQL profile plan were averaged over 10 executions.-------------------------------------------------------------------------------EXPLAIN PLANS SECTION-------------------------------------------------------------------------------1- Original With Adjusted Cost------------------------------Plan hash value: 663678050----------------------------------------------------------------------------------| Id  | Operation         | Name         | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------|   0 | SELECT STATEMENT  |              |     1 |   113 |   408   (1)| 00:00:01 ||*  1 |  TABLE ACCESS FULL| PROFILE_TEST |     1 |   113 |   408   (1)| 00:00:01 |----------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter("OBJECT_ID"=5060)2- Using SQL Profile--------------------Plan hash value: 2974300728----------------------------------------------------------------------------------------------------| Id  | Operation                           | Name         | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT                    |              |     1 |   113 |     2   (0)| 00:00:01 ||   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| PROFILE_TEST |     1 |   113 |     2   (0)| 00:00:01 ||*  2 |   INDEX RANGE SCAN                  | IX_OBJD      |     1 |       |     1   (0)| 00:00:01 |----------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   2 - access("OBJECT_ID"=5060)-------------------------------------------------------------------------------    execute dbms_sqltune.accept_sql_profile(task_name => 'TASK_226',task_owner => 'SYS', replace => TRUE,category=>'MACLEAN_TEST');		  SQL> set autotrace on;SQL> select /*+ FULL( profile_test) */ * from profile_test where  2                  object_id=5060;1 row selected.Execution Plan----------------------------------------------------------Plan hash value: 2974300728----------------------------------------------------------------------------------------------------| Id  | Operation                           | Name         | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT                    |              |     1 |   113 |     2   (0)| 00:00:01 ||   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| PROFILE_TEST |     1 |   113 |     2   (0)| 00:00:01 ||*  2 |   INDEX RANGE SCAN                  | IX_OBJD      |     1 |       |     1   (0)| 00:00:01 |----------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   2 - access("OBJECT_ID"=5060)Note-----   - SQL profile "SYS_SQLPROF_013b5177cf260000" used for this statementStatistics----------------------------------------------------------        275  recursive calls          0  db block gets        130  consistent gets          1  physical reads          0  redo size       1783  bytes sent via SQL*Net to client        543  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client         27  sorts (memory)          0  sorts (disk)          1  rows processedSQL> SQL> alter session set sqltune_category=DEFAULT;Session altered.SQL> select /*+ FULL( profile_test) */ * from profile_test where object_id=5060;1 row selected.Execution Plan----------------------------------------------------------Plan hash value: 663678050----------------------------------------------------------------------------------| Id  | Operation         | Name         | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------|   0 | SELECT STATEMENT  |              |     1 |   113 |   408   (1)| 00:00:01 ||*  1 |  TABLE ACCESS FULL| PROFILE_TEST |     1 |   113 |   408   (1)| 00:00:01 |----------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter("OBJECT_ID"=5060)Statistics----------------------------------------------------------          1  recursive calls          0  db block gets       1471  consistent gets          0  physical reads          0  redo size       1779  bytes sent via SQL*Net to client        543  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          1  rows processed
    以上我们通过sqltune_category将SQL PROFILE的作用域限定在session级别,实现了对SQL PROFILE的性能测试。

转载地址:http://wjfsl.baihongyu.com/

你可能感兴趣的文章
intellij idea 用法
查看>>
Fabric项目学习总结
查看>>
【转】sqlserver临时表操作
查看>>
计算机等级考试成绩查询系统的设计与实现vfp
查看>>
android:exported 属性详解
查看>>
AT907 心配性な富豪、ファミリーレストランに行く。
查看>>
查询窗体的制作
查看>>
正则表达式详解<一>
查看>>
dede会员中心修改
查看>>
腾讯工蜂Git关联Jenkins Hooks
查看>>
iscroll API
查看>>
数组查询和冒泡排序算法
查看>>
Android打开新的Activty不传递参数
查看>>
iOS书籍源码免费下载 关老师 作品《iPhone与iPad开发实战—iOS经典应用剖析》
查看>>
字符编码
查看>>
Git学习-Git时光机之版本回退(二)
查看>>
POJ 3080, Blue Jeans
查看>>
[翻译] V8引擎的解析
查看>>
C# 数据库连接字符串拼接
查看>>
css
查看>>