关于 SAP HANA 数据库的死锁问题(deadlock)
2023-09-14 09:03:51 时间
一个朋友在我的知识星球里提问:
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’
相关文章
- 关于 sap.ui.base.Object 的简要介绍
- SAP UI5 应用中 MockServer 的实例化方法
- 关于 SAP UI5 所有控件的共同祖先 - sap.ui.base.ManagedObject
- SAP UI5 sap.ui.base.ManagedObject 的构造函数参数讲解
- SAP UI5 sap.ui.Device.media.RANGESETS 的使用介绍
- SAP UI5 sap.ui.Device.media.initRangeSet 方法的单步调试
- SAP UI5 OData 请求的自定义 HTTP header 设置方法
- [ChatGPT 勘误]:SAP ABAP 系统里数据库表 dlv_systc 的用途
- sap.m.Table 和 sap. ui.table.Table 两个控件的功能对比
- 澄清一些对 SAP UI5 响应式表格 sap.m.Table 的常见理解误区试读版
- SAP ABAP 通过 https 消费外部 API 遇到错误消息 SSSLERR_SSL_CONNECT
- 将Excel导入SAP数据库表详解编程语言
- SAP中禁止特定用户更改密码详解编程语言
- SAP资产明细报表详解编程语言
- [代码]如何上载图片到SAP数据库并显示详解编程语言
- SAP中如何创建parameter ID详解编程语言
- SAP ALV demo—-自用(新显示函数,不用自定义GUI状态)详解编程语言
- SAP MM批次管理(5)货架寿命、保质期–大海详解编程语言
- sap-通过定义物料组的评估类-设置无物料号的费用采购详解编程语言
- SAP的视图详解编程语言
- sap的日期,时间详解编程语言
- 比较:Oracle与SAP的对比(oracle和sap)
- Oracle与SAP在仓储领域的联姻(仓库oracle和sap)
- Oracle与SAP权衡利弊比较之路(oracle与sap比较)
- 对比Oracle和SAP价格比较哪个是更值得投入的选择(oracle与sap价格)