• 技术文章 >数据库 >PostgreSQL

    PostgreSQL连接不释放怎么办

    月亮邮递员月亮邮递员2020-04-01 15:55:07原创4540

    PostgreSQL连接不释放怎么办

    PostgreSQL连接不释放的解决方法如下:

    推荐:postgresql教程

    方法一:使用kill命令手动杀死进程

    kill -s SIGTERM 进程号

    方法二:创建脚本,自动杀死进程

    使用python脚本监控postgres中超时的僵尸连接并将其释放,将代码保存为pgMonitor.py并添加到linux的corntab中定时执行即可

    #coding:utf-8
    from db.SqlUtil import *
    import psycopg2.extras
    from datetime import datetime,timedelta
    import time
    import os,sys
    from subprocess import *
    
    sql_conn=Driver().getConn()
    cursor = sql_conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cursor.execute("select * from pg_stat_activity WHERE state='idle'  ORDER BY backend_start")
    now=time.time()
    for obj in cursor.fetchall():
        t=obj["query_start"]
        spT=now-time.mktime(t.timetuple())
        spTH=spT/3600
        if spTH>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教程》。

    专题推荐:postgresql 连接 释放
    上一篇:PostgreSQL如何安装 下一篇:PostgreSQL里列注释在哪儿

    相关文章推荐

    • VB怎么连接PostgreSQL• PostgreSQL如何判断字段是否存在

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网