目的:
清理gp DB中长时间占用会话数的会话,释放空闲会话,保证总会话数不会超过系统设置上限。
原因:
gp中设置的会话数繁忙时间段会超过总上限。
gpconfig -s max_connections
Values on all segments are consistent
GUC : max_connections
Master value: 500
Segment value: 2500
比如master设置为500,一旦超过这个数量级,新会话则建立不了,DB会发出一个告警。
做法:
利用crontab job进行定时(每10分钟)清理一次idle超过2小时的会话。
crontab -l
*/10 * * * * /home/gpadmin/script/kill_long_idle.sh
cat /home/gpadmin/script/kill_long_idle.sh
#!/bin/bash
source /usr/local/greenplum-db/greenplum_path.sh
psql -d postgres -U gpadmin -w -ac "SELECT pg_terminate_backend(pid) from pg_stat_activity where state='idle' and xact_start is null and backend_xid is null and backend_xmin is null and rsgname='unknown' and now()-query_start>'02:00:00' and pid <> pg_backend_pid() and usename<>'gpadmin' and usename<>'gpmon' order by query_start;"
exit 0