【內容摘要】:
1.如何定位Top-SQL
方法:用ashrpt.sql
2.如何跟蹤
方法:用dbms_monitor工具
如果通過sql查詢某個工具的可用方法?
tkprof工具,直接鍵入命令後,會有提示出來。
3.解讀執行計劃
方法:set autotrace on/off
start ?/sqlplus/admin/plustrace.sql
trant plustrace to scott;
conn scott/tiger
set autot;
4.統計信息
cost(cpu%)|time 是重點分析數據。
執行順序:
從上往下
從右向左執行
動態採樣參數:optimizer_xxx_xxx
dynamic sampling used for this statement (level=2)
說明需要蒐集表信息;
查詢是否有蒐集表的信息:
select table_name,num_rows ,blocks from dba_user_tables where xxxx=xxx;
手動蒐集:dbms_static.gather_table_stats('user','xx',cascade=>true);
表的空間釋放
alter table xx move;
alter table xx shrink move;
alter table xx disable move;
用於消除高水位線所佔用的那部門空間。
5.全表掃描
5.1減少業務SQL複雜度
5.2增加塊的多塊讀 db_file_multiblock_read_count
5.3並行讀,增加提示/*+ parallel(e表的別我,4) */ 並行數的多少,可進行枚舉測試
5.4比較統計信息與真實數據量的差距(可加入統計信息,保證CBO的執行計劃準確性)
6.索引優化案例(實戰)
6.1查詢是否有索引
6.2如果沒有,新建;如果有,但沒有走,索引重建;
6.3建立索引的時候,爲更好地滿足業務場景,可建立升序可降序索引.
6.4如果查詢條件包括兩個,可以建立組合索引(重複值少的在前,重複值多的在後)
6.5 多表關聯查詢時,關聯條件要有索引,查詢條件要有索引;
7.直方圖案例(實戰)
7.1返回結果的總數小於2%,應走索引;否則,應全表掃描;
7.2desc dbms_stat
7.3需要在蒐集的時候,告訴直方圖的數據的蒐集規則(不要按頻率或高度來蒐集);
exec dbms_stats.gather_table_stats('scott','table',method_opt all columns size 1,cascade=>true,force=>true);
不要按頻率或高度來蒐集,而是按具體值的唯一值數量來蒐集。如男值、女值,而不男性的行的數量、女性的行的數量;
8.穩定執行計劃案例(實戰)
8.1走提示 hint;
8.2可以不改SQL,將原來的hint屏避掉;即固定執行計劃按人的意志;
step1: dbms_sqltune.create_tuning_task;
step2:執行優化的任務;
step3:查看優化的結果;
step4:dbms_xxxx_profile;
如果是10g以前,可以手動創建存儲大綱,然後將手動的替換原有的。