You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenGauss中创建表耗时过长且失败,求助解决锁等待超时问题

问题分析

执行以下创建表语句时耗时极长且最终失败:

create table ADVISOR
(
    STU_ID varchar(5) not null,
    ID varchar(5),
    primary key (STU_ID)
);

报错信息:

错误:锁等待超时:节点dn_6001上的线程140197302351616等待事务7766上的ShareLock已达1200000.600毫秒
详情:被持有锁的线程140197328570112阻塞,该线程执行语句<select * from advisor;>,持有锁模式为ExclusiveLock。
studentdb=>

核心原因是已有未结束的事务对不存在的ADVISOR表持有排他锁(ExclusiveLock),导致建表请求所需的共享锁(ShareLock)无法获取,最终触发超时。这类情况多因误操作查询不存在的表后,事务未及时提交或回滚所致。

解决方案
  • 终止阻塞事务
    1. 登录数据库,执行语句定位目标事务:
      SELECT pid, datname, usename, query, state FROM pg_stat_activity WHERE datname = 'studentdb';
      
    2. 找到执行select * from advisor;的进程ID(pid),执行终止命令:
      SELECT pg_terminate_backend('目标进程ID');
      
  • 临时调整锁等待超时(应急方案)
    若无法立即终止事务,可临时调大锁等待超时参数,完成建表后恢复默认值:
    SET lockwait_timeout = '300s'; -- 根据实际需求调整时长
    create table ADVISOR(STU_ID varchar(5) not null, ID varchar(5), primary key (STU_ID));
    SET lockwait_timeout = '120s'; -- 恢复默认超时时间
    
  • 预防措施
    • 所有事务执行后必须及时提交(COMMIT)或回滚(ROLLBACK),避免长时间持有锁资源
    • 避免在未提交的事务中查询不存在的表,这类操作可能产生意外锁持有

内容的提问来源于stack exchange,提问作者Sarah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:09:30