博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
postgresql 死锁处理
阅读量:7088 次
发布时间:2019-06-28

本文共 1378 字,大约阅读时间需要 4 分钟。

阅读目录

缘起

遇到一个奇怪的现象,select和delete表时正常执行,但truncate和drop表时会一直运行,也不报错。

原因

"drop table " 和 "truncate table " 需要申请排它锁 "ACCESS EXCLUSIVE ", 执行这个命令卡住时,说明此时这张表上还有操作正在进行,比如查询等,

那么只有等待这个查询操作完成,"drop table" 或"truncate table"或者增加字段的SQL 才能获取这张表上的 "ACCESS EXCLUSIVE" 锁 ,操作才能进行下去。

1.检索出死锁进程的ID。

select oid,relname from pg_class where relname='all_data';

检索出来的字段中,【wating 】字段,数据为t的那条,就是死锁的进程。找到对应的【procpid 】列的值。

2.将进程杀掉。

SELECT pg_cancel_backend('死锁那条数据的procpid值 ');

结果:运行完后,再次更新这个表,sql顺利执行。

 

如果pg_stat_activity 没有记录,则查询pg_locks是否有这个对象的锁

 

select locktype,pid,relation,mode,granted,* from where relation= '上面查询出来的oid';

杀掉进程

select pg_cancel_backend('进程ID');

另外pg_terminate_backend()函数也可以杀掉进程。

总结

select oid,relname from pg_class where relname='all_data';
select locktype,database,pid,relation ,mode from pg_locks where relation=上面oid;select * from pg_stat_activity where pid = 上面pidselect pg_terminate_backend(上面pid);

删除数据库说被链接

异常

db_v43=> drop database test_db;ERROR:  database "test_db" is being accessed by other usersDETAIL:  There is 1 other session using the database.

解决

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='数据库名' AND pid<>pg_backend_pid();

然后就可以删除数据库了

 

查看表结构依赖

在表结构修改(增删改)利于排除死锁

批量删除

把pid拷贝到del文件

cat del |sort | uniq | awk '{print "select pg_terminate_backend("$1");"}'

 

本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/5434358.html,如需转载请自行联系原作者

你可能感兴趣的文章
MYSQL基础
查看>>
fakeroot: preload library `libfakeroot.so' not found, aborting.
查看>>
k8s-scheduler原理分析
查看>>
Mininet系列实验(二):Mininet可视化应用
查看>>
线程组
查看>>
关于strcpy的安全函数的选择
查看>>
22.Kubernetes Ingress: HTTP 7层路由机制
查看>>
Ajax学习---responseText
查看>>
zoj3329(概率dp)
查看>>
CVE-2019-0708 PoC with EXP ( Proof of Concept with Exploits )
查看>>
React Native 之 学习资料
查看>>
NSQ
查看>>
SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色 SP2-0611: 启用 STATISTICS 报告时出错...
查看>>
isolate-user-vlan隔离用户vlan的配置
查看>>
【linux下dhcp服务的简单搭建及优化部署】
查看>>
面试缺点
查看>>
位置属性
查看>>
Redis
查看>>
asp.net状态保持
查看>>
控制文件自动备份篇
查看>>