背景:

某些客户场景会有大查询sql,时间长了会影响gp的性能,所以需要清理

清理脚本:

需要注意:脚本在部署时,需根据部署GPHOME、source、MASTER_DATA_DIRECTORY更改;脚本部署用gp管理员账号

#!/bin/bash
GPHOME=/home/gpdb/greenplum-db
LOGFILE=/home/gpdb/long_query_cancel_history
source $GPHOME/greenplum_path.sh
t=`date "+%Y-%m-%d %H:%M:%S"`
echo $t >>$LOGFILE
# BI后端的查询默认超时时间就是10 minutes,因此select 配置超过10 minutes就直接取消掉查询
psql -x -d netease -q -c "select now(), query_start,  current_query, pg_cancel_backend(procpid) from pg_stat_activity where current_query != '<IDLE>' and  query_start < now() - interval '10 minutes'  and usename = 'youdata'"  >> $LOGFILE 2>&1

# BI后端的insert语句会长达几十分钟,这里需要配置的超时时间长一点
psql -x -d netease -q -c "select now(), query_start,  current_query, pg_cancel_backend(procpid) from pg_stat_activity where current_query != '<IDLE>' and  query_start < now() - interval '60 minutes'  and usename = 'youdata_insert'"  >> $LOGFILE 2>&1
# DDL类型的操作理论上不会维持太久,可能会因为查询卡住一段时间,因此超时时间与普通查询一致
psql -x -d netease -q -c "select now(), query_start,  current_query, pg_cancel_backend(procpid) from pg_stat_activity where current_query != '<IDLE>' and  query_start < now() - interval '10 minutes'  and usename = 'youdata_admin'"  >> $LOGFILE 2>&1

将上面的内容复制到query_monitor.sh脚本中,按照部署情况修改脚本前面的几个关键变量值后,保存增加执行权限

使用crontab -e定期调度该脚本,推荐调度频率是一分钟一次.