16 - Oracle的SQL調優

第十六課

16、 SQL調優

在這裏插入圖片描述
在這裏插入圖片描述

一般情況下,效果最明顯的優化工作是SQL 優化。沒有很好地優化的SQL 會不必要地使用過多資源。
在這裏插入圖片描述
可以使用一組SQL 指導來確定和優化語句(單獨優化或集體優化)。
在這裏插入圖片描述
SQL Tuning Advisor:STA SQL優化指導
SQL Access Advisor:SAA SQL訪問指導
SQL Performance Analyzer:SPA SQL性能分析
SQL Tuning Set SQL調優集

統計信息收集:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
SPD:SQL計劃指令

select * from dba_sql_plan_directives;
select * from dba_sql_plan_dir_objects;

在這裏插入圖片描述
自適應執行計劃: 該特性讓優化器optimizer 可以在運行時(runtime)自動適配一個性能不良的執行計劃, 並避免在後續仍選擇該性能糟糕的執行計劃。
12.2參數:
optimizer_adaptive_plans=TRUE
optimizer_adaptive_statistics=FALSE

使用SQL指導:
在這裏插入圖片描述
SQL訪問指導、SQL優化指導、SQL修復指導

自動SQL優化結果:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
創建SQL調優集:
在這裏插入圖片描述

SQL Tuning Advisor:STA
SQL 優化指導分析單個 或多個SQL 語句, 並建議索引, SQL 概要文件, 重構的 SQL 和統計信息, 它們會改善 SQL 語句的性能。
執行以下分析:
 分析統計信息
 分析SQL
 訪問路徑:分析新建索引的影響
 分析結構
SQL優化指導可以使用EMDE。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
大表關聯查詢:

SELECT a.id, b.id
  FROM t a, t b
 WHERE a.id = b.id
       AND b.id = 500;

在這裏插入圖片描述
使用dbms_sqltune:

DECLARE
  task_name VARCHAR2(30);
  my_sqltext CLOB;
BEGIN
  my_sqltext := 'select max(object_id) from t';
  task_name := dbms_sqltune.create_tuning_task(sql_text => my_sqltext);
  dbms_output.put_line(task_name);
  dbms_sqltune.execute_tuning_task(task_name => task_name);
END;

select dbms_sqltune.report_tuning_task(‘任務_11’) from dual;

重複的SQL:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
SQL Access Advisor:SAA
SQL訪問指導主要對段結構使用工作負荷規範進行總體SQL性能的分析,優化指導給出建議比較少,訪問指導全面一些。
SQL優化指導有自己的API,但SQL訪問指導沒有,可以使用dbms_advisor.quick_tune。
SQL訪問指導的建議包括:
 索引(B樹、位圖、函數)
 物化視圖和物化視圖日誌
 分區策略
在這裏插入圖片描述
創建SQL優化集:

select * from t where id=4000001;
select * from table(dbms_xplan.display_cursor);
BEGIN
  dbms_advisor.quick_tune(dbms_advisor.sqlaccess_advisor
                         ,'task1'
                         ,'select count(*) from t');
END;

select * from user_advisor_actions;

create directory acc_scripts as '/u01/access';
grant read,write on directory acc_scripts to public;

BEGIN
  dbms_advisor.create_file(dbms_advisor.get_task_script('task1')
                          ,'ACC_SCRIPTS'
                          ,'acc.sql');
END;

CREATE MATERIALIZED VIEW LOG ON
    "OUZY"."T"
    WITH ROWID, SEQUENCE 
    INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW "OUZY"."MV$$_00270000"
    REFRESH FAST WITH ROWID
    ENABLE QUERY REWRITE
    AS SELECT COUNT(*) M1 FROM OUZY.T;

begin
  dbms_stats.gather_table_stats('"OUZY"','"MV$$_00270000"',NULL,dbms_stats.auto_sample_size);
end;
/

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
升級
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章