幾年前,離開大公司加入一間規模不大的公司,這裡經常遇到資料庫伺服器CPU滿載的問題,當然工廠端的使用者不會開心的,抱怨電話當然是拼命的打,如果事後不高興,再向總部老板用電子郵件客訴那也不稀奇

人家說,觀念影響行動,態度決定高度,當時IT的在台主管認為程式是美國總部寫的,他也無從查起,只能按照要求去解決LOCK,如果實在機器不能動了,也只能在美國的同意下重開機,當時聽得出來,他心裡也有很多的不快,我想主要是參與感不夠的關係; 同時對於可能的原因,也開始了多方的揣測

只是在我好奇的詢問其揣測的數據基礎時,我才驚訝的發現,其實沒有人知道,在資料庫伺服器卡住的同時,是那些TOP SQL佔住了系統資源, 又伺服器是因為CPU LOADING重,還是MEMORY不夠,還是DISK IO不夠?? 反正,真的卡得都動不了,重開機就可以用就好了…

這向來不是我個人的行事風格,反正閒來無事,我就開始觀察,並且很勇敢的安裝監控程序在系統裡; 當然有人會說,那系統就很忙了,你還裝監控,那不是會掛掉??這的確是一個合理的推測,也有可能會發生,不過,如果你什麼都不做,你就永遠什麼都沒有機會知道!! 而且我總是認為,只有看到LOG,才能相信,其它不管你經驗多豐富,猜測的準確機率,也不是沒有,但絕不會是100%; 電腦的世界很笨,0就是0,1就是1,絕不會有0.5.

經過一段時間的觀察,這個系統其實也沒什麼大問題,它的最大問題有幾個

  1. transaction log 沒有清掉 : 因為不斷長大,大到10幾GB,而且設定為自動增長,當它愈大時,系統的DISK IO會變慢,因為在等它變大,尤其這又是一台虛擬化的SQL SERVER; 後來設定自動備份,維持小而美的LOG FILES就解決了.在DISK IO變慢的情況下,CPU就會看到100%,因為CPU在等..
  2. 有些INDEX沒建: 這就需要工具去找TOP SQL, 再針對其SQL去做優化或建INDEX. 其實微軟本身就有提供不錯的監控工具,如PERFORMANCE DASHBOARD,如我以下的示範.
  3. 有些LOG 及DATA FILE全放在同一磁碟機 : 其實這是不太好的系統配置,後來加入NAS去分擔DISK IO,系統就會跑得更順

經歷這些調整之後,果然後來CPU LOADING HIGH的情況,就減少很多了,抱怨也就減少

[fbvideo link=”https://www.facebook.com/kevin16888/videos/10208078958162575/” width=”800″ height=”600″ onlyvideo=”1″]

By Kevin

發佈留言