我眼里的DBA

作者: dba_huangzj  來源: CSDN  發布時間: 2014-07-24 11:36  閱讀: 9854 次  推薦: 81   原文鏈接   [收藏]  

  在專職DBA工作一年過一個月以后,開通了CSDN的博客專欄,在第一篇文章中,我談談一年DBA生涯的感想,雖然我是SQL Server的DBA,但是我覺得本文適合所有DBA,順便把這篇文章作為個人真正DBA的開端和指引:

  為什么要有DBA?

  對于大量小公司,是請不起DBA,而且也不是非常必須的。那么DBA這個職業是如何產生的?我也不懂,個人的猜測是,當你的應用系統和數據庫到達一定程度,就會面臨很多問題,專業術語稱之為:瓶頸。

  面對瓶頸,很多有經驗的開發人員或者其他崗位的人,可以應付,但不能保證都能應付,或者很好地解決,往往都只是治標不治本。因此,需要一個專職人員負責這部分工作。類似于系統管理員。試想你的公司有100臺服務器,上面有若干個操作系統(虛擬機可能會導致更多數量)。一個開發人員面對無休止的開發進度,就算有心,也無力。

  對于具有一定規模的企業,擁有一定數量的DBA和系統管理員是非常必要的。這能保證你的企業正常運作的前提下,達到各方面的最優化。

  何為DBA?

  畢業4年,做了3年開發,1年DBA,萌生成為DBA是在第二年末,看到DBA的前景比較好(有些地方把DBA描述成中醫,年紀越大越值錢,其實很有道理,經驗的確需要時間和經歷去積累),工資也相對高很多,并且在公司的地位也相對比開發人員高。加上個人開發水平不高,所以最終決定轉型為DBA,當時何為DBA?如何成為DBA?這些都還沒弄懂。

  后來,經過自己的堅持,終于當上了一個專職的DBA,從此開始自己的職業生涯。成為了DBA,面對的第一個問題就是:什么是DBA?其實就是說,要做些什么,才算一個DBA。

  DBA,中文:數據庫管理員,如其名,管理數據庫的人,但是僅僅這樣分析是不全面的,因為數據庫作為信息系統的核心,有著無法比擬的重要性。我的上司說過,DBA和系統管理員才是公司的核心,程序沒了,上傳一份就可以了,服務器掛了,重裝系統甚至買過硬件,也可以解決,但是數據庫沒了(其實就是數據沒了),對產品提供商或者客戶,都是毀滅性的打擊。不是每類數據都能重現或者重建。

  所以,作為DBA

首先,要有過硬的數據庫知識,包括管理、設計、開發等等。

其次,要懂得足夠多的或者說最起碼的服務器管理知識,操作系統知識,因為你的數據庫管理系統是運行在操作系統上的。

再者,由于絕大部分數據庫系統都配有前端應用程序,所以必要的程序語言要達到最起碼的了解級別。

還有,無論是外網還是內網系統,只要預算不會非常缺,一般數據庫服務器不應該存放任何其他應用。這種情況下,往往都是通過網絡傳輸來實現整個系統的應用和管理,所以網絡知識也是必要的。

最后,DBA不僅僅要和硬件、代碼打交道,也要和人打交道,試想如果你不懂得如何告訴開發人員某些功能存在問題,或者你不懂得如何向領導匯報,那么你的工作就會事倍功半,甚至有反效果。

  能滿足上面五點要求,你可以稱自己為“初級DBA”。至于中級、高級,那些的要求就很苛刻了。在此先不談。

  在我個人的工作經驗看來,DBA的工作粗略分為兩種:【管理】和【優化】。當然,這兩部分相輔相成又互相制約,不應該獨立看待。    

  對于【管理】:

首先,當然要讓服務器穩定、安全地運行。并且保證各方面的配置都能達到局部最優化。這里之所以說局部,是因為根據我的經驗,沒有一成不變的教條,也沒有所謂的絕對最優,只有最合適的方案。所以不要對一個執行幾乎不花時間的查詢花大力氣的優化,除非你發現這個查詢具有重大隱患。光是穩定和安全就已經有非常多的學問,將在后續穿插講解,另外,這兩點你要盡可能地向系統管理員學習。不求你有他們的等級,但是要盡可能接近,畢竟他們只需要關系服務器和操作系統,你除了這些之外還要關心數據庫。

然后,要充分利用好現有資源,除了政府和銀行這些企業之外,一般的企業就算再大,預算也是有限的,而且對于不懂計算機的人來說,可能覺得服務器、軟件等等都只是支出而不是收入,所以往往都看的比較輕。絕大部分DBA都必須面臨有限的資源。但是往往這就是你發揮的地方。很多開發人員不重視性能,總是寫一些“能用”的功能,最后往往因為資源不足而運行失敗。作為DBA,要把這些程序優化,使其達到一個【少】字,這部分放到優化說。

最后,要做好應急措施,往往問題就在你以為不會發生的時候發生。所以DBA首要任務是做好數據庫的備份(包括系統數據庫)。然后就是做高可用,使得數據庫能盡可能地保持不停機運作。然后就是做好一些自動化操作,比如自動、定期重建索引、清理備份文件等等。如果要細化DBA的工作事項,恐怕一萬字都遠遠不夠。所以這里僅僅是帶過一下,后續也會穿插闡述。

  對于【優化】:這是一個大課堂,足以寫好幾本書,而且也是基于【管理】部分。數據庫管理不好,你代碼質量再好,也是白搭。所以以下提到的是必須做到的:

首先,要有良好的編程規范,比如命名、注釋,這些必須強制實行,曾經看過一篇文章,說維護人員經常要花70%的時間都去讀一些沒有注釋的代碼。剩下的時間才去做優化,試想作為企業,這些成本是不可忽視的。

其次,結合【管理】部分,做好日常的維護及性能數據收集,任何一本好的優化書籍都會叫你先定好性能基線,一般就是正常運行的系統一些硬件數據。比如CPU、內存和I/O值。有了這些,你才有理據去告訴別人,你優化了。讓數據說話更有說服力。

然后,做好技術儲備,前面提到的,要有扎實的編程基礎,在這里就能體現,一個不會SQL編程的人或者不懂存儲過程是什么的人,如何去優化?畢竟優化大部分情況下是改寫寫法和調整索引、表結構等等。

再有,優化要有一定的原則,大拇指定律指出,80%的性能問題是由于20%的程序引起的,所以要針對這20%的程序做優化,并且優化的時候不要做到極端,卻要做到極致,一個查詢從2分鐘降到1秒鐘,其實你優化的空間已經不大了,基本上可以提交結果了。

最后,要經常總結,把經驗分享給開發人員,知識在你大腦里面,誰都搶不走,不應該害怕被別人替代,因為如果有天你面臨這個處境,只能說明兩種情況:1、領導故意找接班人,這樣的公司你不留也罷。2、你的水平的確比不上別人,你應該多學習,而不是去埋怨。分享的過程中,你也許會被指出很多不足,這也是你成長的另外一個動力。

  DBA應該怎么做:

  作為DBA甚至作為一個人,首先你要保證自己不斷進步,其實說白了就是不斷學習,實踐,再學習,再實踐。

  比較好的方式就是看書,目前我手上有不下50本書,包括電子書和實體書,我也在不斷收集一些DBA的書籍,有時候看著這些書名,卻有一種不知如何選擇的感覺。后來工作需要,挑了一些能快速解決問題的書或者文章來看(當然如果有時間,我還是強烈建議打好基礎),發現了絕大部分書籍和資料,其實描述的都是大同小異,只是側重點不同,甚至有些是標新立異而已。所以,選擇一些好的書籍,對入門很有幫助。如何入門?其實我也不好說啥,看個人,但是如果非要說一個方法,那我建議去考證。每個主流DBMS的廠商幾乎都有相關的證書,從考證的過程,你可以看到廠商希望專業的使用者應該具有什么水平,從中你可以得到一個大概,然后再深入了解。不要因為證書而讀書,那個只是你的一個指引,后面的路還長著。

  在不斷學習的過程中,要反復測試和驗證,陸游的【冬夜讀書示子聿】上的一句名言:紙上得來終覺淺,絕知此事要躬行。書上往往都是別人的經驗,會有意無意略掉一些細節,只有實踐了,你才會發現,知識也才會扎根你的大腦。而且書上的知識往往都是最后化了,很少出現問題,但是實際運用中,往往問題百出。

  最后,要有好的心態,個人覺得,DBA最重要的不是技術,而是冷靜,因為在幾乎所有人眼里,數據庫的問題你才是專家,你才能解決,你是別人的依靠。此時,一旦問題突然出現,你要先冷靜,沒有冷靜的大腦,很多簡單的問題卻會復雜化。結果往往事倍功半甚至失敗。有了冷靜的性格,還要謙虛,無論是任何職業,總有你的前輩在,為此,要不恥下問。當你成為大牛了。你就明白為什么了。

  本來有很多話說,但是萬言文往往效果不佳,所以我以一圖結束我的文章,在往后的文章里面,我會穿插闡述DBA的觀點,當然,純屬個人經驗:

  其實本文沒怎么經過深思熟慮,只是一時興起就寫了。所以有不足之后多多保函,并建議指出。謝謝。

81
4
 
標簽:DBA
 
 

文章列表

arrow
arrow
    全站熱搜

    大師兄 發表在 痞客邦 留言(0) 人氣()