歡迎光臨
每天分享高質量文章

我眼裡的 DBA

作者:黃釗吉

網址:http://blog.csdn.net/dba_huangzj/article/details/7841441

點選“閱讀原文”可檢視本文網頁版

在專職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的觀點,當然,純屬個人經驗:

其實本文沒怎麼經過深思熟慮,只是一時興起就寫了。所以有不足之後多多包涵,並建議指出。謝謝。

贊(0)

分享創造快樂