[尚觀]oracle SQL優化技術

【內容摘要】

          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以前,可以手動創建存儲大綱,然後將手動的替換原有的。

發佈了110 篇原創文章 · 獲贊 9 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章