PostgreSQL连接不释放怎么办
PostgreSQL连接不释放怎么办
PostgreSQL连接不释放的解决方法如下:
推荐:postgresql教程
方法一:使用kill命令手动杀死进程
kill-sSIGTERM进程号
方法二:创建脚本,自动杀死进程
使用python脚本监控postgres中超时的僵尸连接并将其释放,将代码保存为pgMonitor.py并添加到linux的corntab中定时执行即可
#coding:utf-8 fromdb.SqlUtilimport* importpsycopg2.extras fromdatetimeimportdatetime,timedelta importtime importos,sys fromsubprocessimport* sql_conn=Driver().getConn() cursor=sql_conn.cursor(cursor_factory=psycopg2.extras.DictCursor) cursor.execute("select*frompg_stat_activityWHEREstate='idle'ORDERBYbackend_start") now=time.time() forobjincursor.fetchall(): t=obj["query_start"] spT=now-time.mktime(t.timetuple()) spTH=spT/3600 ifspTH>5: pid=obj["pid"] cmd="kill%s"%pid Popen(cmd,shell=True,stdout=PIPE) cursor.close() sql_conn.close()
在数据库postgresql中,一个客户端到服务器连接实际上是一个tcp socket连接,tcp连接是虚连接,一方非正常退出(如断电),另一方会继续维持这个连接,造成死连接。
由于这个连接保留着,且这个transaction还没结束(本来上1秒之内的事务,现在变成至少要2个小时(2个小时后,服务器才可以自动关掉死连接)),所以这个表的锁一直存在着,导致系统的并发性严重降低。
推荐学习《Python教程》。
本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.