故障現象
某銀行總行 ATM 系統承載著全國 ATM 機渠道的 7×24 的聯機交易。在應用升級新版本后,數據庫開始并持續出現大量"enq:HW –contention" 即高水位的競爭,繼而導致交易響應時間從 20 毫秒漲至 300 毫秒, 交易出現大量阻塞,引起交易超時,影響范圍較大,屬于重大故障。
故障分析
中亦科技數據庫專家通過現場分析,發現由于應用報文長度發生較大改變,導致 Lob 字段從塊內存儲轉到塊外存儲,是產生問題的根本原因。
由于該變化,應用對Lob字段的修改,已從原來的undo表空間存儲前鏡像變為在Lob Segment 所在表空間來存儲前鏡像。即 undo 機制發生了變化,lob字段的修改將會使 LobSegment 所在表空間的空間的分配和回收異常頻繁,因此出現大量“enq:HW –contention”競爭,從而導致交易響應時間大幅增加。
解決方案
在短期無法修改應用程序的情況下,中亦科技數據庫專家基于對數據庫原理的深刻理解,提出將非分區表改造為 hash 分區表這樣大膽的解決方案,這樣原來的核心業務表將從一個 segment 改為多個 segment, 因此 enqueue 的個數從 1 個變為多個,從而消除競爭。
核心表從非分區改造為 hash 分區可使用在線重定義技術在線進行,從而達到不停機的目的。
客戶收益
在客戶接受并采用了在線重定義技術對相關核心表進行 hash 分區改造后,交易響應時間從 300 毫秒恢復至 20 毫秒,ATM 相關交易恢復正常,圓滿解決了這次重大故障。