代码改变世界

【PostgreSQL]PostgreSQL数据库层限流脚本

  abce  阅读(194)  评论(0编辑  收藏  举报
1
2
3
4
5
6
7
8
9
10
11
12
13
14
with tmp3 as
(select count(*) as cnt from pg_stat_activity WHERE pid <> pg_backend_pid() and datname='mypg1' and usename='postgres' 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='mypg1' and usename='postgres'
                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

  

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

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

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

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2016-07-22 Oracle官方文档在线查看
2016-07-22 Real-Time SQL Monitoring
2015-07-22 11G新特性 -- ASM的兼容性
2015-07-22 11G新特性 -- variable size extents
点击右上角即可分享
微信分享提示