微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于 SAP HANA 数据库的死锁问题(deadlock)

一个朋友在我的知识星球里提问:

hana数据库发生死锁后,会自动解开吗?还是会等着自动超时后报错。

笔者在 15 年的 SAP 开发生涯中对 HANA 数据库接触得比较少,这里只能根据网络上搜索出的一些材料来回答。

首先,如果是 ABAP 服务器,当 sql 语句执行时出现死锁,会立即出现运行时异常,终止当前程序的执行:

关于 ABAP 死锁的介绍,参考笔者这篇文章ABAP面试题系列:写一组会出现死锁(Deadlock)的ABAP程序

回到 HANA 数据库的死锁介绍。

这篇文章采取了和 Jerry 上述文章里类似的思路,在 HANA 数据库里刻意制造一个死锁。

在这个 SAP Note 1999998 - FAQ: SAP HANA Lock Analysis 里提到,

死锁是两个或多个事务相互交叉锁定的情况,因此任何事务都无法继续进行。 通常死锁是由应用程序设计缺陷引起的,但在主键约束的上下文中也可能存在更多的技术死锁(这种情况请参考 SAP note 2429521)。

当 HANA 数据库出现死锁时,实际行为取决于死锁类型:

  • Transactional Lock: 如果 SAP HANA 识别出基于事务锁的死锁,其中一个事务将被终止并发出以下错误消息:

sql error 133: transaction rolled back by detected deadlock

这种行为不同于 Oracle 等其他数据库,后者的死锁只会终止当前的 DML 操作,而不是终止整个事务。

  • Internal Lock: 基于内部锁的死锁(详情查看 SAP Note 2304201)被视为 SAP HANA 的 issue,只能通过重启来解决

可以使用 HANA hdbcons 死锁检测器功能检查某些(但不是全部)internal lock,如 SAP Note 2222218 中所述:

hdbcons ‘deadlockdetector wg -w -o <file_name>.dot’

原文地址:https://cloud.tencent.com/developer/article/2181295

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐