故障现象
某银行总行 ATM 系统承载着全国 ATM 机渠道的 7×24 的联机交易。在应用升级新版本后,数据库开始并持续出现大量"enq:HW –contention" 即高水位的竞争,继而导致交易响应时间从 20 毫秒涨至 300 毫秒, 交易出现大量阻塞,引起交易超时,影响范围较大,属于重大故障。
故障分析
bat365中国官方网站数据库专家通过现场分析,发现由于应用报文长度发生较大改变,导致 Lob 字段从块内存储转到块外存储,是产生问题的根本原因。
由于该变化,应用对Lob字段的修改,已从原来的undo表空间存储前镜像变为在Lob Segment 所在表空间来存储前镜像。即 undo 机制发生了变化,lob字段的修改将会使 LobSegment 所在表空间的空间的分配和回收异常频繁,因此出现大量“enq:HW –contention”竞争,从而导致交易响应时间大幅增加。
解决方案
在短期无法修改应用程序的情况下,bat365中国官方网站数据库专家基于对数据库原理的深刻理解,提出将非分区表改造为 hash 分区表这样大胆的解决方案,这样原来的核心业务表将从一个 segment 改为多个 segment, 因此 enqueue 的个数从 1 个变为多个,从而消除竞争。
核心表从非分区改造为 hash 分区可使用在线重定义技术在线进行,从而达到不停机的目的。
客户收益
在客户接受并采用了在线重定义技术对相关核心表进行 hash 分区改造后,交易响应时间从 300 毫秒恢复至 20 毫秒,ATM 相关交易恢复正常,圆满解决了这次重大故障。