高斯锁表导致sql报错处理

ops/2024/10/15 22:13:01/

构造锁等待场景:

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)’;


http://www.ppmy.cn/ops/16747.html

相关文章

13.接口自动化学习-Pytest结合Yaml使用

问题:项目自动化测试脚本迭代出现变革技术方案 要求:测试用例从excel–变为yaml用例 注意事项: 1)尽可能少改代码 2)新技术方案yaml读取,尽可能写成一样的数据返回 [(请求体1,响应数据1),(请求体2,响应数据…

【代码管理】Git删除仓库中的大文件压缩仓库大小

Git 仓库中有时会不小心加入了一些大文件,例如模型文件,视频文件 模型文件有可能以 .weights 结尾,或者 .onnx 结尾等等 视频文件有可能以 .avi 结尾,或者 .mp4 结尾 大文件如果一直在仓库中,仓库体积会非常大&#xf…

解决hive表新增的字段查询为空null问题

项目场景: 由于业务拓展,需要往hive分区表新增新的字段,hive版本为2.1.1-cdh6.3.2 于是利用 alter table table_name add columns (col_name string )新增字段,然后向已存在分区中插入数据,以为问题就解决了。 结果…

夜神、雷电、android studio手机模拟器资源占用情况

夜神、雷电、android studio手机模拟器内存资源占用情况 由于开发电脑只有16G内存,出于开发需要和本身硬件资源的限制,对多个手机模拟器进行了机器资源占用(主要是内存)的简单比较。 比较的模拟器包括: 1. Android S…

华纳云:如何使用Docker进行有效的日志管理?

使用 Docker 进行有效的日志管理可以帮助您轻松地收集、存储、分析和监控容器日志。以下是一些在 Docker 中实现有效日志管理的实践: 1.使用标准输出和标准错误输出:配置容器使其将日志输出到标准输出(stdout)和标准错误输出(stderr)。这样做可以让 Dock…

C++笔记打卡第23天(STL常用算法)

1.常用排序算法 sort&#xff1a;对容器内元素进行排序 class Myprint { public:void operator()(int val){cout << val << " ";} };// 查自定义数据类型 void test01() {vector<int> v;v.push_back(10);v.push_back(20);v.push_back(15);v.push_b…

Java在区块链开发中的作用及发展

Java在区块链开发中的作用以及发展 一、引言 随着信息技术的飞速发展&#xff0c;区块链技术作为一种新兴的去中心化分布式账本技术&#xff0c;正逐渐引起人们的广泛关注。区块链以其独特的不可篡改、去中心化、安全可信等特性&#xff0c;在数字货币、供应链管理、金融科技…

80个在线小游戏源码

源码简介 搭建80个在线小游戏网站源码&#xff0c;解压即可食用&#xff0c;支持在本地浏览器打开。 安装教程 纯HTML&#xff0c;直接将压缩包上传网站目录解压即可 首页截图 源码下载 80个在线小游戏源码-小8源码屋