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