瀚高数据库查看是否有锁表
·
查看是否该表正在执行的状态
SELECT
a.pid,
a.state,
a.application_name,
a.client_addr,
l.mode,
l.granted,
a.query
FROM pg_locks l
JOIN pg_stat_activity a ON l.pid = a.pid
WHERE l.relation = '你的表'::regclass;
查询出来的数据如果query 列显示select 正常,如果在表没有任何数据操作的过程中,长事件出现insert 或者update 很有可能锁表了
这个时候看下是不是有Create Index 创建索引的语句,或者有 Drop Table Index 删除索引的操作,
pid:进程 ID
state:进程状态(均为 active)
application_name:应用程序标识(大多为 hgproxy: app[…],少数来自 Navicat)
client_addr:客户端地址(几乎都是 10.132.108.96)
mode:锁模式(主要是 AccessShareLock,少数为 RowExclusiveLock,还有一个 AccessExclusiveLock)
granted:是否已授予锁(t 为是,f 为否)
query:正在执行的 SQL 语句
- 锁阻塞严重
AccessExclusiveLock 是 PostgreSQL 中最强的锁级别它会阻塞所有对 你的xxxx 表的:
所有 SELECT 查询(即使是只读)
所有 INSERT/UPDATE/DELETE 操作
所有其他 DDL 操作(包括创建索引、修改表结构等)
– 强制终止该进程
SELECT pg_terminate_backend(2406671);
– 或更温和的方式(允许事务回滚)
SELECT pg_cancel_backend(2406671);
更多推荐
所有评论(0)