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