轉自:https://blog.csdn.net/dba_huangzj/article/details/7841441前端
在專職DBA工做一年過一個月之後,開通了CSDN的博客專欄,在第一篇文章中,我談談一年DBA生涯的感想,雖然我是SQL Server的DBA,可是我以爲本文適合全部DBA,順便把這篇文章做爲我的真正DBA的開端和指引:數據庫
對於大量小公司,是請不起DBA,並且也不是很是必須的。那麼DBA這個職業是如何產生的?我也不懂,我的的猜想是,當你的應用系統和數據庫到達必定程度,就會面臨不少問題,專業術語稱之爲:瓶頸。編程
面對瓶頸,不少有經驗的開發人員或者其餘崗位的人,能夠應付,但不能保證都能應付,或者很好地解決,每每都只是治標不治本。所以,須要一個專職人員負責這部分工做。相似於系統管理員。試想你的公司有100臺服務器,上面有若干個操做系統(虛擬機可能會致使更多數量)。一個開發人員面對無休止的開發進度,就算有心,也無力。安全
對於具備必定規模的企業,擁有必定數量的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秒鐘,其實你優化的空間已經不大了,基本上能夠提交結果了。
最後,要常常總結,把經驗分享給開發人員,知識在你大腦裏面,誰都搶不走,不該該懼怕被別人替代,由於若是有天你面臨這個處境,只能說明兩種狀況:一、領導故意找接班人,這樣的公司你不留也罷。二、你的水平的確比不上別人,你應該多學習,而不是去埋怨。分享的過程當中,你也許會被指出不少不足,這也是你成長的另一個動力。
做爲DBA甚至做爲一我的,首先你要保證本身不斷進步,其實說白了就是不斷學習,實踐,再學習,再實踐。
比較好的方式就是看書,目前我手上有不下50本書,包括電子書和實體書,我也在不斷收集一些DBA的書籍,有時候看着這些書名,卻有一種不知如何選擇的感受。後來工做須要,挑了一些能快速解決問題的書或者文章來看(固然若是有時間,我仍是強烈建議打好基礎),發現了絕大部分書籍和資料,其實描述的都是大同小異,只是側重點不一樣,甚至有些是標新立異而已。因此,選擇一些好的書籍,對入門頗有幫助。如何入門?其實我也很差說啥,看我的,可是若是非要說一個方法,那我建議去考證。每一個主流DBMS的廠商幾乎都有相關的證書,從考證的過程,你能夠看到廠商但願專業的使用者應該具備什麼水平,從中你能夠獲得一個大概,而後再深刻了解。不要由於證書而讀書,那個只是你的一個指引,後面的路還長着。
在不斷學習的過程當中,要反覆測試和驗證,陸游的【冬夜讀書示子聿】上的一句名言:紙上得來終覺淺,絕知此事要躬行。書上每每都是別人的經驗,會有意無心略掉一些細節,只有實踐了,你纔會發現,知識也纔會紮根你的大腦。並且書上的知識每每都是最後化了,不多出現問題,可是實際運用中,每每問題百出。
最後,要有好的心態,我的以爲,DBA最重要的不是技術,而是冷靜,由於在幾乎全部人眼裏,數據庫的問題你纔是專家,你才能解決,你是別人的依靠。此時,一旦問題忽然出現,你要先冷靜,沒有冷靜的大腦,不少簡單的問題卻會複雜化。結果每每事倍功半甚至失敗。有了冷靜的性格,還要謙虛,不管是任何職業,總有你的前輩在,爲此,要不恥下問。當你成爲大牛了。你就明白爲何了。
原本有不少話說,可是萬言文每每效果不佳,因此我以一圖結束個人文章,在日後的文章裏面,我會穿插闡述DBA的觀點,固然,純屬我的經驗:
其實本文沒怎麼通過深思熟慮,只是一時興起就寫了。因此有不足以後多多保函,並建議指出。謝謝。