- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章pgsql锁表后kill进程的操作由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
如下:
1
|
select
*
from
pg_stat_activity
|
查询系统中的进程 。
如果怀疑哪张表被锁了,可以执行如下sql:
1
|
select
oid
from
pg_class
where
relname=
'table_name'
|
然后将拿到的oid 放入如下sql执行:
1
|
select
pg_cancel_backend(
'oid '
);;
|
搞定! 。
此sql是kill作用 。
补充:PostgreSQL - 如何杀死被锁死的进程 。
前言 。
在一次系统迭代后用户投诉说无法成功登陆系统,经过测试重现和日志定位,最后发现是由于用户在ui上进行了某些操作后,触发了堆栈溢出异常,导致数据库里的用户登陆信息表的数据被锁住,无法释放。这个表里存放的是用户的session信息.
虽然后来解决了问题,但是数据库里这个用户登录信息表里被lock住的数据始终无法释放,这导致用户永远无法登陆成功,需要手动跑SQL把锁去掉才行.
杀掉指定进程 。
PostgreSQL提供了两个函数:pg_cancel_backend()和pg_terminate_backend(),这两个函数的输入参数是进程PID,假定现在要杀死进程PID为20407的进程,使用方法如下:
1
|
select
pg_cancel_backend(20407);
|
--或者执行这个函数也可以:
1
|
select
pg_terminate_backend(20407);
|
这两个函数区别如下:
1
|
pg_cancel_backend()
|
只能关闭当前用户下的后台进程 。
向后台发送SIGINT信号,用于关闭事务,此时session还在,并且事务回滚 。
1
|
pg_terminate_backend()
|
需要superuser权限,可以关闭所有的后台进程 。
向后台发送SIGTERM信号,用于关闭事务,此时session也会被关闭,并且事务回滚 。
那么如何知道有哪些表、哪些进程被锁住了?可以用如下SQL查出来:
1
2
3
4
|
select
*
from
pg_locks a
join
pg_class b
on
a.relation = b.oid
join
pg_stat_activity c
on
a.pid = c.pid
where
a.mode
like
'%ExclusiveLock%'
;
|
这里查的是排它锁,也可以精确到行排它锁或者共享锁之类的。这里有几个重要的column:a.pid是进程id,b.relname是表名、约束名或者索引名,a.mode是锁类型.
杀掉指定表指定锁的进程 。
1
2
3
4
5
|
select
pg_cancel_backend(a.pid)
from
pg_locks a
join
pg_class b
on
a.relation = b.oid
join
pg_stat_activity c
on
a.pid = c.pid
where
b.relname ilike
'表名'
and
a.mode
like
'%ExclusiveLock%'
;
|
--或者使用更加霸道的pg_terminate_backend():
1
2
3
4
5
|
select
pg_terminate_backend(a.pid)
from
pg_locks a
join
pg_class b
on
a.relation = b.oid
join
pg_stat_activity c
on
a.pid = c.pid
where
b.relname ilike
'表名'
and
a.mode
like
'%ExclusiveLock%'
;
|
另外需要注意的是,pg_terminate_backend()会把session也关闭,此时sessionId会失效,可能会导致系统账号退出登录,需要清除掉浏览器的缓存cookie(至少我们系统遇到的情况是这样的).
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.
原文链接:https://www.cnblogs.com/wangxc20181130/p/10960018.html 。
最后此篇关于pgsql锁表后kill进程的操作的文章就讲到这里了,如果你想了解更多关于pgsql锁表后kill进程的操作的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
一、公平锁和非公平锁 1.1、公平锁和非公平锁的概述 公平锁:指多个线程按照申请锁的顺序来获取锁。 非公平锁:指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁
阅读目录 1、简介 2、分类 3、全局锁 4、表级锁 5、表锁 6、元数据锁
因此,在我编写的程序中,我有三个函数,为了简单起见,我们将它们称为 A、B 和 C。每个函数都需要访问资源X才能工作。 限制是A和B不允许同时运行并且必须适当同步。但是,C 可以与 A 或 B 同时运
我听说过这些与并发编程相关的词,但是锁、互斥量和信号量之间有什么区别? 最佳答案 锁只允许一个线程进入被锁定的部分,并且该锁不与任何其他进程共享。 互斥锁与锁相同,但它可以是系统范围的(由多个进程共享
这个问题已经有答案了: What is an efficient way to implement a singleton pattern in Java? [closed] (29 个回答) 已关闭
这个问题已经有答案了: What is an efficient way to implement a singleton pattern in Java? [closed] (29 个回答) 已关闭
我对标题中的主题有几个问题。首先,假设我们使用 JDBC,并且有 2 个事务 T1 和 T2。在 T1 中,我们在一个特定的行上执行 select 语句。然后我们对该行执行更新。在事务 T2 中,我们
我希望我的函数只运行一次。这意味着如果多个线程同时调用它,该函数将阻塞所有线程,只允许它运行。 最佳答案 听起来您希望存储过程进行同步。为什么不直接将同步放在应用程序本身中。 pthread_mute
if (runInDemoMode) { lock (this) { //Initalization of tables dCreator.create
我相信无论使用什么语言都可以考虑我的问题,但是为了有一些“ anchor ”,我将使用 Java 语言来描述它。 让我们考虑以下场景:我有一个扩展 Thread 的类 PickyHost 及其实例 p
我知道异步不是并行的,但我现在遇到了一个非常有趣的情况。 async function magic(){ /* some processing here */ await async () =
我们正在使用 Scala、Play 框架和 MongoDB(以 ReactiveMongo 作为我们的驱动程序)构建一个网络应用程序。应用程序架构是端到端的非阻塞。 在我们代码的某些部分,我们需要访问
我需要一个简单的锁,JavaME 超时(concurrent.lock 的反向移植需要完整的 Java 1.3)。 如果其他人已经为 JavaME 发布了经过测试的锁定代码,我宁愿使用它。 锁定是出了
根据 boost : To access the object, a weak_ptr can be converted to a shared_ptr using the shared_ptr co
关于 Mutex 和 Critical 部分之间的区别存在一个问题,但它也不处理 Locks。 所以我想知道临界区是否可以用于进程之间的线程同步。 还有信号状态和非信号状态的含义 最佳答案 在 Win
锁 最为常见的应用就是 高并发的情况下,库存的控制。本次只做简单的单机锁介绍。 直接看代码: 每请求一次库存-1. 假如库存1000,在1000个人请求之后,库存将变为0。
线程和进程 1、线程共享创建它的进程的地址空间,进程有自己的地址空间 2、线程可以访问进程所有的数据,线程可以相互访问 3、线程之间的数据是独立的 4、子进程复制线程的数据 5、子进程启动
**摘要:**细心的你也一定关注到,有的网址是https开头的,有的是http。https开头的网站前面,会有一把小锁。这是为什么呢? 本文分享自华为云社区《还不知道SSL证书已经是刚需了?赶快来了解
试图在 C 中实现一个非常简单的互斥锁(锁)我有点困惑。我知道互斥锁类似于二进制信号量,除了互斥锁还强制执行释放锁的线程的约束,必须是最近获得它的同一线程。我对如何跟踪所有权感到困惑? 这是我到目前为
在阅读了很多与上述主题相关的文章和答案之后,我仍然想知道 SQL Server 数据库引擎在以下示例中是如何工作的: 假设我们有一个名为 t3 的表: create table t3 (a int ,
我是一名优秀的程序员,十分优秀!