POSTGRESQL 锁表的问题

一、找出所的语句

select
    wait.pid,
    wait.query as wait_query,
    wait.query_start as wait_query_start,
    wait.locktype,
    granted.pid as waitfor_pid,
    granted.relation,
    granted.datname || ‘.‘ || d.nspname || ‘.‘ || c.relname as name,
    granted.transactionid,
    granted.virtualxid,
    granted.usename,
    granted.client_addr,
    granted.query_start,
    granted.query
from
    (select
          a.query,
          a.query_start,
          b.pid,
          b.relation,
          b.transactionid,
          b.page,
          b.tuple,
          b.locktype,
          b.virtualxid
     from
          pg_stat_activity a,
          pg_locks b
     where
          a.waiting = ‘t‘
          and a.pid = b.pid
          and granted = ‘f‘
    ) wait
join
    (select
        b.pid,
        b.usename,
        b.client_addr,
        b.backend_start,
        b.query_start,
        b.waiting,
        b.query,
        b.datname,
        a.relation,
        a.transactionid,
        a.page,
        a.tuple,
        a.locktype,
        a.virtualxid
    from
        pg_locks a,
        pg_stat_activity b
    where
        a.pid = b.pid
        and a.granted = ‘t‘
    ) granted
on (
    ( wait.locktype = ‘transactionid‘
    and granted.locktype = ‘transactionid‘
    and wait.transactionid = granted.transactionid )
    or
    ( wait.locktype = ‘relation‘
    and granted.locktype = ‘relation‘
    and wait.relation = granted.relation
    )
    or
    ( wait.locktype = ‘virtualxid‘
    and granted.locktype = ‘virtualxid‘
    and wait.virtualxid = granted.virtualxid )
    or
    ( wait.locktype = ‘tuple‘
    and granted.locktype = ‘tuple‘
    and wait.relation = granted.relation
    and wait.page = granted.page
    and wait.tuple = granted.tuple )
)
left join
    pg_class c
on ( c.relfilenode = wait.relation )
left join
    pg_namespace d
on ( c.relnamespace = d.oid )
order by
granted.query_start
;

二、杀掉依赖的sql

select pg_terminate_backend(进程id)
时间: 2024-08-03 13:56:21

POSTGRESQL 锁表的问题的相关文章

postgresql锁

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

锁_rac环境kill锁表会话后出现killed状态(解决)

原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46876961 rac生产库杀掉锁表会话出现killed状态处理 环境: 操作系统:CentOS 6.4 64BIT 数据库:Oracle RAC 11.2.0.4 R2 64bit 在某项目中,进行大数据抽取任务时,抽取出现错误,需要对大表进行重新抽取.于是取消insert操作,然后执行truncate操作. 如下,报错了,提

Oracle的锁表与解锁

Oracle的锁表与解锁 SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) LOCK_LEVEL, o.owner,o.object_name,o.object_type, s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser FROM v$session s,v$lock l,dba_objects o WHERE

oracle查看锁表进程,杀掉锁表进程

查看锁表进程SQL语句1: select sess.sid,     sess.serial#,     lo.oracle_username,     lo.os_user_name,     ao.object_name,     lo.locked_mode     from v$locked_object lo,     dba_objects ao,     v$session sess where ao.object_id = lo.object_id and lo.session_

sql数据库表复制、查看是否锁表

1.不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时: select * into 目的数据库..表 from 源数据库..表 2. 查看是否锁表 show OPEN TABLES where In_use > 0;

sqlserver锁表、解锁、查看锁表

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 面演示一个实例,它使用sys.dm_tran_locks动态视图监视数据库中锁的活动. 打开一个查询窗口,执行如下语句: USE AdventureWorks BEGIN TRAN SELECT ProductID, ModifiedDate FROM Production.ProductDocument WITH (TABLOCKX) 打开另一个查询窗口

Oracle查询锁表和解锁

1.查询是否锁表 SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id = o.object_id AND l.session_id = s.si

MySQL中select * for update锁表的问题(转)

由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住). 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键. 例1: (明确指定主键,并且有此笔资料,row lock) SELECT * FROM products WHERE id='3' FOR UPDATE; SELECT * FROM produc

[数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁

注明: 本文转载自http://www.hollischuang.com/archives/914 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM引擎)和页级锁(BDB引擎 ). 行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁.行级锁能大大减少数据库操作的冲突.其加锁粒度最小,但加锁的