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