愛伊米

聊聊SQL最佳化的基礎思路

聊聊SQL最佳化的基礎思路

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最佳化有自己的理解。

「在看」嗎?