更新时间:2024-06-20 GMT+08:00
多个表同时进行MERGE INTO UPDATE时,执行失败
问题现象
多个表同时进行MERGE INTO UPDATE时,执行失败。
原因分析
查看日志,发现有如下错误日志:
1
|
dn_6007_6008 YY003 79375943437085786 [BACKEND] DETAIL: blocked by hold lock thread 0, statement <pending twophase transaction>, hold lockmode (null). |
这是由于分布式锁导致的,两个DN节点都锁住了自己的数据块,然后又在等待对方的数据块,所以导致锁超时。
这种行为是两阶段锁的特性,分布式情况下都会面临这样的问题。
处理方法
建议对单表执行MERGE,将并发操作改为串行。
父主题: 数据库使用