SQL最佳化是Oracle資料庫中比較難的部分,需要對Oracle資料庫具備非常紮實的理論基礎。但是在剛開始接觸時,往往不能很好地將理論知識應用到實踐,或者有了一定的思路,又不自信或不敢確定是不是正確的。那麼如何入門將理論知識轉化為實踐經驗?本文介紹一下基於ADDM與SQL tuning的SQL最佳化,希望入門學習者能夠從中獲取一定的收穫。
使用ADDM定位SQL
如果你沒有從AWR中定位到需要最佳化的SQL,可以結合ADDM檢視分析。示例如下:
以上資訊描述SQL_ID XXXXXXXXXXX 99%用於CPU,I/O和群集等待已執行1094801次,並且平均執行時間為0。015秒。基於xxxx索引(object ID 2133671)的I/O和群集等待佔用資料庫時間的47%,建議使用SQL tuning進行最佳化分析。
使用SQL tuning進行分析
基於快照之間sql_id最佳化。
——1、建立任務
——2、執行任務
——3、查詢執行當前狀態
——4、 檢視最佳化結果
——5、刪除已經存在的最佳化任務,釋放資源
第4步中查詢SQL tuning建議內容如下:
繫結sql profile
SQL tuning的第一個建議是繫結推薦的profile,使用並行。但也提示使用parallel可能帶來的高資源消耗。最後部分可以看到未使用parallel與使用parallel DB time對比。
建立索引
第二個建議是建立索引,可以看到不同的執行計劃:
Plan hash value: 612724806,現使用執行計劃,Time為00:36:55;
Plan hash value: 2621731162,使用新的索引後,Time從00:36:55提升為00:05:53;
Plan hash value: 3522323416,使用並行後,Time從00:36:55提升為00:00:20。
透過以上資訊,可以對SQL的最佳化方向以及最佳化後的帶來的效益和資源有了一定的瞭解,並根據最佳化思路反推思考為什麼如此做。日積月累之下,相信大家都能夠對SQL最佳化有自己的理解。
你
「在看」嗎?