IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> PostgreSQL 杀会话 -> 正文阅读

[系统运维]PostgreSQL 杀会话

pg_stat_activity 视图的每一行与每一个服务器进程一一对应,显示与该进程当前活动相关的信息。


pg_cancel_backend和pg_terminate_backend服务器信号函数
pg_cancel_backend(pid ? int): 取消一个后端的当前查询。如果调用角色是被取消后端的拥有者角色的成员或者调用角色已经被授予pg_signal_backend,这也是允许的,不过只有超级用户才能取消超级用户的后端。?
pg_terminate_backend(pid int):
中止一个后端。如果调用角色是被取消后端的拥有者角色的成员或者调用角色已经被授予pg_signal_backend,这也是允许的,不过只有超级用户才能取消超级用户的后端。
这两个函数的区别在于:pg_cancel_backend 只是取消当前某一个进程的查询操作,但不能释放数据库连接。但pg_terminate_backend 可以在pg的后台杀死这个进程,从而释放出宝贵的连接资源。
?

-- 1) 当前会话

postgres=# SELECT COUNT(*) FROM pg_stat_activity;
 count 
-------
    12
(1 row)

postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;
  datname  |  pid  | state  |         backend_type         
-----------+-------+--------+------------------------------
           | 23635 |        | logical replication launcher
           | 23633 |        | autovacuum launcher
 postgres  | 63810 | active | client backend
 postgres  | 60710 | idle   | client backend
 postgres  | 59702 | idle   | client backend
 zoo       | 59736 | idle   | client backend
 sample_db | 59772 | idle   | client backend
 zoo       | 59972 | idle   | client backend
 zoo       | 60011 | idle   | client backend
           | 23631 |        | background writer
           | 23630 |        | checkpointer
      

-- 2) 用pg_cancel_backend函数杀会话(其中的pid为60011和59972)
?

postgres=# SELECT pg_cancel_backend(60011);
 pg_cancel_backend 
-------------------
 t
(1 row)

postgres=# SELECT pg_terminate_backend(59972);
 pg_terminate_backend 
----------------------
 t
(1 row)

postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;
  datname  |  pid  | state  |         backend_type         
-----------+-------+--------+------------------------------
           | 23635 |        | logical replication launcher
           | 23633 |        | autovacuum launcher
 postgres  | 63810 | active | client backend
 postgres  | 60710 | idle   | client backend
 postgres  | 59702 | idle   | client backend
 zoo       | 59736 | idle   | client backend
 sample_db | 59772 | idle   | client backend
 zoo       | 60011 | idle   | client backend
           | 23631 |        | background writer
           | 23630 |        | checkpointer
           | 23632 |        | walwriter
(11 rows)

---- 发现pid59972会话杀掉了但pid60011没有杀掉,再执行一遍,发现还是没杀掉该会话
postgres=# SELECT pg_cancel_backend(60011);
 pg_cancel_backend 
-------------------
 t
(1 row)

postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;
  datname  |  pid  | state  |         backend_type         
-----------+-------+--------+------------------------------
           | 23635 |        | logical replication launcher
           | 23633 |        | autovacuum launcher
 postgres  | 63810 | active | client backend
 postgres  | 60710 | idle   | client backend
 postgres  | 59702 | idle   | client backend
 zoo       | 59736 | idle   | client backend
 sample_db | 59772 | idle   | client backend
 zoo       | 60011 | idle   | client backend
           | 23631 |        | background writer
           | 23630 |        | checkpointer
           | 23632 |        | walwriter
(11 rows)


-- 对应进程信息
[root@dmpg1 12661]# ps -ef |grep 60011
postgres  60011  23627  0 17:07 ?        00:00:00 postgres: postgres zoo 192.168.131.1(65478) idle
root      64115  42950  0 18:24 pts/2    00:00:00 grep --color=auto 60011

-- 3) 用pg_terminate_backend函数杀掉会话,能杀掉

postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;
  datname  |  pid  | state  |         backend_type         
-----------+-------+--------+------------------------------
           | 23635 |        | logical replication launcher
           | 23633 |        | autovacuum launcher
 postgres  | 63810 | active | client backend
 postgres  | 60710 | idle   | client backend
 postgres  | 59702 | idle   | client backend
 zoo       | 59736 | idle   | client backend
 sample_db | 59772 | idle   | client backend
 zoo       | 60011 | idle   | client backend
           | 23631 |        | background writer
           | 23630 |        | checkpointer
           | 23632 |        | walwriter
(11 rows)


postgres=# SELECT pg_terminate_backend(60011);
 pg_terminate_backend 
----------------------
 t
(1 row)

postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;
  datname  |  pid  | state  |         backend_type         
-----------+-------+--------+------------------------------
           | 23635 |        | logical replication launcher
           | 23633 |        | autovacuum launcher
 postgres  | 63810 | active | client backend
 postgres  | 60710 | idle   | client backend
 postgres  | 59702 | idle   | client backend
 zoo       | 59736 | idle   | client backend
 sample_db | 59772 | idle   | client backend
           | 23631 |        | background writer
           | 23630 |        | checkpointer
           | 23632 |        | walwriter
(10 rows)

----生成杀会话的语句

postgres=# SELECT 'SELECT pg_terminate_backend(' || PID || ');' KILL_PID,
DATID,
DATNAME,
PID,
USESYSID,
USENAME,
APPLICATION_NAME,
CLIENT_ADDR,
CLIENT_PORT,
STATE,
QUERY
FROM PG_STAT_ACTIVITY WHERE state='idle' limit 1;
              kill_pid               | datid | datname |  pid  | usesysid | usename  |     application_name     |  client_addr  | client_port | state |                                                                           query                                       
                                    
-------------------------------------+-------+---------+-------+----------+----------+--------------------------+---------------+-------------+-------+-----------------------------------------------------------------------------------------------------------------------
------------------------------------
 SELECT pg_terminate_backend(72715); | 16387 | zoo     | 72715 |       10 | postgres | pgAdmin 4 - CONN:4188715 | 192.168.131.1 |       49588 | idle  | SELECT oid, pg_catalog.format_type(oid, NULL) AS typname FROM pg_catalog.pg_type WHERE oid IN (25, 26, 19, 23, 26, 19,
 25, 869, 23, 25, 25) ORDER BY oid;
(1 row)

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:20:15  更:2022-05-06 11:22:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:42:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码