Oracle數據庫SQL優化的最佳思路
如何在 Oracle數據庫里寫出高質量的SQL語句,如何在Oracle數據庫里對有性能問題的SQL做診斷和調整,這是DBA們在ORACLE數據庫實踐中不可避免的難題。下面就讓我們來分析一下拿到一條問題sql后DBA可以如何去開始優化思路。
對于有問題的SQL做SQL優化的具體步驟一般為:
1、查看該SQL語句的執行計劃,并結合其資源消耗情況和相關統計信息、Trace文件來分析其執行計劃是否合理;
2、通過修正措施(如調整該SQL的執行計劃等)來對該SQL做調整以縮短其執行時間,Oracle數據庫里SQL優化的終極目標就是要縮短目標SQL語句的執行時間。要達到上述目的,我們通常只有如下三種方法可以選擇:
1、降低目標SQL語句的資源消耗;
2、并行執行目標SQL語句;
3、平衡系統的資源消耗。
方法1:降低目標SQL語句的資源消耗”以縮短執行時間,這是DBA們最常用的SQL優化方法。這種方法的核心是要么通過在不更改業務邏輯的情況下改寫 SQL來降低目標SQL語句的資源消耗,要么不改SQL但通過調整執行計劃或相關表的數據來降低目標SQL語句的資源消耗。
方法2:并行執行目標SQL語句”,這實際上是以額外的資源消耗來換取執行時間的縮短,很多情況下使用并行是針對某些SQL的唯一優化手段。
方法3:平衡系統的資源消耗” 可以避免不必要的資源爭用所導致的目標SQL語句執行時間的增長。對某些SQL而言,其執行時間的增長或者不穩定(時快時慢)不是由于其執行計劃的問題,而是由于在目標SQL執行時系統處于高負荷狀態,執行目標SQL所需要的硬件資源(CPU、內存、IO等)得不到保障,存在爭用的情況。在這樣的情況下,如果DBA能平衡系統的資源消耗,把一些跟目標SQL同時執行的不重要但很消耗系統資源的操作(如報表、批處理等)挪到系統不忙的時候執行,比如把它們挪到晚上執行,那么就可以釋放部分系統硬件資源以確保目標SQL執行時所需要的硬件資源不再存在爭用的情況,進而就避免了其執行時間的增長或者不穩定。