1. 程式人生 > >1300多萬條數據30G論壇大數據優化實戰經驗小結

1300多萬條數據30G論壇大數據優化實戰經驗小結

用戶反饋 文章 千萬 身體 分析器 png 監視 重點 border

最近由於某大型網站社區論壇運行效率比較低用戶反饋論壇有些卡需要對系統進行優化,論壇性能影響了公司的形象還有網站的流量,當然這也會影響到公司的收入,而且後期還需要長期維護網站的社區論壇服務。

1:並發訪問的人多,其實訪問的人少,偶爾才被請求幾次頁面,那是性能一般不會受到多少影響,也沒什麽技術高要求湊合能用就可以了。

2:數據量龐大,訪問的人多了,自然數據積累也多了,持續幾年每天上千人留言後,這數據量就很龐大了。

3:系統穩定運行了好幾年,不能輕易修改,積累了不少個性化的業務數據、個性化的程序邏輯,也無法說更換論壇就可以更換論壇了,把這些邏輯都重新編寫一遍也不是那麽容易的。

4:普通ASP編寫的程序,技術有些老舊,不太好進行緩存優化,一些比較好用的asp.net的技術積累派不上用處。

5:硬件服務器成本需要控制,若是沒有預算限制,購買個超級強大的硬件服務器,程序寫得稍微垃圾也沒啥大問題,但是你這次購買了比較強大的服務器,1年後還需要買更強大的服務器才可以抵禦性能的下降,這個辦法幾乎是無節制的,若購買硬件服務器的費用節省了,可以聘請更優秀的開發人員為公司服務了,那不是更理想了。

其實這些事情對專業的DBA來說是小菜一碟,對我們平時以開發為主的程序員來說,優化上千萬條數據有時候就力不從心了。很多小公司難養得起一個專業數據庫DBA,專業DBA也不願去平時沒事幹的小公司工作,就是去了也會慢慢的水平退化,因為平時沒事情幹沒啥動力挑戰一個接一個的極限。

遇到的難題主要有這些:

1:當服務器有性能問題時,無法遠程操控。

2:現有的業務系統不能影響。

3:當服務器有性能問題時,做一個動作優化很困難,無法連續做好好幾個動作。

4:適當數據庫量龐大時,管理器無法用,只能通過編寫腳本進行處理。

5:數據量龐大時,一個動作可能需要2個小時才能完成,若一晚上做錯幾個動作,白忙一晚上了。

6:對現有的業務系統不熟悉。

7:對現有的論壇的功能,性能都不熟悉。

8:對ASP程序已經很陌生了。

9:天天在經營的網站不能被停機。

10:時間緊急,需要在幾天時間裏處理好。

11:沒有強大的測試環境,不大可能有那麽多好服務器。

12:數據量大,本地沒數據,數據都在服務器上,下載30G數據也不容易。

13:系統的功能也多,SQL語句也多,某個語句出錯後起連鎖反應,整個系統就崩潰,無法調試,無法控制,相對棘手一些。

14:別人能相信你,甚至鑒定的相信你,你有能力優化大數據的性能,也是需要勇氣的。

解決系統性能的方法,主要通過下面的方式:

1:周末加班,因為周末有安靜的環境可以分析數據,網站的流量也不大,惡劣的影響少一些。

2:深夜導數據,服務器性能好,效率高。

3:深夜優化數據結構,服務器性能好,效率高。

4:找幫手一起協助,有時候1個人顧得裏前面顧不來後面,人多力量大,特別是能幹活兒,技術過硬的家夥。

其中一個大表裏有13551695條數據,已經徹底上千萬條了。

技術分享圖片

檢查服務的各項性能

技術分享圖片

監視服務器上運行得所有SQL腳本,重點優化性能有問題的語句,通過修改ASP源程序進行優化。

技術分享圖片

在查詢分析器裏,分析語句的各項性能

技術分享圖片

修改數據類型,盡量用更短的數據類型,減少數據庫的磁盤占用空間

技術分享圖片

由於我們采用的是完整備份,這部分也跟金額沒多大影響的數據庫,所以采用簡單模式,減少日誌容量

技術分享圖片

收縮數據庫,減輕硬盤占用的多余空間,備份數據庫時可以節約一些硬盤空間

技術分享圖片

對大數據進行了分區處理,這樣也可以減輕數據庫的壓力,合理的分區可以顯著提升系統的性能。

技術分享圖片

索引有碎片時可以重新進行索引,提高數據庫的運行性能

技術分享圖片

經過優化後,數據庫的大小變成了原先的1/3,從接近30G,變成了10來G了,後來優化的到10G了。

技術分享圖片

技術分享圖片

經過3天的優化,服務器的性能消耗終於降下來了,不會100%了,謝天謝地,總算沒白折騰3天,也算可以給公司一個交代了,昏睡了整整一天,才稍微緩過勁兒來,年紀大了,不能總幹通宵了。真不是25歲那個時候了。

技術分享圖片

這個論壇書庫的服務器也很強大了,有16個CPU了,12G內存了,否則還真跑不來這麽多大的並發大數據的需求。

總結:

01:幹活需要有激情,不能逃避責任,需要勇於挑戰一個個職業上的極限。

02:前10年的技術積累,經驗積累是為了將來10年的工作打基礎的,沒前10年的努力,不會有今天的小成功。

03:技術上露一手的機會不是天天有,但是露一次可以解決2-3年的問題。

04:需要有良好的身體,通宵幹活,持續2天,也打不垮的身體,當然累了需要好好休息一下。

05:要有堅強的意誌,遇到什麽困難都不能慌,有計劃有目的的一個個擺平,你的意誌倒下,別人都跟風全趴下了。

06:不僅要能說,能寫,更需要能經得起實戰,是騾子是馬出來溜一溜就知道了。

07:水平再好,水平再差,需要有表達能力,能抓老鼠就是好貓,解決問題了就是技術牛人。

08:別人怎麽打擊怎麽鄙視怎麽辱罵,那是別人的事情,自己的日子需要自己過,走自己的路讓別人打擊去吧,需要有強勁的內心,經得起任何打擊、開開心心過自己的日子

09:寫文章的好處就可以得到網上各種高手的指點,更容易得到提高。

1300多萬條數據30G論壇大數據優化實戰經驗小結