医院业务软件健康管理实战案例分享
Posted 极简智能
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了医院业务软件健康管理实战案例分享相关的知识,希望对你有一定的参考价值。
不当人工操作造成的锁等待事件
据数据显示:医院分钟级非空闲等待(锁等待)主因集中于两大领域,本次主要分享不当的人工操作。
1、不当的人工操作:开发人员操作、建索引、报表统计、备份系统……
2、程序质量不佳(代码、结构)造成的锁等待事件80%集中于长事务长事务造成、缺失索引造成……
(一)人工不当操作造成的阻塞事件特征
- 通常表现为由运维或开发人员操作开发\\运维管理工具引起
- 报表统计---产生全表/全区扫描
- 创建\\重构索引---锁表
- 数据导入\\导出---锁表
- 数据备份---锁表
- 更易造成长时间的应用程序卡慢、乃至应用失效事件
- 无法通过业务运行趋势进行早期预测
(二)使用全景软件发现并定位不当人工操作造成的阻塞问题
真实案例1
(1)问题发现:登录全景软件——问题溯源模块,发现2021-12-0817时左右,系统产生了持续40分钟左右的阻塞问题。
图1:问题溯源界面
问题溯源界面说明:问题溯源界面是全景软件根据内置触发算法生成的,用于记录突发问题及溯源信息的功能模块。不同颜色的方格表示不同问题种类,横纵坐标以小时/日期的方式展示了问题发生的时间,问题方格中的数字表示问题持续的分钟数(该小时内)。
图2 阻塞信息展示
(2)阻塞关系溯源:通过点击“阻塞链图”,展示阻塞与被阻塞的逻辑关系,发现是由PID为861的进程阻塞了PID为583的进程。
图3 阻塞逻辑关系图(桑基图)
(3)进程信息查看:通过进一步下钻发现,阻塞会话PID861由PlsqlDeveloper发起。这是开发人员使用的PL/SQL开发工具。相关人员在使用PL/SQL开发工具,执(begin语句是plsql工具会自动额外执行的语句)行SQL语句,其中有一条语句对z_lcfujian表上产生的锁,该锁会一直存在直到事务结束才会释放。这就造成了锁存在的时间比较长,当有其他会话去访问该表时,就产生了锁等待事件,这是造成此次应用堵塞事件的根本原因。
图4 进程详细信息
真实案例2
(1)问题发现:登录全景软件——问题溯源模块,发现2021-11-13 12时左右,系统产生了持续7分钟左右的阻塞问题。
图5 问题溯源界面
图6 阻塞信息展示
(2)阻塞关系溯源:通过点击“阻塞链图”,展示阻塞与被阻塞的逻辑关系,发现是由PID为997的进程阻塞了PID为1039、900、543、380、204、88、756的进程。
图7 阻塞逻辑关系图(桑基图)
(3)进程信息查看:通过进一步下钻发现,阻塞会话PID8997由Microsoft Windows Operating System发起。这是开发人员使用的SqlServer管理工具。相关人员在使用执行SQL语句,其中有一条语句对mz_patient_mi表上产生的锁,该锁会一直存在直到事务结束才会释放,这就造成了锁存在的时间比较长。当有其他会话去访问该表时,就产生了锁等待事件,这是造成此次应用堵塞事件的根本原因。
图8 进程详细信息
真实案例3
(1)问题发现:登录全景软件——问题溯源模块,发现2021-11-0312时左右,系统产生了持续37分钟左右的阻塞问题。
图9 问题溯源界面
图10 阻塞信息展示
(2)阻塞关系溯源:通过点击“阻塞链图”,展示阻塞与被阻塞的逻辑关系,发现是由PID为724的进程阻塞了PID为746的进程;PID763的进程阻塞了PID为802的进程。
图11 阻塞逻辑关系图(桑基图)
(3)进程信息查看:通过进一步下钻发现,阻塞会话PID724,763由Microsoft SQLServerManagement Studio发起的数据库备份任务,数据库在执行备份任务时,会对涉及到的表上锁,此时如果有涉及到相关表的业务执行时,会遇到阻塞。
图12 进程详细信息
问题处置建议
对于此类不当人工操作造成的阻塞问题,通常有如下建议:
(1)通知相关程序使用者,结束该事务或由数据库管理员杀掉此进程,阻塞即可解除。
(2)尽量避免在业务时间段进行备份作业,最好将此类任务放在夜间非业务时间段执行。
(3)使用行政手段,加强管理。规范开发人员在核心系统上操作行为,如无必要开发人员不应在业务高峰期进行开展影响代码逻辑的操作,尤其是慎重在生产环境执行加锁的操作。类似的行为和操作在不久前曾造成郑大一附院系统停机两小时,800万经济损失,相关信息可参见媒体或百度搜索,因此,务必重视。
下期分享
医院业务软件健康管理实战案例分享(二)
---程序质量造成的锁等待事件
以上是关于医院业务软件健康管理实战案例分享的主要内容,如果未能解决你的问题,请参考以下文章