GBase 8a
运维管理
文章
V862版本实时同步的中间表快速删除,引起ddl 任务失败或积压问题
发表于2024-03-19 13:50:2591次浏览3个评论
实时同步的中间表快速删除,引起ddl 任务失败或积压问题
表现:
gcadmin 查看有状态1 的情况,代表数据不一致。gcadmin showdmlevent, showdmlstorageevent,showddlevent 有同步event失败。
V862R33之前的版本,由于实时同步入库数据表比较多,同步过快,会一定程度积压同步event, 当数量到达一定程度,会导致数据库变慢,甚至历史有引起OOM的情况,是这个问题导致。
原因:
由于实时同步使用的中间表快速删除数据,或者drop数据,插入数据等,同步的数据的事件会失败,长时间积压,会引起数据库工作不正常,出现一些资源不足的情况。
解决方法:
定时清除相应的失败的event即可
实现方法:
实用shell十分钟查看一下状态,状态结果有临时表event失败的情况时,就进行清理,实现代码如下:
见74节点的/home/gbase/clear_event.sh 脚本:
#! /bin/sh
source /home/gbase/.gbase_profile
cd $HOME
INFO_FILE=$HOME/gbevent.out
LOG_FILE=$HOME/clearevent.out
## 检查ddlevent输出到文件:
gcadmin showddlevent |grep ObjectName > $INFO_FILE
NOW_TIME=`date '+%Y-%m-%d %H:%M:%S'`
## 循环判断是否有临时表的event失败,有则处理:
while read line
do
array=(${line//:/ })
if [[ ${array[1]} == *.__* ]];then
echo "start clear ${array[1]} event"
python -c "import gcware; gcware.clearddlfevent('${array[1]}')"
echo "clear ${array[1]} at ${NOW_TIME}" >>$LOG_FILE
fi
done < $INFO_FILE
#echo "clear ddlevent done!" >>$LOG_FILE
## 检查dmlevent输出到文件:
gcadmin showdmlevent |grep ObjectName > $INFO_FILE
NOW_TIME=`date '+%Y-%m-%d %H:%M:%S'`
## 循环判断是否有临时表的event失败,有则处理:
while read line
do
array=(${line//:/ })
if [[ ${array[1]} == *.__* ]];then
echo "start clear ${array[1]} event"
python -c "import gcware; gcware.cleardmlfevent('${array[1]}')"
echo "clear ${array[1]} at ${NOW_TIME}" >>$LOG_FILE
fi
done < $INFO_FILE
#echo "clear dmlevent done!" >>$LOG_FILE
gcadmin showdmlstorageevent |grep ObjectName > $INFO_FILE
NOW_TIME=`date '+%Y-%m-%d %H:%M:%S'`
while read line
do
array=(${line//:/ })
if [[ ${array[1]} == *.__* ]];then
echo "start clear ${array[1]} event"
python -c "import gcware; gcware.cleardmlstoragefevent('${array[1]}')"
echo "clear ${array[1]} at ${NOW_TIME}" >>$LOG_FILE
fi
done < $INFO_FILE
#echo "clear dmlstorageevent done!" >>$LOG_FILE评论
登录后才可以发表评论
热门帖子
- 12025-12-01浏览数:182764
- 22023-05-09浏览数:25062
- 42023-09-25浏览数:18526
- 52020-05-11浏览数:17529