第十六課
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;
/
升級