SQL*PLUS下使用AUTOTRACE、sql顧問、實時sql監控

高級SQL優化(三) 經常使用優化工具 ——《12年資深DBA教你Oracle開發與優化——sql

高級SQL優化(一) ——《12年資深DBA教你Oracle開發與優化——性能優化部分性能優化

1 autotrace
工具

set autotrace on性能

 

2 使用SQL調優顧問優化

刪除掉bigtab和smalltab上的全部索引:spa

declareblog

  my_task_name varchar2(30);索引

  my_sqltext clob;ip

  begin開發

    my_sqltext := 'select count(*) from bigtable a, smalltable b where a.object_name=b.table_name';

    my_task_name := DBMS_SQLTUNE.create_tuning_task(

    sql_text => my_sqltext,

    user_name => 'ZJ',

    scope => 'COMPREHENSIVE',

    time_limit => 60,

    task_name => 'bigtable_jointo_smalltab_sql',

    description => '優化smalltable 和 bigtable鏈接的例子');

    Dbms_Sqltune.execute_tuning_task(task_name => 'bigtable_jointo_smalltab_sql');

   end;

   建立完成後驗證是否完成:

select task_name,status from user_advisor_log where task_name = 'bigtable_jointo_smalltab_sql';

也能夠經過SQL語句來查看結果,此方法是咱們最喜歡的方法:

 select dbms_sqltune.report_tuning_task('bigtable_jointo_smalltab_sql') from dual;

 

/*  依據優化結果建立索引*/

create index idx_smalltable_tablename on smalltable(table_name) tablespace users;

create index idx_bigtable_tablename on bigtable(object_name) tablespace users;

 

3  實時SQL監視

   實時SQL監視(real-time SQL Monitorning)是Oracle 11g的另一個新功能,其做用是容許用戶監視正在執行的SQL。默認狀況下,當使用並行查詢、或者當SQL執行的CPU或I/O超過5秒鐘時會自動啓動。

也能夠使用優化提示強制使用實時SQL監視功能,以下:

  select /*+ monitor */

   count(*)

    from bigtab a, smalltab b

   where a.object_name = b.table_name

  若是要強制不使用實時SQL監視功能,則也能夠使用優化提示:

         select /*+ no_monitor */

   count(*)

    from bigtab a, smalltab b

   where a.object_name = b.table_name

 

   與實時SQL監視相關的系統視圖包括:

uV$SQL_MONITOR

uV$SQL_PLAN_MONITOR

uV$ACTIVE_SESSION_HISTORY

uV$SESSION

uV$SESSION_LONGOPS

uV$SQL

uV$SQL_PLAN

 

對於剛剛監視的結果,能夠使用DBMS包讀取:

select dbms_sqltune.report_sql_monitor from dual;

相關文章
相關標籤/搜索