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