希格工作室

2012年4月5日 星期四

網站效能的追源溯本(資料庫)

當你的網站慢了的時後,你第一時間會想什麼?

1.伺服器出問題?(IIS掛了?mem爆了?網域解析又出錯了? )
2.這支程式誰寫的?(又是xxx,快把他抓來罵)
3.大概是人太多了
4.大概是資料太多了
5.....
諸如此類的想法

如果這時候好死不死給上頭的知道了,一聲怒下,你就得開始狂查原因,翻遍所有程式,看遍所有server的設定,或狂打電話給中華電信,結果仍百思不得其解,最後上網GOOGLE,找到了許許多多網站調校的方法和建議,這當中往往都是叫你改程式,不然就再安裝新軟體,結果成本就又冒出一堆來了,只好冒死晉見老闆說要改程式(買軟體),然後被老闆白眼一頓後才核準,最後當你如願以償之後,卻發現上頭的還是跟你說一聲"喂!XXX怎麼還是那麼慢?",你可能會哭死

在你花時間改程式,加設備,搬資料,調整javascript,JPG,...,各種延遲載入,修改各介面的Response方式....諸如此類耗時費神的動作前,花個5~20分鐘重新看一下最根本的東西吧

資料庫

基本上我要講的對很多人而言是廢話,但卻又是最容易讓人遺忘的基本,資料庫是讓人塞資料用的,要塞資料一定會佔空間啊,所以你當時在建資料庫時給它多少空間?快滿時的成長空間又是多少?想想你從系統剛上線時到現在的大小差了多少?由此你就會知道你的資料存在硬碟裡到底有多散了...,越散當然越慢啊。

再來你的log檔(ldf)和資料庫檔(mdf)是不是放在同一個實體硬碟?如果是,把管資料庫的抓來痛揍一頓吧。

有無使用檔案群組(file group)功能?如果沒有,趕快用吧;如果有...麻煩看一下用到哪去了?你確定真的有正確使用?

多久沒重建你的索引了?

多久沒"完整"備份你的資料庫了?

最基本的基本...你用什麼東西當你的索引?都是varchar?甚至前面多個n? or table時不時有一堆null?別以為有些人建議varchar和char執行速度沒啥差別,null和非null也可省好多空間...當你增刪修改個N次後,你就又會知道你的資料到底又有多散了...

SQL的服務沒用到的裝了一堆?如MSSQL的Reporting Service之類的有真正用到再裝吧。

還有偶偶錄一下Profiler餵給Database Engine Tuning Advisor看看有啥要改善的吧

等到這些最基本的確定沒問題了,再去思考那些複雜的問題吧,因為資料破碎這種事,就跟燒開水一樣,你不燒它,你就沒水喝,你不燒它,你就沒電用(因為從那個放風箏被電到的人發現電以來,我們發電的方式依舊是燒開水),你不去注意破碎,你永遠被罵。

噓:回資料太多的都是廢話...除非你的DB每個都不知道多少個G...而且又同在一個instance

分享複雜的問題的參考資料:
DB:
網站效能分析操作心法-第8回-從資料庫來調校
網站效能分析操作心法-第9回-從資料庫來調校
OTHER:
快速揪出網站效能不佳的罪魁禍首

沒有留言:

張貼留言