查看和终止 PostgreSQL 连接会话

查看和终止 PostgreSQL 连接会话,第1张

概述当我们连接PostgreSQL遇到FATAL: sorry, too many clients already.或者FATAL: remaining connection slots are reserved for non-replication superuser connections这种连接数过多的错误时,可以通过pg_stat_activity或者ps命令查看连接进程。使用pg_cancel_backend()、pg_terminate_backend()或者kill命令终止正在运行的语句和进程。


文章目录 利用视图 pg_stat_activity 查看连接会话通过 *** 作系统命令查看连接会话利用 pg_cancel_backend() 终止正在运行的语句通过 *** 作系统命令终止正在运行的语句利用 pg_terminate_backend() 终止连接会话通过 *** 作系统命令终止连接会话

大家好,我是只谈技术不剪发的 Tony 老师。今天给大家介绍一下如何如何查看和终止 Postgresql 的连接会话。

在 Postgresql 中,配置参数 max_connections 决定了数据库的并发连接上限,默认值为 100:

postgres=> show max_connections; max_connections ----------------- 100(1 row)

这个数值还包括了预留给 superuser 的一些连接,具体数量由参数 superuser_reserved_connections 决定:

postgres=> show superuser_reserved_connections; superuser_reserved_connections -------------------------------- 3(1 row)

也就是说,当连接数到达 max_connections - superuser_reserved_connections 时,只有超级用户才能建立新的数据库连接;普通用户连接时将会返回错误信息“FATAL: sorry,too many clIEnts already.”或者“FATAL: remaining connection slots are reserved for non-replication superuser connections”。当我们遇到这种连接数过多的错误,或者由于其他原因需要找出目前存在哪些客户端的连接时,可以采用以下方法。

利用视图 pg_stat_activity 查看连接会话

Postgresql 动态统计视图 pg_stat_activity 中的每一行代表了一个后台进程,包含了该进程当前活动相关的信息。

postgres=> select pID,       datname as database_name,       usename as user_name,       application_name,       clIEnt_addr,       backend_start,       state,       state_change,       wait_event_type,       wait_event,       query,       backend_typefrom pg_catalog.pg_stat_activity;pID  |database_name|user_name|application_name                         |clIEnt_addr |backend_start      |state |state_change       |wait_event_type|wait_event         |query                                                                                                                                                                                                                                                          |backend_type                |-----|-------------|---------|-----------------------------------------|------------|-------------------|------|-------------------|---------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------| 1677|             |         |                                         |            |2020-07-06 09:29:33|      |                   |Activity       |autoVacuumMain     |                                                                                                                                                                                                                                                               |autovacuum launcher         | 1679|             |postgres |                                         |            |2020-07-06 09:29:33|      |                   |Activity       |LogicalLauncherMain|                                                                                                                                                                                                                                                               |logical replication launcher|23483|hrdb         |postgres |DBeaver 7.1.2 - Main <hrdb>              |192.168.56.1|2020-07-08 08:09:58|IDle  |2020-07-08 08:09:58|ClIEnt         |ClIEntRead         |SHOW search_path                                                                                                                                                                                                                                               |clIEnt backend              |23484|hrdb         |postgres |DBeaver 7.1.2 - Metadata <hrdb>          |192.168.56.1|2020-07-08 08:09:58|IDle  |2020-07-08 08:09:58|ClIEnt         |ClIEntRead         |SELECT t.oID,t.*,c.relkind,format_type(nullif(t.typbasetype, 0), t.typtypmod) as base_type_name¶FROM pg_catalog.pg_type t¶left OUTER JOIN pg_class c ON c.oID=t.typrelID¶WHERE typnamespace=$1ORDER by t.oID                                                 |clIEnt backend              |23486|pagila       |postgres |DBeaver 7.1.2 - sqlEditor <Script-13.sql>|192.168.56.1|2020-07-08 08:09:58|active|2020-07-08 08:10:30|               |                   |select pID,¶       datname as database_name,¶       usename as user_name,¶       application_name,¶       clIEnt_addr,¶       backend_start,¶       state,¶       state_change,¶       wait_event_type,¶       wait_event,¶       query,¶       backend_type¶fr|clIEnt backend              |23487|pagila       |postgres |DBeaver 7.1.2 - Main <pagila>            |192.168.56.1|2020-07-08 08:09:58|IDle  |2020-07-08 08:09:58|ClIEnt         |ClIEntRead         |SHOW search_path                                                                                                                                                                                                                                               |clIEnt backend              |23488|pagila       |postgres |DBeaver 7.1.2 - Metadata <pagila>        |192.168.56.1|2020-07-08 08:09:58|IDle  |2020-07-08 08:10:00|ClIEnt         |ClIEntRead         |SELECT t.oID, t.typtypmod) as base_type_name FROM pg_catalog.pg_type t¶left OUTER JOIN pg_class c ON c.oID=t.typrelID¶WHERE t.oID=$1                                                                        |clIEnt backend              | 1675|             |         |                                         |            |2020-07-06 09:29:33|      |                   |Activity       |BgWriterHibernate  |                                                                                                                                                                                                                                                               |background writer           | 1674|             |         |                                         |            |2020-07-06 09:29:33|      |                   |Activity       |CheckpointerMain   |                                                                                                                                                                                                                                                               |checkpointer                | 1676|             |         |                                         |            |2020-07-06 09:29:33|      |                   |Activity       |WalWriterMain      |                                                                                                                                                                                                                                                               |walwriter                   |

查询结果不仅返回了客户端连接对应的服务器进程,也包括 Postgresql 服务器的各种守护进程。其中,

pID 代表了后台进程的 ID;datname 是进程连接的数据库,对于后台守护进程显示为空;usename 是连接数据库使用的用户名,对于后台守护进程显示为空;application_name 是连接数据库的应用程序,对于后台守护进程显示为空;clIEnt_addr 是客户端的 IP 地址,对于后台守护进程或者通过 Unix 套接字连接的进程显示为空;backend_start 是进程启动的时间点,对于客户端的后台进程是连接服务器的时间点;state 代表了进程当前的状态,可能的取值包括 active、IDle、IDle in transaction、IDle in transaction (aborted)、fastpath function call 以及 Disabled;state_change 是最后一次状态的修改时间;wait_event_type 表示进程正在等待的事件类型,如果没有等待显示为空;可能的取值包括 LWLock、Lock、BufferPin、Activity、Extension、ClIEnt、IPC、Timeout 以及 IO;wait_event 表示进程正在等待的事件名称,如果没有等待显示为空;query 是进程最后一次执行的查询语句。对于 active 状态,显示正在执行的查询;其他状态显示上一次执行的查询;backend_type 是进程的类型。

总结

以上是内存溢出为你收集整理的查看和终止 PostgreSQL 连接会话全部内容,希望文章能够帮你解决查看和终止 PostgreSQL 连接会话所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1151210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存