原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
主要解决问题
(1) 超时sleep状态进程无用且占用资源,随着集群使用时间的增长,其所积累的该类进程也在增长,可以定时清理。
(2) 清理时可以把集群层和节点层都清理掉。
(3) 对v8和v9版本兼容。
部署方式
(1) 新建mysleep目录,将mysleep.sh文件放入其中,并赋可执行权限 chmod +x mysleep.sh
(2) 修改脚本中的参数:
uname="gbase" --数据库登录用户名
pass="gbase20110531" --数据库登录密码
vcname="vc_haha" --vc名,如果v8版本,则留空
TT=3600 --时间阈值 ,超过该运行时间的则被清理掉,单位:秒
使用方式
(1) 确保集群状态正常。
(2) 配置好以后,使用gbase用户,直接执行 sh mysleep.sh 即可。
演示样例
登陆集群层2节点
[gbase@localhost ~]$ gccli -uroot
GBase client 9.5.3.27.17c111049. Copyright (c) 2004-2025, GBase. All Rights Reserved.
gbase> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 72 |
+-----------------+
1 row in set (Elapsed: 00:00:00.00)
[gbase@localhost2 ~]$ gccli -uroot
GBase client 9.5.3.27.17c111049. Copyright (c) 2004-2025, GBase. All Rights Reserved.
gbase> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 62 |
+-----------------+
1 row in set (Elapsed: 00:00:00.00)
执行清理程序
[gbase@localhost mysleep]$ sh mysleep.sh
Processing on Coordinators...
[ 2025年 03月 28日 星期五 11:30:37 CST ] 192.168.56.175 72 killed
[ 2025年 03月 28日 星期五 11:30:37 CST ] 192.168.56.176 62 killed
Processing on Nodes...
No Sleeping Processes.
No Sleeping Processes.
登陆节点层2节点
[gbase@localhost ~]$ gncli -uroot
GBase client 9.5.3.27.17c111049. Copyright (c) 2004-2025, GBase. All Rights Reserved.
gbase> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 72 |
+-----------------+
1 row in set (Elapsed: 00:00:00.00)
[gbase@localhost2 ~]$ gncli -uroot
GBase client 9.5.3.27.17c111049. Copyright (c) 2004-2025, GBase. All Rights Reserved.
gbase> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 70 |
+-----------------+
1 row in set (Elapsed: 00:00:00.00)
执行清理程序
[gbase@localhost mysleep]$ sh mysleep.sh
Processing on Coordinators...
No Sleeping Processes.
No Sleeping Processes.
Processing on Nodes...
[ 2025年 03月 28日 星期五 11:33:15 CST ] 192.168.56.175 72 killed
[ 2025年 03月 28日 星期五 11:33:15 CST ] 192.168.56.176 70 killed
再次执行,已经清理干净
[gbase@localhost mysleep]$ sh mysleep.sh
Processing on Coordinators...
No Sleeping Processes.
No Sleeping Processes.
Processing on Nodes...
No Sleeping Processes.
No Sleeping Processes.
参考文件
[gbase@localhost mysleep]$ cat mysleep.sh
#!/bin/bash
uname="gbase"
pass="gbase20110531"
vcname="vc_haha"
gc="$GCLUSTER_HOME/bin/gbase -u$uname -p$pass"
gn="$GBASE_HOME/bin/gbase -u$uname -p$pass"
TT=3600
trim_array() {
local -a input_array=("$@")
local -a trimmed_array=()
for element in "${input_array[@]}"; do
trimmed_element=$(echo "$element" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
trimmed_array+=("$trimmed_element")
done
echo "${trimmed_array[@]}"
}
run() {
local mycmd="$1"
shift
local -a ip_array=("$@")
local time_threshold="$TT"
for ip in "${ip_array[@]}"; do
# 获取需要终止的进程 ID 列表
sql="SELECT id FROM information_schema.PROCESSLIST WHERE COMMAND='Sleep' AND TIME > $time_threshold"
ids=($( $mycmd -h"$ip" -e"$sql" -N ))
if [ ${#ids[@]} != 0 ]; then
for ((i = 0; i < ${#ids[@]}; i++)); do
sql="kill ${ids[$i]} ;"
$mycmd -h"$ip" -e"$sql"
echo "[" `date` "]" $ip ${ids[$i]} "killed"
done
else
echo "No Sleeping Processes."
fi
done
}
if [ -z "$vcname" ]; then
gncmd="gcadmin showcluster d"
else
gncmd="gcadmin showcluster vc $vcname"
fi
tmp=($(gcadmin showcluster c |grep OPEN|cut -d"|" -f3))
coor=($(trim_array "${tmp[@]}"))
tmp=($($gncmd|grep OPEN|cut -d"|" -f3))
data=($(trim_array "${tmp[@]}"))
echo "Processing on Coordinators..."
run "$gc" "${coor[@]}"
echo "Processing on Nodes..."
run "$gn" "${data[@]}"
原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。