是否有任何工具允许在没有更多连接插槽时重新启动PostgreSQL

时间:2015-07-13 11:45:18

标签: postgresql

是否有任何自动化工具允许重新启动PostgreSQL,或者在没有更多连接插槽时杀死所有读取器上的所有待处理查询? 问题是,有时所有与读者的连接都因使用原因未知(查询速度慢)而且我们需要快速而肮脏的解决方案来监控读取器并在发生事件时终止所有查询。 我知道它更可能是解决实际问题的解决方法,但目前我的任务是编写一个脚本来做这个,但我很确定已经有了可以使用的工具了。 我所做的研究使我得出以下结果:Nagios。 不幸的是,我还在等待服务器支持团队处理我的机票。

1 个答案:

答案 0 :(得分:1)

Postgresql版本9.4

参考The Statistics Collector

select pid, query from pg_stat_activity where waiting='t';

参考Function-Admin: pg_cancel_backend

select pg_cancel_backend(pid of the postgres process); 

一个简单的bash脚本。你甚至可以从命令行传递参数

#!/bin/bash
dbname="Test"
username="postgres"
vartest=`psql -d $dbname -U $username -h localhost -p 5432 -t -c "select  pid from pg_stat_activity where waiting='f';"`
for p_var in ${vartest[@]}
do
# This is an admin function please read more on function-admin in the postgres documentation

# q_result= `psql -d $dbname -U $username -h localhost -p 5432 -t -c "SELECT pg_cancel_backend('$p_var');"`

# sanitiy check just grabs the pid and related query

q_result=`psql -d $dbname -U $username -h localhost -p 5432 -t -c "select pid, query  from pg_stat_activity where  pid='$p_var';"`
done