91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL--殺死已掛掉的連接

發布時間:2020-06-07 15:46:47 來源:網絡 閱讀:1841 作者:朱飛東 欄目:MySQL數據庫

一、原理

在數據庫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='<IDLE>'
1.4、使用PG自帶的pg_ctl工具殺死進程
pg_ctl kill TERM 4004   
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰溪市| 沙湾县| 武乡县| 登封市| 嘉兴市| 长治市| 涟源市| 岚皋县| 隆安县| 和田市| 新巴尔虎左旗| 海原县| 全椒县| 沈丘县| 简阳市| 潞西市| 息烽县| 连平县| 仁寿县| 齐河县| 咸丰县| 宝山区| 连山| 南溪县| 海门市| 南安市| 囊谦县| 石渠县| 慈溪市| 郁南县| 阿瓦提县| 江口县| 仁寿县| 屏东市| 望谟县| 石屏县| 偏关县| 枣庄市| 新平| 钦州市| 资兴市|