首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[转]Postgresql数据库层限流脚本

[转]Postgresql数据库层限流脚本

作者头像
保持热爱奔赴山海
发布2025-07-01 22:07:10
发布2025-07-01 22:07:10
1340
举报
文章被收录于专栏:数据库相关数据库相关

原文地址 https://oracleblog.org/useful-script/script-to-limit-process-for-postgresql/

作用:程序执行的语句为类似select now语句,并且该进程是activie的,当这样的进程超过400个时,按照进程发起的先后顺序,先杀掉早期的进程。该语句每秒检查一次,每次发现有超过400个时,kill掉最早的10个。

注:语句内容,进程数上限,每次杀的进程数,检查时间,都可以根据自己的情况酌情修改。

代码语言:txt
复制
-- 下面这个例子, 匹配的是: 
(查询条件 %select now% )  AND  (活跃连接数 超过400 )AND  ( 数据库是 mydb )AND  (账号是 app01 )


with tmp3 as
(select count(*) as cnt from pg_stat_activity WHERE pid <> pg_backend_pid() and datname='mydb' and usename='app01' and state='idle' and query like '%select now%')
select 
case
 when cnt <= 400 then 
 (with tmp1 as ( select pg_terminate_backend(pid) from  (select pid from pg_stat_activity WHERE 1=2 ) as foo1)
 select count(*) from tmp1 )
 when cnt > 400 then 
 (with tmp2 as ( select pg_terminate_backend(pid) from  (select pid from pg_stat_activity WHERE pid <> pg_backend_pid() and datname='mydb' and usename='app01' 
                and state='active' and query like '%select now%' order by backend_start 
                limit 10) as foo2)
 select count(*) from tmp2 )
end as kill_if_too_many_process
from tmp3 \watch 1

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档