乐趣区

关于sap:关于-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’

退出移动版