註冊 | 登入 | RSS Feeds
ZDNet | Taiwan.CNET.com |

廣告:
80/20的trouble shooting策略

友善列印 | 轉寄朋友 | 加入HEMiDEMi網路書籤 | 加入funP | 加入Google書籤 | 加入Yahoo!奇摩分享書籤 | 3則回應
    
李信宏 2008/07/16 07:38:05 IT人員每天的日常工作,說穿了,不也就為了解決問題而生,只是解決的方式,是利用電腦科技而已。

假如您用了我前一篇所提的概念,找到問題的可能根本原因,那麼接下來所要做的,當然就是要解決問題。不過攤在您眼前的,可能要解決的部分不只一項。那您到底要從那個部分先著手呢?

根據統計顯示,任何一個需要用到資料庫系統的應用程式,它們一般所碰到的效能問題,80%以上都是導因於所撰寫的SQL指令效能不佳。因此我就藉著這個例子,來闡述我的概念。

坊間有一些工具軟體,可以幫助您蒐集到某個應用程式所使用到的完整SQL指令,以及它們執行時所耗費的時間和資統資源(CPU、磁碟I/O以及記憶體等 等)。根據這些資訊,您可以很快決定那個SQL指令是最急迫需要被解決的。

假設您所管理的系統效能問題,是由某個新導入的應用程式所引起。因此您利用工具軟體找到該應用程式所有曾執行過的SQL指令,並根據時間以及消耗資源來排序,發現某個複雜的SQL指令,在執行時居然需要一個小時以上,且所需要的CPU時間和記憶體用量都是名列前茅。

您滿懷欣喜,因為您找到了罪魁禍首。接下來您用了一個工作天,分析這個SQL指令、改寫、加上必要的索引、測試,確認新的SQL指令執行無誤後,取代了原來有問題的SQ指令。您鬆了一口氣,心想這個困擾己久的問題總算從工作清單上移除。

最努力的地方卻不一定有效果

不過使用者的回覆卻不是這麼一回事。他們回報:效能問題依舊存在,絲毫沒有任何改善。您直呼不可能,連忙調出工具軟體重新分析,從分析結果來看,您也確認先前的那個 SQL指令效能的確己經大幅改善,執行時間從一個小時降到不到一分鐘,理論上也應反映在系統效能上才對。

這時您不由得納悶,這到底是怎麼一回事?

難道問題沒解決嗎?單從SQL指令本身來看,效能問題的確是解決了,不過從整個系統面來看,效能問題的確也是沒獲得任何改善。究其原因,其實就是花工夫下去解決的,並不是真正需要被馬上被解決的。也就是說,整個優先順序搞錯了。

其實再深究下去,您可能會發現,您花許多時間精力去改善的SQL指令,是固定用來產生報表用的,每天僅執行一次,而且只在清晨一點開始執行。所以對一般系統的使用者來說,他們並無法感受到效能改善所帶來的好處,因為在他們白天的工作時間裡,並沒有碰到因為這支報表SQL指令而影響效能的問題。

相反的,真正影響白天效能的,可能是另一支需耗費二分鐘才能完成的查詢指令。因為這支查詢指令在每次使用系統時都一定會用到,而且執行頻繁,一旦上線人數較多,就很容易影響系統的整體效能。跟先前那支產生報表的SQL指令相比,解決這支查詢指令的SQL效能問題,在大部分情況下相對簡單。根據經驗,只要透過重建索引、或是更新系統的統計數值(Update Statistics),就有可能讓效能從兩分鐘降到不到一秒。從系統反應時間來看,使用者可以立即感受到效能改善。

找出問題的優先順序

遇到問題時,系統管理員應該先找出數項可能因素再排出優先順序著手。我所舉的例子,就是要看問題發生的頻率以及時間點,而非一般人的直覺反應,只看問題單一面相來判斷root cause。若你只是從系統資源耗損的觀點來解決問題,而忽略其它需要考慮的重要因素,像是執行頻率以及被執行的時間,那麼您可能會落入難以自拔的困境。

這是一個可以用來解釋 80/20法則的很好例子:影響系統效能80%的問題,可能來自於20%的因素。只要著眼於這20%上來解決,那麼您可以立即收到80%以上的改善。而在一些情況下,這20%的因素又可能只花費您不到兩成的時間以及精力就可以解決。所以如何判斷問題解決的優先順序,對您的工作來說,影響甚鉅。

在系統效能的最佳化過程當中,您永遠都可以找到前面20%需要解決的問題,只是在這不斷循環的過程當中,您所得到的邊際效益一定會遞減。將一個SQL指令的 執行時間,從0.01秒改善到0.0001秒,雖然這樣的改善幅度有一百倍以上,但是對一般用者來說,他們的感受卻是微乎其微。因此是否一定要達到效能的 絕對最佳化,那就由各位自行決定了。

作者現任庫柏資訊研發經理,美國休士頓大學(University of Houston)資工系畢業。有產品開發、系統整合、專案管理、技術顧問以及技術客服經驗。專精於系統管理。閒暇時醉心於摩托車運動,現擁有中華民國賽車協會新手執照。
加入我的圖書館 訂閱關鍵字
加入網路書籤> 加入HEMiDEMi網路書籤 | 加入funP | 加入Google書籤 | 加入Yahoo!奇摩分享書籤 |
友善列印 | 轉寄朋友


  • 3.超級SA 於 2008/08/01 11:21 回應
    非常同意1樓說的
    我本身是系統管理者
    我們公司搞AP的超沒SENSE
    會跑來問我說,Java,Oracle 到底在忙些什麼?
    比如 JAVA 的Process 佔了CPU% 85%,那JAVA到底再忙啥?!

    靠!我那知道你們的JAVA在忙啥阿!
    我知道的話,就可以替代掉你的們的職位了!
    真是一群超級沒SENSE沒功力又愛亂放泡的AP跟DB 三角貓!
  • 2.xenophon566 於 2008/07/22 15:05 回應
    亞當斯定律
  • 1.事實 於 2008/07/16 09:32 回應
    如果資料庫程式設計人員,都能有如此的自知就好了
    就不會一天到晚怪罪系統不穩定、系統被放木馬、懷疑硬體效能過慢...

    太多的所謂寫程式的小工程師,你們的工作並不是把程式碼編出來丟到主機而已
    而是你們該對主機的運作,有某種程度以上的了解


留下你的意見
會員 * 帳號:
* 密碼:
  1. 欄位可選填,若全不填,則顯示為「匿名」。
  2. 不支援html語法
非會員 姓名:
E-Mail:
Blog:
  重新載入驗證碼
* 驗證碼: 記住我




廣告

名家專欄

更多名家專欄
Sponsored
利用可靠和高效的NonStop刀鋒技術,達成持續不斷的可用性
 
+ 關鍵任務作業專用刀鋒
+ 更輕易管理虛擬化
+ 更有效控管能源,進而降低能源成本

研討會中心

廣告


Sponsored

活動快訊