sql优化的方法及思路_合理的sql优化思路--如何缩短SQL调优时间?
概述
當生產環境發生故障或者系統特別慢的時候,這時候你從awr報告拿到有問題的sql,但是優化的時候卻優化了很久還沒解決,這時候在領導或者客戶面前就不太好了。。。那么我們怎么去縮短sql調優的時間,一般優化的思路是怎樣呢?
1、先獲取有助調優的數據庫整體信息
如何縮短 SOL 調優時間,你的思路是什么呢?下面是當我要優化 SOL 時的一般流程:
首先要知道整個數據庫的運行情況,前面我已經介紹過數據庫 AWR 報告等調優工具,所以這里就不重復說明了,因為 AWR 報告等是在數據庫出問題時的利器。可是如果數據庫當前沒有 出問題呢?其實這個也不一定,很多時候系統沒問題是因為你沒觸發這個問題,其實是有問題的。
比 如某表的索引失效了,某 SOL 訪問該列時一定只能走全表掃描;比如某表的屬性被設置了并行度,這意昧著所有掃描該表的 SOL 都會并行執行,這;可能會產生嚴重的資源爭用從而讓系統癱瘓,比如你的全局臨時表被收集了統計信息,訪問該表的 SOL 就可能會出現錯誤的執行計劃等等。不過你的 AWR 報告卻可能發現不了這些問題,比如該時段和這些對象相關聯的 SOL 根本 就沒有執行。沒發現問題并不代表沒有問題,因此我們需要獲取所有可能有問題的對象,同時也需要獲取所有的相關時段的 AWR 等數據庫整體性能報告,獲取數據庫的整體信息。這里可以考慮用腳本去一鍵獲取,這樣就可以提高效率了。
2、快速獲取 SQL 運行信息
接下來,在獲取到數據庫整體信息后,調優的方向就非常明確了,對具體的 SOL 進行調優。執行計劃是 SOL 調優的重要武器,通過分析 SOL 計劃,我們可以判斷 SOL 的訪問路徑是否 高效,從而進行調整優化。關于執行計劃的獲取手段有 6 種之多,這是為啥呢?各有啥區別 呢?這部分內容也是在前兩天都做了介紹的,大家可以自己再看看。
還需要將執行計劃和運行時的統計信息結合在一起分析,這樣才會更準確。比如 SOL 產生 了多少邏輯讀,多少物理讀,是否有排序,是否有遞歸調用 , 等等。
3、快速拿到 SQL 關聯的信息
當獲取到 SOL 的執行計劃l后,很多都和該 SOL 對應的表和索引有關。比如當我們懷疑驅動表的順序有錯時,我們就會去看看這些表的實際大小和對應的統計信息是否準確;我們也關心表的類型是什么,比如是否是分區表,在哪個列有分區,分區的類型是什么,等等。
除了關注表的信息,我們也很關心索引的信息。比如看到執行計劃中非常適合走索引的查詢走了全表掃描,我們就會去看看是否該列無索引,如果發現有,就看看此列索引是否失效 了。一般我們也會關心索引的類型是什么,是 Btree 索引還是位圖索引還是函數索引;是單列索引還是組合索引,如果是組合索引,哪列在前,如果索引建在分區表上,我們還關心是全局索引還是局部索引,等等。
這里也可以用腳本將該 SOL 涉及的所有表和列的相關信息直接展現在我們面前,這樣,解決問題就非常高效了。
篇幅有限,今天主要分享下sql優化的整體思路,相關腳本抽空再單獨介紹下~
后面會分享更多關于DBA方面內容,感興趣的朋友可以關注下!
總結
以上是生活随笔為你收集整理的sql优化的方法及思路_合理的sql优化思路--如何缩短SQL调优时间?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据条件查询某条记录的条数_「性能与架构
- 下一篇: python保存代码需要删除头部信息吗_