更新时间:2024-01-25 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操作。
父主题: 集群性能