無論你寫了什么、做了什么、別人都覺得你沒啥的、寫得不好、不深入,給你潑N多冷水,但是往往這些潑冷水的家伙往往大多是狗屁不是的家伙,甚至大多是馬甲而已,有本事大家都多寫寫文章,用文章、用實力來證明寫得更好就足可以讓大家心服口服了。
1:今年公司里有一些人辭職了,他們大多都覺得在公司沒有發(fā)揮潛能的機會、沒被公司重視、沒給足夠高的薪水或者其它單位有更高的薪水。
2:公司有一個2000W條數(shù)據(jù)的Oralce查詢功能,運行速度有些緩慢,但是一直沒人能有效解決這個問題,或者對此沒啥興趣愛好。
3:有一部分人覺得,自己不是干數(shù)據(jù)庫技術的,有些人覺得這個事情不管他的事情,有些人覺得這個沒辦法解決,但是客戶的反應有些強烈。
4:這個事情也變成了老板、項目經(jīng)理、客戶經(jīng)理的一塊心病,甚至影響了整個項目的驗收及收款,我們只能迎難而上。
當老板把這個任務壓到我們開發(fā)部頭上時,我們逃也逃不掉,雖然我們平時是寫C#程序為主,但是數(shù)據(jù)庫性能優(yōu)化也只能由我們自己做:
當時覺得需要2周時間有希望能解決,1周熟悉業(yè)務及數(shù)據(jù)結(jié)構(gòu),另1周用來性能優(yōu)化,我也是新來的,對項目不熟悉、功能也不熟悉,所以覺得需要2周時間也是天經(jīng)地義的,但是老板說必須要解決這個問題而且只能給1周時間。
沒辦法的事情老板的命令下來了只能執(zhí)行,要們就丟這個飯碗,我就跟我們公司的一個搭檔承擔了這個攻堅任務。
曾經(jīng)很多年前,優(yōu)化過別人的MYSQL的數(shù)據(jù)庫查詢優(yōu)化,當時公司里有個牛B轟轟的程序員,覺得自己的數(shù)學水平高、編寫程序思路也很嚴,平時誰也不服,也不把別人放在眼里的那種,當他有一個數(shù)據(jù)量很大的程序運行效率比較低時,老板讓我看看是否能提高性能,我足足用了半個小時,優(yōu)化了他的SQL語句,結(jié)果性能提高了10倍,只用了1/10的運行時間就可以了,這次成功的SQL優(yōu)化,給了我很大的信心,而且開始對性能優(yōu)化有了很高的興趣。
后來幾年里看了很多數(shù)據(jù)庫方面的資料,但是一直沒遇到過能發(fā)揮實力的機會,也學了很多數(shù)據(jù)庫腳本編成,但是一直沒機會能露兩手,不過自己一直是對數(shù)據(jù)庫優(yōu)化很有信心了,平時也很自信。
但是最近幾年,心思沒在數(shù)據(jù)庫優(yōu)化上了,大多是用在“大規(guī)模編程系統(tǒng)架構(gòu)優(yōu)化”上,而且Oralce沒有用也有好幾年了,開始也不敢吹了,畢竟不是天天干這個的,時代發(fā)展得也快,新技術都沒留意過了。
自己沒信心了,那就先找找這方面的專家,看看人家有沒有什么好的建議吧,我和我的搭檔就開始這個痛苦的數(shù)據(jù)庫優(yōu)化工作了。
01:先找集團內(nèi)部的資源,找名氣比較大的專業(yè)的數(shù)據(jù)庫管理員,給了我們一些建議系統(tǒng)底層優(yōu)化的建議,對我們沒實質(zhì)性的進展,失敗。
02:只能硬著頭皮與同事們一起深入研究,發(fā)現(xiàn)SQL語句也很復雜,并沒有想象的那么簡單。
03:把比較復雜的SQL語句先分解成若干個簡單的SQL語句,運行、失望,性能影響不大,失敗。
05:里面有些多余的字段被SELECT出來的字段,去掉了,沒有明顯的進展,影響不大,失敗。
06:SELECT 出來的東西,再進行了SUM操作,感覺內(nèi)存里的處理數(shù)據(jù)過大,先進行SUM,再進行SELECT,沒有明顯的進展,影響不大,失敗。
07:把2000W條數(shù)據(jù)的表,拆開成若干個表,每個表達該500W條數(shù)據(jù),沒有明顯的進展,影響不大,失敗。
08:修改數(shù)據(jù)類型,把數(shù)值類型的長度、精度在變小點兒,影響不大,失敗。
09:數(shù)值類型比較,例如日期類型的比較,不要轉(zhuǎn)成字符再比較,人家已經(jīng)這么做了,沒漏洞。
11:查詢條件的先后順序調(diào)整,影響不大,失敗。
12:將過濾條件放到子語句里,選出來的數(shù)據(jù)盡量小一些,影響不大,失敗。
13:再看看索引,以前的開發(fā)人員索引設置得也比較合理,而且他們告訴我們,他們做測試優(yōu)化索引,耗時會更多,去掉索引反而還會好一些。
14:經(jīng)過這8個步驟,我是有些失望了、心情沉重,但是我不能把這個表現(xiàn)出現(xiàn),還是繼續(xù)表現(xiàn)得很自信,不管遇到什么困難,都需要給自己打氣、給自己信心,男人要堅強、只能靠自己了。
15:接下來足足想了一晚上,問題會出在哪里?數(shù)據(jù)庫的極限能力是多少?找誰咨詢?2000W條數(shù)據(jù)不應該是Oracle的性能瓶頸呀,問題應該是我們身上。
16:繼續(xù)堅信問題應該是在設置索引上,繼續(xù)把重點突破口放在深入索引設置上,按不同的組合、不同的索引方式進行優(yōu)化。
17:索引優(yōu)化后,奇跡出現(xiàn)了,性能提高了100倍,唉,這下不用丟飯碗了謝天謝地了,問題搞定了,可以給老板一個交待了,老天不想滅我們2個呀。
18:不管是干啥,都需要靠自己,不要指望靠別人能解決問題,關鍵時刻,一定要對自己時刻打氣、始終需要保持必勝的信念。
2000W條數(shù)據(jù)的性能優(yōu)化,我跟搭檔一起努力做到了,下一次目標是2億條數(shù)據(jù)的性能優(yōu)化瓶頸了,還是照樣需要有信心的。
去年做的是百萬元RMB級別的信息管理系統(tǒng),今年開始在做千萬元RMB級別的信息管理系統(tǒng),將來會是億元RMB級別的信息管理系統(tǒng)了,還是照樣需要有信心的。
每天、每年都在挑戰(zhàn)自己能力的極限,每年身心都會死三回,每次挺過來了都會升華三回,需要記住職場不同情弱者。
想要當個過硬的技術主管不僅需要有“心靈雞湯”、還需要拿實力證明的,老板不需要“心靈雞湯”。
以下是千萬級Oracle數(shù)據(jù)庫性能優(yōu)化的前后對比表,Oracle為什么那么值錢,唉、不服不行啊、這就叫科學技術,哪一天我若能做到了就是死也愿意了。
每個軟件公司都有很多問題在困擾著老板、客戶,只有能及時解決這些棘手問題的人,才是公司最需要的人才,很可能機會就擺在你眼前,其實你也可以的。
將權限管理、工作流管理做到我能力的極致,一個人只能做好那么很少的幾件事情。