GP数据库日常维护
GPDB的日常维护包括以下两点
对所有用户表执行‘analyze’
1. 对所有用户表执行‘analyze’, 步骤如下。这个可以考虑一个月执行一次,或者更短时间执行过一次。
psql
\o /tmp/table_analyze.out;
select 'analyze '||schemaname||'.'||tablename||';' from pg_tables where schemaname not in ('pg_catalog','information_schema','gp_toolkit') and tablename not like '%1_prt_%';
然后将这个/tmp/ table_analyze.out 内容拆分为多次执行(比如每次执行内容放入table_analyze1.out),并行执行(因为把所有一起执行比较慢)。
注意大表比如analyze public.tpd_lcdl; 表比较大,单独执行,还有C网的大表
执行nohup psql -f table_analyze1.out & 接着复制下一段再执行
具体如下:
以gpadmin用户登录到GP数据库服务器上,然后进入psql模式下,运行select语句,把查询出来的语句复制粘贴到table_analyze.out文件中,如果不拆分就执行在最后nohup psql –f /tmp/ table_analyze.out &
如下:
可以直接复制粘贴如下命令行
psql
\o /tmp/table_analyze.out;
然后粘贴查询语句后回车执行
输入\q 后回车退出,可以见到在/tmp 目录下有table_analyze.out文件
自动将查询结果的“analyze public.XXXX”这些内写到table_analyze.out文件中,最后给table_analyze.out文件赋可执行权限:
如果不分多次执行就是执行 nohup psql –f table_analyze.out &
ps -ef|grep table_analyze.out 查看执行状态,如果发现进程在像上面图的,说明还在执行,如果没存在像下面截图在说明执行完成了。
对catalog 表执行‘’vacuum full analyze' 操作
二:对catalog 表执行‘’vacuum full analyze' 操作。这个也可以一个月执行一次。
#!/bin/bash
DBNAME="niosdb"
VCOMMAND="VACUUM FULL ANALYZE"
psql -tc "select '$VCOMMAND' || ' pg_catalog.' || relname || ';' from pg_class a,pg_namespace b where a.relnamespace=b.oid and b.nspname= 'pg_catalog' and a.relkind='r'" $DBNAME | psql -a $DBNAME
将这个脚本保存为一个shell 文件(这个文件已经有,在/home/gpadmin/vacuum下的vacuum_full_analyze.sh)。
1、如果在正常模式下也可以执行,不用重启数据库直接执行,但是应该比受限模式下更慢点,数据也可以入库。
2、正常来说要把数据库重启到维护模式下,但是数据不能入库。先停止入库进程。ps -ef|grep 8080查找后杀掉进程。然后将数据库重启为restricted mode后,就可以执行了。执行完毕后,正常启动数据库。
备注:数据库的restricted mode的操作方法如下:
首先把数据库关闭,然后运行gpstart -R 启动,就进入了restricted mode。然后执行,执行完毕后可运行gpstop -M fast关闭restricted mode。然后启动数据库。
gpstop -M fast
gpstart -R
cd /home/gpadmin/vacuum
sh vacuum_full_analyze.sh
过程可查看进程,如下存在说明还没执行完,ps ef|grep vacuum_full_analyze.sh
花13天还没执行完。