构造锁等待场景:
1.打开一个新的连接会话,使用普通用户连接GaussDB(DWS)数据库,在test SCHEMA 下创建测试表test.ypg_test。
CREATE TABLE ypg_test (id int, name varchar(50));
2.开启事务1,进行INSERT操作。
START TRANSACTION;
INSERT INTO test.ypg_test VALUES (1, ‘lily’);
3.打开一个新的连接会话,使用系统管理员dbadmin连接GaussDB(DWS)数据库,执行VACUUM FULL操作,发现语句阻塞。
VACUUM FULL test.ypg_test;
锁等待检测(8.1.x及以上版本)
1.打开一个新的连接会话,使用系统管理员dbadmin连接GaussDB(DWS)数据库,通过pgxc_lock_conflicts视图查看锁冲突情况。
如下图,回显中查看granted字段为“f”,表示VACUUM FULL语句正在等待其他锁。granted字段为“t”,表示INSERT语句是持有锁。nodename,表示锁产生在的位置,即CN或DN位置,例如cn_5001。
SELECT * FROM pgxc_lock_conflicts;
2.据语句内容确认是否中止持锁语句。如果终止,则执行以下语句。pid从1获取,cn_5001为上面查询到的nodename。
execute direct on (cn_5001) ‘SELECT PG_TERMINATE_BACKEND(pid)’;
锁等待检测(8.0.x及以前版本)
1.在数据库中执行以下语句,获取VACUUM FULL操作对应的query_i