2023-06-20 06:47:43
SAP HANA 数据库在发生死锁后,会根据死锁类型采取不同处理方式:事务锁死锁会终止其中一个事务并报错,内部锁死锁通常需重启解决,不会自动解开或等待超时后仅报错而不终止事务。 具体说明如下:
处理机制:当 SAP HANA 检测到基于事务锁的死锁时,会主动终止其中一个事务,并返回错误消息 SQL error 133: transaction rolled back by detected deadlock。
与 Oracle 的差异:Oracle 等数据库仅终止当前 DML 操作,而 SAP HANA 会终止整个事务,确保数据一致性。
触发场景:通常由应用程序设计缺陷导致,例如多个事务以不同顺序请求相同资源(如先锁表 A 再锁表 B,另一个事务先锁表 B 再锁表 A)。
示例:两个事务同时更新同一行数据,但顺序相反,HANA 会终止其中一个事务并回滚其操作。
处理机制:基于内部锁的死锁被视为 SAP HANA 的系统级问题,通常无法通过常规手段解决,需重启数据库服务。
检测工具:可通过 hdbcons 命令行工具的 deadlockdetector 功能检查部分内部锁(如 hdbcons 'deadlockdetector wg -w -o .dot'),但并非所有内部锁均可被检测。
触发场景:多见于主键约束、系统内部资源竞争等复杂场景,需参考 SAP Note 2304201 和 2429521 进一步分析。
示例:系统执行表重组或索引重建时,内部锁冲突可能导致死锁,需重启 HANA 服务恢复。

总结与建议