SAP HANA死锁检测的思路

关于死锁

死锁,英文deadlock,指两个或多个事物在同一资源上相互占用,并请求锁定对方占用的资源,从而大致恶性循环的现象,可查阅文章《什么是数据库死锁》。

HANA数据库如果发生死锁,通常需要Basis和业务顾问马上介入处理,否则有可能会导致数据不一致、同一张单据重复生成多次凭证、请求和任务处理异常缓慢、应用服务器无法正常使用等严重问题。

Basis从操作系统层和SAP应用层分析发生死锁的表和程序,业务顾问分析表相关的业务及可以采取的措施,协力快速处理此事。

死锁的常见原因

1.系统架构未充分考虑突发业务场景,未有效实施并行和队列管控

2.程序设计不合理,对数据库进行URD未做事务管理,未做锁定检测

3.后台作业设置不合理、系统缓慢等原因,导致同一任务相同时间内多个并发运行

4.外部请求量短时间内激增,导致系统缓慢,单个请求运行时间较长,从而引发假并发,导致死锁

5.前端系统不做输入控制,例如同一个单据像对方系统发起请求后在收到响应前允许反复提交

HANA数据库死锁检测思路

发生死锁时,如果能第一时间收到异常通知,就能尽快处理问题、减少损失,以下分享两种检测思路。

思路1:CCMS监控SM21

这种方法由SAP应用服务器的CCMS监控功能定时分析SM21日志,触发警告。关于CCMS的配置可参考文章《SAP CCMS系统异常监控自动邮件提示配置攻略》。

如下图所示为SM21的日志信息,可按一定频率读取SM21,然后分析消息号或关键字,采取相应的措施。

SAP HANA死锁检测的思路

思路2:监测HANA的日志文件

HANA的trace file里会打印详细的报错信息,包括发生死锁的表和程序,可定时读取日志文件并做关键字分析。

HANA的trace file路径为:/usr/sap/<SID>/HDB00/<hostname>/trace/<DB_DATABASE_ID>

主要是看indexserver的trc文件,用命令ls列出trc文件,然后看最新的那个:ls -lrt | grep indexserver.

如何有效避免死锁

对症下药,根据死锁发生的原因采取对应的措施,以下为基本思路:

1.系统及程序设计要充分考虑并发,做队列和频率管理

2.服务器架构要扛得住高峰期业务量,HANA考虑Scale out部署(MPP)

3.用户界面设计要有防呆操作,比如单据已提交未返回前不允许反复提交

4.后台作业相关的程序,要加入判断前序任务是否已完成的逻辑,再决定本次任务是否开始

如果强行解除死锁

1.临时冻结导致死锁的用户或临时停用导致死锁的接口,关门打狗

2.SM12,SM66,SM37强行终止死锁中的锁、进程和任务

3.HANA层面强行取消死锁中的连接和SESSION,SESSION和连接号从报错信息、HANA Studio、HANA trace file中获取

ALTER SYSTEM DISCONNECT SESSION ‘300412’

ALTER SYSTEM CANCEL SESSION ‘300410’

ALTER SYSTEM CANCEL WORK IN SESSION ‘300412’

如若转载,请注明出处:https://www.gavindong.com/7488.html

微信沟通
自2021年2月16日开始,全站文章免费阅读。