gp优化脚本
更新时间: 2025-06-03 16:57:19
阅读 6
背景
gp随着使用场景越来越多,数据量越来越大,需要增加查杀进程的优化脚本,防止连接数卡死的问题
gp连接监控及查询终止脚本
#!/bin/bash
# Greenplum连接监控及查询终止脚本
# 配置数据库连接参数
GPHOME=/home/gpadmin/greenplum-db
source $GPHOME/greenplum_path.sh
export PGUSER='gpadmin' # 替换为实际管理账号
export PGDATABASE='youdata' # 替换为监控数据库名
BACKUP_DIR="/home/${PGUSER}/mpp_stat_monitor"
LOG_FILE="${BACKUP_DIR}/mpp_conn_mon.log"
THRESHOLD=180 # 设置最大连接阈值
# 获取有效用户连接数(排除系统进程)
active_conn=$(psql -t -A -c "SELECT COUNT(*)
FROM pg_stat_activity
WHERE usename NOT IN ('${PGUSER}', 'postgres') AND application_name NOT IN ( 'GPCMD', 'psql') ;")
mkdir -p ${BACKUP_DIR}
# 阈值判断与处理逻辑
if [ $active_conn -gt $THRESHOLD ]; then
# 获取活动查询进程ID
pids=$(psql -t -A -c "SELECT procpid
FROM pg_stat_activity
WHERE usename NOT IN ( '${PGUSER}', 'postgres' )
AND NOT waiting ;")
echo "$(date +"%Y-%m-%d %T") INFO: start to record proc" >> $LOG_FILE
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
FILENAME="stat_${TIMESTAMP}.csv"
psql -c "copy (select * from pg_stat_activity) TO '${BACKUP_DIR}/${FILENAME}' "
# 终止所有活动查询
for pid in $pids; do
echo "$(date +"%Y-%m-%d %T") INFO: try to cancel backend $pid" >>$LOG_FILE
psql -c "SELECT pg_terminate_backend($pid);" >/dev/null
done
# 记录审计日志
echo "$(date +"%Y-%m-%d %T") WARNING: Connection surge detected ($active_conn). Terminated ${#pids[@]} active queries." >> $LOG_FILE
else
echo "$(date +"%Y-%m-%d %T") INFO: Current connections: $active_conn" >> $LOG_FILE
fi
以上第一二行参数需要根据实际配置来更改,THRESHOLD=180的含义是连接数超过180之后,杀掉卡死的进程,并记录在日志文件中。
将这个脚本放在计划任务中,每分钟执行一次。
文档反馈
以上内容对您是否有帮助?