售前電話
135-3656-7657
售前電話 : 135-3656-7657
關(guān)鍵業(yè)務(wù)系統(tǒng)的性能優(yōu)化對(duì)于企業(yè)的業(yè)務(wù)發(fā)展來說至關(guān)重要,在十五年前,我們給某運(yùn)營商做優(yōu)化的時(shí)候,當(dāng)時(shí)用戶說,因?yàn)橄到y(tǒng)性能的問題,營業(yè)廳排隊(duì)經(jīng)常排長隊(duì)。有一次中午午休的時(shí)候,還有十多名顧客沒有辦結(jié),于是客戶和營業(yè)員發(fā)生了沖突,把營業(yè)臺(tái)上的電腦都砸了。這個(gè)例子雖然十分極端,不過也從另外一方面說明了高效運(yùn)行的業(yè)務(wù)系統(tǒng)對(duì)企業(yè)核心業(yè)務(wù)的影響。前陣子去醫(yī)院做核酸檢測(cè),發(fā)現(xiàn)現(xiàn)在醫(yī)院已經(jīng)沒有了排長隊(duì)的問題,大量的自助服務(wù)終端替代了以往排著長隊(duì)的窗口。我發(fā)現(xiàn)了一處自助終端區(qū)沒什么人,跑過去發(fā)現(xiàn)這組終端都關(guān)閉了,于是無奈只能去有人排隊(duì)的終端辦理掛號(hào)。雖然前面只是排了兩個(gè)人,不過掛號(hào)的時(shí)間還是挺長,因?yàn)閽焯?hào)應(yīng)用十分慢。后來和醫(yī)院的熟人聊起這個(gè)事,他告訴我因?yàn)橄到y(tǒng)很慢,所以只好再增加一組自助終端,業(yè)務(wù)忙的時(shí)候開起來。我當(dāng)時(shí)就很奇怪,既然已經(jīng)增加了一組終端,為什么平時(shí)不開。他說這也是無奈之舉,那組終端開了,系統(tǒng)就更慢了his系統(tǒng)業(yè)務(wù)模塊,實(shí)際上總體來說也快不了多少,只是能讓排隊(duì)的每個(gè)隊(duì)伍短一些而已,所以平時(shí)排隊(duì)不是很長的時(shí)候,那組終端是關(guān)閉的。事實(shí)上,對(duì)于核心業(yè)務(wù)系統(tǒng)的問題,企業(yè)都是十分關(guān)注的,只是解決問題采用的手段不同而已。對(duì)于大多數(shù)傳統(tǒng)企業(yè)的核心業(yè)務(wù)系統(tǒng)的問題,很可能都與數(shù)據(jù)庫的性能有關(guān)。
特別是HIS之類的結(jié)構(gòu)比較簡單的系統(tǒng),大多數(shù)HIS系統(tǒng)都是開發(fā)的應(yīng)用,后面連了一個(gè)或者sql 數(shù)據(jù)庫。企業(yè)的核心系統(tǒng)的核心模塊往往都是比較穩(wěn)定的,只要確保這些核心模塊的性能穩(wěn)定,就能夠保證核心系統(tǒng)數(shù)據(jù)庫的性能穩(wěn)定。對(duì)于核心系統(tǒng)的核心業(yè)務(wù)模塊,花點(diǎn)功夫去保證其性能穩(wěn)定還是十分有價(jià)值的?;氐轿覀兘裉斓恼},如何才能確保核心業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫的性能穩(wěn)定呢?我們能夠通過哪些花費(fèi)不多的小技巧來確保核心業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫性能穩(wěn)定呢?其實(shí)我們只要重點(diǎn)關(guān)注三方的要素,就可以基本上保證核心系統(tǒng)數(shù)據(jù)庫的穩(wěn)定了。這三方面分別是:1)關(guān)鍵業(yè)務(wù)模塊SQL執(zhí)行計(jì)劃的穩(wěn)定性;2)數(shù)據(jù)庫服務(wù)器的IO延時(shí)穩(wěn)定性;3)保證足夠的物理內(nèi)存。首先,確保核心業(yè)務(wù)模塊SQL執(zhí)行計(jì)劃的穩(wěn)定性。數(shù)據(jù)庫應(yīng)用的突發(fā)性性能問題很多都是與執(zhí)行計(jì)劃的變化有關(guān)的。本來運(yùn)行的很好的SQL突然變慢,大多數(shù)情況下是與執(zhí)行計(jì)劃的變化有關(guān)的。對(duì)于很多大企業(yè)的核心系統(tǒng),在開發(fā)的時(shí)候,就對(duì)核心交易的SQL做了十分嚴(yán)格的代碼走讀,也規(guī)定了核心業(yè)務(wù)系統(tǒng)不能使用過于復(fù)雜的SQL,甚至在某些銀行,規(guī)定關(guān)鍵業(yè)務(wù)系統(tǒng)的核心交易相關(guān)的SQL不允許使用多張表關(guān)聯(lián)的語法。
通過SQL語句的優(yōu)化,可以解決大多數(shù)SQL執(zhí)行計(jì)劃突變的問題。另外一個(gè)確保執(zhí)行計(jì)劃穩(wěn)定的原則是針對(duì)核心業(yè)務(wù)相關(guān)的表的索引要做規(guī)范的設(shè)計(jì),不允許這些表上的索引亂用,系統(tǒng)上線后不允許在核心業(yè)務(wù)表上隨意建新索引。一張表上有多個(gè)相似的索引是引發(fā)錯(cuò)誤執(zhí)行計(jì)劃的常見因素,我們也遇到過多次因?yàn)樾陆ㄒ粋€(gè)索引而導(dǎo)致核心業(yè)務(wù)系統(tǒng)性能受到影響的案例。制定合理的數(shù)據(jù)歸檔計(jì)劃,定期歸檔核心業(yè)務(wù)數(shù)據(jù),確保核心業(yè)務(wù)數(shù)據(jù)表的容量緩慢線性增長是確保核心業(yè)務(wù)系統(tǒng)性能穩(wěn)定的另外一個(gè)好的方法。在二十多年前,銀行用戶就看到了核心業(yè)務(wù)表數(shù)據(jù)增長對(duì)性能的重大影響,因此都設(shè)計(jì)了十分完備的核心業(yè)務(wù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)與歸檔的方案。這三十年的實(shí)踐表明,這個(gè)方法是十分有效的。定期重建索引對(duì)于穩(wěn)定核心業(yè)務(wù)模塊的執(zhí)行計(jì)劃和提升關(guān)鍵業(yè)務(wù)模塊的性能的效果也是十分好的。十多年前,我給一家銀行做維保服務(wù)的時(shí)候,向他們的IT部門領(lǐng)導(dǎo)提出了這個(gè)觀點(diǎn)。剛開始雖然他們不太相信,不過依然做了一次嘗試。我們利用一個(gè)周末的晚上對(duì)所有核心業(yè)務(wù)相關(guān)的表上的索引做了一次,第二天統(tǒng)計(jì)出來的核心交易時(shí)間證明了,這次操作讓第二天的平均核心交易時(shí)間縮短了20%,從此他們就把這項(xiàng)工作做成了一個(gè)定期任務(wù),每隔三個(gè)月做一次。
這十多年堅(jiān)持下來,效果十分不錯(cuò)。與第一個(gè)問題相比,確保IO延時(shí)穩(wěn)定性的問題,大家可能考慮的并不多?,F(xiàn)在大部分核心系統(tǒng)的存儲(chǔ)系統(tǒng)較十多年前都有了巨大的性能提升,往往核心存儲(chǔ)的能力是足以支撐核心業(yè)務(wù)的。不過持續(xù)監(jiān)控核心業(yè)務(wù)系統(tǒng)的IO延時(shí),確保其穩(wěn)定維持在合理的范圍內(nèi)依然是十分重要的。從數(shù)據(jù)庫角度、操作系統(tǒng)角度和后端存儲(chǔ)角度三方面監(jiān)控核心系統(tǒng)IO延時(shí),一旦延時(shí)出現(xiàn)異常增長,則盡快找到原因,解決問題,對(duì)于確保核心系統(tǒng)性能也是十分關(guān)鍵的。十年前,一個(gè)銀行客戶升級(jí)存儲(chǔ)系統(tǒng),更換新存儲(chǔ)的時(shí)候因?yàn)槌杀締栴},把磁盤從老的3.5寸的 SAS盤換成了2.5寸的的SAS盤。新系統(tǒng)上線那天,業(yè)務(wù)部門發(fā)現(xiàn)日結(jié)操作的時(shí)間下降了50%,最后經(jīng)過分析,發(fā)現(xiàn)就是因?yàn)?0K的SAS盤的IO延時(shí)比15K的高30%左右,導(dǎo)致了日結(jié)業(yè)務(wù)的問題。發(fā)現(xiàn)問題的根源后,解決問題的方法也就容易制定了,臨時(shí)性的方案是擴(kuò)大DB CACHE,減少IO的總量,最終的方案是在本存儲(chǔ)上增加一組SSD盤,把和日結(jié)相關(guān)的數(shù)據(jù)放到新的磁盤組上。要確保IO延時(shí)的穩(wěn)定性,一定要加強(qiáng)對(duì)IO延時(shí)的監(jiān)控工作his系統(tǒng)業(yè)務(wù)模塊,從數(shù)據(jù)庫、操作系統(tǒng)和存儲(chǔ)端口三方面去監(jiān)控IO延時(shí),任何一方面出現(xiàn)問題都給予足夠的重視,找出問題的原因,是確保核心數(shù)據(jù)庫系統(tǒng)性能的又一個(gè)重要的工作。