文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 集群性能/ 执行VACUUM FULL命令时报错:Lock wait timeout
更新时间:2024-07-01 GMT+08:00

执行VACUUM FULL命令时报错:Lock wait timeout

问题现象

执行VACUUM FULL命令时报错:

1
2
3
[0]ERROR: dn_6009_6010: Lock wait timeout: thread 140158632457984 on node dn_6009_6010 waiting for AccessExclusiveLock on relation 2299036 of database 14522 after 1202001.968 ms
Detail: blocked by hold lock thread 140150147380992, statement <<backend information not available>>, hold lockmode AccessShareLock.
Line Number: 1

原因分析

日志中的“Lock wait timeout”说明锁等待超时。锁等待超时一般是因为有其他的SQL语句已经持有了锁,当前SQL语句需要等待持有锁的SQL语句执行完毕释放锁之后才能执行。当申请的锁等待时间超过GUC参数lockwait_timeout的设定值时,系统会报LOCK_WAIT_TIMEOUT的错误。

执行VACUUM FULL命令时出现报错的原因一般为执行命令超时,如果对整个数据库执行VACUUM FULL执行时间较长可能会超时。

处理方法

建议对单个表执行VACUUM FULL命令,命令格式为“VACUUM FULL 表名”,同时增加执行“VACUUM FULL”命令的频率。尤其是对于频繁增、删、改的表,建议定期做VACUUM FULL操作。