数据分布是Deepgreen数据库中经常需要优化的一个点,为了将数据均匀分布,经常需要在建表初期指定一个合理的分布键。但是随着数据的增多,分区表不免会产生数据倾斜,今天分享一个脚本,用于查询分区事实表的数据分布状态,给后期分布键的调整提供参考。
脚本简单封装了运维常用的查询语句:
#!/bin/bash
# filename: distributed_status.sh
IFS=$'\n'
db=$1
echo "You will examinate database $1's distribution status!"
# 读取并生成分布状态检查语句存入变量
distributed_status_array=$(psql -p 15432 -d $db -t -c "select 'SELECT gp_segment_id,count(*) from '||schemaname||'.'||tablename||' group by gp_segment_Id;' from pg_partitions group by schemaname,tablename;")
#定义循环查询函数
function distributed_status(){
for i in $distributed_status_array
do
echo $i
echo "$(psql -h 127.0.0.1 -p 5432 -d $db -t -c "$i")"
done
}
#执行函数
distributed_status
脚本执行前,需要在deepgreen用户下赋予可执行权限;执行时,在脚本后面传入数据库名:
dgadmin@flash:~$ ./distributed_status.sh tpch
如果IP和端口号与脚本不一致,可以在创建时相应修改~