文章目录 利用视图 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=$1 ¶ORDER 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 连接会话所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)