PostgreSQL--杀死已挂掉的连接
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,一、原理在数据库PostgreSQL中,一个客户端到服务器连接实际上是一个tcp socket连接,tcp连接是虚连接,一方非正常退出(如断电),另一方会继续维持这个连接。举个例子:一个客户端电脑正常
千家信息网最后更新 2025年02月02日PostgreSQL--杀死已挂掉的连接
一、原理
在数据库PostgreSQL中,一个客户端到服务器连接实际上是一个tcp socket连接,tcp连接是虚连接,一方非正常退出(如断电),另一方会继续维持这个连接。
举个例子:一个客户端电脑正常连上服务器后,强行拔掉电源造成人为断电,重新启动电脑,再此连上服务器。用SQL语句select * from pg_stat_activily 查看服务器的所有连接,会发现本客户端的连接除了本次外,断电前的连接还在。因为服务器根本不知道客户端的断电行为,还以为那连接正在空闲状态。然而这个死连接不会永远存在,2个小时后,服务器上的这个连接会自动切掉,因为PostgreSQL支持TCP_KEEPLIVE机制。有三个系统变量tcp_keepalives_idle,tcp_keepalives_interval,tcp_keepalives_count 来设置PostgreSQL如何处理死连接。对于每个连接,PostgreSQL会对这个连接空闲tcp_keepalives_idle秒后,主动发送tcp_keeplive包给客户 端,以侦探客户端是否还活着 ,当发送tcp_keepalives_count个侦探包,每个侦探包在tcp_keepalives_interval 秒内没有回应,PostgreSQL就认为这个连接是死的,于是切断这个死连接。
在PostgreSQL, 这三个参数都设为0将使用操作系统的默认值,在linux下,tcp_keepalives_idle一般是2个小时,也就是2个小时后,服务器才可以自动关掉死连接。在实际应运中,可以自行调整以上参数。
然而,单单依靠服务器以此方法来切掉死连接,是永远不够。假设有一个连接,在运行以下交互式命令中突然断电
begin transaction;lock table xxx in exclusive mode;-- 突然断电,这种可能很小,但肯定存在。。。commit
1.1、取消正在执行的sql pid (不会释放连接,只会取消sql查询语句)
SELECT pg_cancel_backend('26945'); #26945 是procpid
1.2、释放杀死正在执行的sql,同时释放连接
select pg_terminate_backend(procpid)
1.3、批量释放杀死idle状态的连接
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE current_query=''
1.4、使用PG自带的pg_ctl工具杀死进程
pg_ctl kill TERM 4004
服务器
服务
客户
侦探
客户端
小时
正在
一方
三个
参数
实际
状态
电脑
空闲
端的
系统
语句
主动
操作系统
不够
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
全椒自动化软件开发技术采购信息
信用卡逾期送金融信用数据库
学习软件开发比较好的学校
谷歌用什么服务器
软件开发企业的利润一般是多少
网络安全讲座如何开展
sql2008多个数据库
怎么迁移数据库
美国信息网络安全事件
计算机网络技术专业教学标准
成都智善华网络技术有限公司
db2UGI创建数据库
ios14 邮件未从服务器下载
u8管理服务器在那
apple软件开发服务费
服务器和子机怎么连接
中粮集团网络安全2020年
辅助软件开发费用
县转数据库
金华电脑软件开发设计
小学生怎么维护网络安全
宝德4主机服务器
目前网络安全研究方向
服务器必须用一台单独的计算机
网约车平台的数据库
泗阳网络安全知识竞赛
沈阳安好世纪网络技术 康普
进口网络技术诚信经营
中国网络安全大赛战队有那些
新建数据库文件怎么操作