针对gbase8s数据库智能大对象自动扩展的脚本

1.场景

  • gbase8s数据库智能大对象无法自动扩展,当智能大对象空间不足时,会影响数据库的使用

2.脚本的功能

  • 监控数据库的智能大对象空间的元数据空间和数据空间,当二者有一不足时,都会触发扩展空间的命令
  • 以10%为阈值,当不足百分之10时,会扩展100G

3.shell脚本

#!/bin/bash

# 获取脚本的位置
SHELL_PATH=$(dirname "$(readlink -f "$0")")


# 获取默认的智能大对象数据空间
SBSPACE=$(onstat -g cfg | grep ^SBSPACENAME | awk '{print $NF}')

# 根据现有的智能大对象数据文件路径筛选出来一个决定路径
SBPATH=$(onstat -d | grep -m 1 POSB | awk '{print $NF}')

# 获取当前的时间
SBDATE=$(date "+%Y_%m_%d_%H_%M_%S")

# 拼接形成新的数据文件名称
SBFILE="${SBPATH}_${SBDATE}"

# 使用 SQL 查询数据库,查看智能大对象的各个大小指标并导入到 log.txt 文件中
echo "select 
a.name as 数据空间的名称,
count(*) as 数据空间的chunk数量, 
(sum(b.pagesize)/count(*)/1024)::decimal(10,0)||'KB' as 数据空间页大小,
sum(b.udsize) as chunk中总数据页数, 
sum(b.udfree) as 剩余数据页数, 
sum(b.mdsize) as chunk中metadata数据总页数, 
sum(b.nfree) as 剩余metadata数据可用页数  
from sysmaster:sysdbspaces a, sysmaster:syschunks b where a.dbsnum=b.dbsnum and is_sbspace=1 group by 数据空间的名称;" | dbaccess sysmaster > $SHELL_PATH/log.txt

# 从 log.txt 文件中提取剩余页数和总页数
a=$(grep 剩余数据页数 $SHELL_PATH/log.txt | awk '{print $NF}')
b=$(grep chunk中总数据页 $SHELL_PATH/log.txt | awk '{print $NF}')
c=$(grep 剩余metadata数据可用页 $SHELL_PATH/log.txt | awk '{print $NF}')
d=$(grep chunk中metadata数据总 $SHELL_PATH/log.txt | awk '{print $NF}')

# 输出智能大对象空间的信息
echo "智能大对象空间目前还剩余数据页:$a 智能大对象总共数据空间大小为:$b"
echo "智能大对象空间目前还剩余metadata页:$c 智能大对象总共metadata数据空间大小为:$d"

# 计算数据空闲比例
awk -v a=$a -v b=$b 'BEGIN {
    if (b == 0) {
        printf "空闲比例无法计算,总页数为0\n"
    } else {
        ratio = a / b * 100
        printf "数据空闲比例为:%.6f%%\n", ratio
        if (ratio < 10) {
            printf "数据空间不足!\n"
            printf "空闲空间占总空间的比例为 %.6f%%\n", ratio
            printf "开始创建当前时间的数据文件! \n"
        } else {
            printf "空闲空间占总空间的比例为 %.6f%%\n", ratio
            printf "智能大对象空间充足,不进行新增。\n"
        }
    }
}' > $SHELL_PATH/temp_output.txt

# 计算 metadata 数据空闲比例
awk -v c=$c -v d=$d 'BEGIN {
    if (d == 0) {
        printf "metadata 空闲比例无法计算,总页数为0\n"
    } else {
        ratio = c / d * 100
        printf "metadata 空闲比例为:%.6f%%\n", ratio
        if (ratio < 10) {
            printf "metadata 空间不足!\n"
            printf "空闲metadata占总空间的比例为 %.6f%%\n", ratio
            printf "开始创建当前时间的数据文件! \n"
        } else {
            printf "空闲metadata占总空间的比例为 %.6f%%\n", ratio
            printf "智能大对象metadata空间充足,不进行新增。\n"
        }
    }
}' >> $SHELL_PATH/temp_output.txt

# 读取 AWK 的输出结果
awk_output=$(cat $SHELL_PATH/temp_output.txt)

# 根据 AWK 的输出结果执行后续命令
if echo "$awk_output" | grep -q "数据空间不足!"; then
    echo "$awk_output"
    echo "开始创建当前时间的数据文件! "
    echo "$SBFILE"
    touch "$SBFILE"
    chmod 660 "$SBFILE"
    onspaces -a "$SBSPACE" -p "$SBFILE" -o 0 -s 100000000
    onmode -l
    onmode -c
else
    echo "$awk_output"
fi

# 读取结果判断是否创建大 metadata chunk
if echo "$awk_output" | grep -q "metadata 空间不足!"; then
    echo "$awk_output"
    if [ ! -f "$SBFILE" ]; then
       echo "开始创建当前时间的数据文件! " >> log.txt
       touch "$SBFILE"
       chmod 660 "$SBFILE"
       onspaces -a $SBSPACE -p $SBFILE -o 0 -s 100000000 -Ms 20000000
       onmode -l
       onmode -c
    else 
       echo "数据空间已经创建,metadata本次不会再新建" >> $SHELL_PATH/log.txt
    fi
else
    echo "$awk_output"
fi

# 清理临时文件



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值