PostgreSQL锁查询与杀掉进程说明

查询表中存在的锁

select a.locktype,a.database,a.pid,a.mode,a.relation,b.relname

from pg_locks a

join pg_class b on a.relation = b.oid

where upper(b.relname) = ‘TABLE_NAME‘;

以上为查询某表上是否存在锁的SQL语句。

查到后发现确实存在锁,如下:

locktype | database |  pid  |      mode       | relation | relname

----------+----------+-------+-----------------+----------+---------

relation |   439791 | 26752 | AccessShareLock |  2851428 |table_name

relation |   439791 | 26752 | ExclusiveLock   |  2851428 |table_name

再根据上面查出来的pid去表pg_stat_activity查询一下该锁对应的SQL语句:

select usename,current_query ,query_start,procpid,client_addr from pg_stat_activity where procpid=17509;

如下:

usename  |  current_query                      |          query_start          | procpid |  client_addr

-----------+---------------------------------------------------------------------------------------------------------------+-------------------------------+---------+----------------

gpcluster | DELETE FROM TABLE_NAME WHERE A = 1  | 2011-05-14 09:35:47.721173+08 |   17509 | 192.168.165.18

(1 row)

通过以上可以发现,就是上面的锁导致该语句一直挂在那里。然后把该锁结束掉后,应用很快跑完。

然后核查应用的代码,发现代码里面两个事务都没有提交操作。后增加提交操作后,重新跑数,很快跑完。

如果要杀死,首先向相关人员确认这个语句是否为关键进程。

杀掉方法:在PG数据库mydb服务器中,查询这个进程PID然后Kill掉。

> ps -ef|grep 17509

postgres 17509  4868  1 Nov18 ?        00:11:19 postgres: postgres mydb 192.168.165.18(56059) SELECT

postgres 30832 30800  0 15:18 pts/3    00:00:00 grep 17509

> ps -ef|grep 17509

postgres 17509  4868  1 Nov18 ?        00:11:19 postgres: postgres mydb 192.168.165.18(56059) SELECT

postgres 30838 30800  0 15:19 pts/3    00:00:00 grep 17509

> kill -9 17509

时间: 2024-08-24 10:29:22

PostgreSQL锁查询与杀掉进程说明的相关文章

Oracle查询被锁的表及进程的方法

Oracle查询可以有多种方法,下面为您介绍的是如何Oracle查询被锁的表及Oracle查询连接的进程的方法,希望对您能够有所帮助. 一.查看被锁的表 select p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a

oracle查看被锁的表和被锁的进程,杀掉进程

-- 1. 查看被锁的表 SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,b.os_user_name FROM v$process p, v$session a, v$locked_object b, all_objects c WHERE p.addr = a.paddr AND a.process = b.process AND c.object_id = b.object_id -- 2.

Oracle 表锁住,杀掉锁表进程

背景 在操作Oracle时,多人同时操作oracle数据库的同一张表的时候,经常会造成锁表现象,这时需要手动进行解锁. 步骤 以dba身份登录Oracle数据库(否则用户缺少杀掉进程权限,需要给用户分配权限) sqlplus  /  as sysdba,如下图 查看被锁住的表进程 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_i

PostgreSQL 锁等待诊断详解

摘要PostgreSQL和大多数传统RDBMS一样,都设计了大量的锁来保证并发操作的数据一致性. 同时PG在设计锁等待时,以队列方式存储等待锁. 参考 ProcSleep()@src/backend/storage/lmgr/proc.chttp://blog.163.com/[email protected]/b... PostgreSQL和大多数传统RDBMS一样,都设计了大量的锁来保证并发操作的数据一致性. 同时PG在设计锁等待时,以队列方式存储等待锁. 参考 ProcSleep()@sr

postgresql锁

postgresql锁: postgresql中有3种锁模式,分别为:spinlock.lwlook和regularlock. 1.spinlock自旋锁 spinlock使用互斥信息,与操作系统和硬件环境联系比较密切.spinlocky的主要特点是封锁的时间很短,没有等待队列和死锁检测机制.事务结束时,不能自动释放spinlock锁. 2.LWLock轻量级锁 LWLock主要提供对共享存储器的数据结构的互斥访问.LWLock的主要特点是由等待队列和无死锁检测.事务结束时,可以自动释放lwlo

kill session真的能杀掉进程吗

session1 确认sidSYS @ prod > select userenv('sid') from dual; USERENV('SID')-------------- 144 session2 确认sidSYS @ prod > select userenv('sid') from dual; USERENV('SID')-------------- 145 session1 查询当前数据库有哪些连接SYS @ prod > select p.spid,p.pid,p.user

Oracle彻底杀掉进程

kill session 是DBA经常碰到的事情之一.如果kill 掉了不该kill 的session,则具有破坏性,因此尽可能的避免这样的错误发生.同时也应当注意,如果kill 的session属于oracle 后台进程,则容易导致数据库实例宕机.通常情况下,并不需要从操作系统级别杀掉Oracle会话进程,但并非总是如此,下面的描述中给出了在Oracle级别杀掉会话以及操作系统级别杀掉进程.  一.获得需要kill session的信息(使用V$SESSION 和 GV$SESSION视图) 

多进程(了解),守护进程,互斥锁,信号量,进程Queue与线程queue

一.守护进程 主进程创建守护进程,守护进程的主要的特征为:①守护进程会在主进程代码执行结束时立即终止:②守护进程内无法继续再开子进程,否则会抛出异常. 实例: from multiprocessing import Process from threading import Thread import time def foo(): # 守护进程 print(123) time.sleep(1) print("end123") def bar(): print(456) time.sl

XP下无法杀掉进程权限设置

1 // 提升升级工具进程权限为SE_DEBUG_NAME,否则XP下无法杀掉进程 2 HANDLE hToken = NULL; 3 if(OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken)) 4 { 5 LUID luid; 6 if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) 7 { 8 TOKEN_PRIVILEGES TokenPrivileges