高斯锁表导致sql报错处理

构造锁等待场景:

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_id。

SELECT * FROM pgxc_stat_activity WHERE query LIKE '%vacuum%'AND waiting = 't';

2.根据获取的query_id,执行以下语句查看是否存在锁等待,并获取对应的tid。其中,{query_id}从1获取。

SELECT * FROM pgxc_thread_wait_status WHERE query_id = {query_id};

回显中"wait_status"存在"acquire lock"表示存在锁等待。同时查看"node_name"显示在对应的CN或DN上存在锁等待,记录相应的CN或DN名称,例如cn_5001或dn_600x_600y。

3.执行以下语句,到等锁的对应CN或DN上通过查询pg_locks系统表查看VACUUM FULL操作在等待哪个锁。以下以cn_5001为例,如果在DN上等锁,则改为相应的DN名称。pid为2获取的tid。

回显中记录relation的值。

execute direct on (cn_5001) 'SELECT * FROM pg_locks WHERE pid = {tid} AND granted = ''f''';

4.根据获取的relation,通过查询pg_locks系统表查看当前持有锁的pid。{relation}从3获取。

execute direct on (cn_5001) 'SELECT * FROM pg_locks WHERE relation = {relation} AND granted = ''t''';

5.根据pid,执行以下语句,查到对应的SQL语句。{pid}从4获取。

execute direct on (cn_5001) 'SELECT query FROM pg_stat_activity WHERE pid={pid}';

6.根据语句内容确认是中止持锁语句还是待持锁语句结束再重新执行VACUUM FULL。如果终止,则执行以下语句。pid从4获取。

中止结束后,再尝试重新执行VACUUM FULL。

execute direct on (cn_5001) 'SELECT PG_TERMINATE_BACKEND(pid)';

相关推荐
qq_3721542314 小时前
SQL嵌套查询中常见报错排查_语法与权限处理
jvm·数据库·python
0xDevNull14 小时前
MySQL 别名(Alias)指南:从入门到避坑
java·数据库·sql
2401_8877245015 小时前
CSS如何设置文字溢出显示省略号_利用text-overflowellipsis
jvm·数据库·python
m0_7478545215 小时前
golang如何实现应用启动耗时分析_golang应用启动耗时分析实现思路
jvm·数据库·python
雪碧聊技术15 小时前
下午题_试题二
数据库
解救女汉子15 小时前
如何截断SQL小数位数_使用TRUNCATE函数控制精度
jvm·数据库·python
2301_8038756116 小时前
如何用 objectStore.get 根据主键 ID 获取数据库单条数据
jvm·数据库·python
weixin_4585801216 小时前
如何修改AWR保留时间_将默认8天保留期延长至30天的设置
jvm·数据库·python
qq_6543669816 小时前
C#怎么实现OAuth2.0授权_C#如何对接第三方快捷登录【核心】
jvm·数据库·python
justjinji16 小时前
如何用 CSS 变量配合 JS setProperty 实现动态换肤功能
jvm·数据库·python