GreenPlum/PostGreSQL表锁处理
创始人
2024-02-20 13:33:48
0

在这里插入图片描述

GreenPlum/PostGreSQL表锁处理

数据库中遇到表锁的情况,可以通过select * from pg_stat_activity;查看表锁的进程及进程ID,从而取消进程,解锁。

一、模拟表锁

1.1 模拟表数据

创建lock_test表,并随意插入一条数据,用于后续模拟表锁使用。

postgres=# create table lock_test(id int , name text );
CREATE TABLE
postgres=# insert into lock_test values(1,'zxy');
INSERT 0 1

1.2 会话A:

在数据库可视化工具中,一般会自动提交事务。这里通过在服务端打开会话,通过begin和commit命令,开始事务和提交事务。

为模拟锁操作,这里开始了事务,并模拟插入一条数据,不提交。

postgres=# begin;
BEGIN
postgres=# insert into lock_test values(2,'zzz');
INSERT 0 1
postgres=# select * from lock_test;id | name
----+------1 | zxy2 | zzz
(2 rows)

1.3 会话B:

打开一个新的会话,通过查看表数据可知,会话A未提交的事务操作(插入一条新的数据),在这里查看不到。

postgres=# select * from lock_test;id | name
----+------1 | zxy
(1 row)

二、查看锁进程

为方便查看查询结果,通过可视化工具执行select * form pg_stat_activity;命令来查看锁进程。

在这里插入图片描述

通过查看state字段下数据,发现进程pid = 23584的进程处于idle in transaction状态,这个就是我们未提交的事务,也就是会话A执行的内容。

在这里插入图片描述

三、处理表锁:

3.1 中断session

# 取消后台操作,回滚未提交事务
select pg_cancel_backend(pid);# 中断session,回滚未提交事务
select pg_terminate_backend(pid);

在这里插入图片描述

执行pg_terminate_backend后,我们回到会话A,发现再去查询表数据的时候,会提示你,该会话已经被管理员关闭。自此已经解决了锁问题。

3.2 会话A:

postgres=# select * from lock_test;
FATAL:  terminating connection due to administrator command
server closed the connection unexpectedlyThis probably means the server terminated abnormallybefore or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...