数据仓库服务 GAUSSDB(DWS)-执行SQL时报错:abort transaction due to concurrent update:原因分析
原因分析
两个不同的事务对同一个表中的同一行数据进行并发更新/操作,导致后操作的事务发生了回滚。
举例说明:
- 打开一个连接Session A,使用普通用户u1连接 GaussDB (DWS)数据库,在u1的同名SCHEMA u1下创建测试表u1.test,并插入数据。
1 2
CREATE TABLE test (id int, name varchar(50)); INSERT INTO test VALUES (1, 'lily');
- 打开一个新的连接会话Session B,使用系统管理员dbadmin连接GaussDB(DWS)数据库,开启事务1,执行UPDATE操作,UPDATE语句执行成功。
1 2 3 4
START TRANSACTION; UPDATE u1.test SET id = 3 WHERE name = 'lily'; UPDATE 1
- 在会话Session A中开启事务2,执行相同的UPDATE语句,执行报错。
1 2 3 4
START TRANSACTION; UPDATE test SET id = 3 WHERE name = 'lily'; ERROR: dn_6003_6004: abort transaction due to concurrent update test 289502.
针对上述案例,两个不同的事务并发更新了同一条记录,而并发更新同一条记录发生冲突不会等待锁,直接报错:abort transaction due to concurrent update。
在实际业务中,并不是只有并发UPDATE同一条记录会报错,select、delete等其他SQL并发操作,也有可能报错:abort transaction due to concurrent update。
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- GAUSS(DWS)工具_gsql工具_DataStudio工具_DSC工具
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- GaussDB(for MySQL)并行查询_GaussDB(for MySQL)内核_GaussDB(for MySQL)并行执行_PQ
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- 数据库监控DMS_数据库智能运维_了解Auto Pilot_DMS_DWS节点监控
- DWS产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- GaussDB命令_GaussDB数据库命令_高斯数据库命令-华为云
- 数据治理中心_数据开发_数据开发能力_脚本和节点介绍-华为云