1、Greenplum 日常简明维护手册1. 数据库启动:gpstart 常用参数: -a : 直接启动,不提示终端用户输入确认-m:只启动 master 实例,主要在故障处理时使用访问单个数据实例:PGOPTIONS=-c gp_session_role=utility psql template1 -p 5432启动某个segment instance : pg_ctl stop/start -D /datadir/取端口号:select * from gp_segment_configuration 启动以后会在/tmp/ 下生成一个.lock 隐藏文件,记录主进程号。2. 数据库停止:gp
2、stop:常用可选参数:-a:直接停止,不提示终端用户输入确认-m:只停止 master 实例,与 gpstart m 对应使用-f:停止数据库,中断所有数据库连接,回滚正在运行的事务-u:不停止数据库,只加载 pg_hba.conf 和 postgresql.conf 中运行时参数,当改动参数配置时候使用。连接数,重启3. 查看实例配置和状态select * from gp_segment_configuration order by content ;select * from pg_filespace_entry ;主要字段说明:Content:该字段相等的两个实例,是一对(primar
3、y instance)和(mirror Instance)Isprimary:实例是否作为 primary instance 运行Valid:实例是否有效,如处于 false 状态,则说明该实例已经 down 掉。Port:实例运行的端口Datadir:实例对应的数据目录4. gpstate :显示 Greenplum 数据库运行状态,详细配置等信息常用可选参数:-c:primary instance 和 mirror instance 的对应关系-m:只列出 mirror 实例的状态和配置信息-f:显示 standby master 的详细信息该命令默认列出数据库运行状态汇总信息,常用于日常
4、巡检。5. 查看用户会话和提交的查询等信息select * from pg_stat_activity 该表能查看到当前数据库连接的 IP 地址,用户名,提交的查询等。另外也可以在 master 主机上查看进程,对每个客户端连接,master 都会创建一个进程。ps -ef |grep -i postgres |grep -i con 杀进程:Linux: kill -11 PIDSql : pg_cancel_backend(pid)ps ef |grep i postgre |grep i con6. 查看数据库、表占用空间查询表大小:select pg_size_pretty(pg_re
5、lation_size(schema.tablename);例: select pg_size_pretty(pg_relation_size(iidp_code.cf_load_state);表和索引select pg_size_pretty(pg_total_relation_size(iidp_code.cf_load_state ); 查询数据库大小select pg_size_pretty(pg_database_size(databasename);例:select pg_size_pretty(pg_database_size(BDDJ_S_T);-单个库select datna
6、me,pg_size_pretty(pg_database_size(datname) from pg_database; -所有库分区表:Select * from pg_partitions where 查某个schema 占用的空间:select pg_size_pretty(pg_relation_size(tablename) from pg_tables t inner join pg_namespace d on t.schemaname=d.nspname group by d.nspname 必须在数据库所对应的存储系统里,至少保留30%的自由空间,日常巡检,要检查存储空间的
7、剩余容量。7. 收集统计信息,回收空间定期使用Vacuum analyze tablename 回收垃圾和收集统计信息,尤其在大数据量删除,导入以后,非常重要将 delete 或 update 的“旧”数据放到 Rollback Segment,与表分开存放。并发事务为了保证数据一致性,需要从 Rollback Segment 上恢复数据。Greenplum:“ 旧数据”与表存放在一起,对旧的数据做了标志。并发事务通过transaction ID(XID)判断数据是否可用系统表也是需要进行vacuum :#!/bin/bashDBNAME=“databasename“VCOMMAND=“VAC
8、UUM ANALYZE“#VCOMMAND=“VACUUM FULL ANALYZE“psql -tc “select $VCOMMAND | pg_catalog. | relname | ; from pg_classa,pg_namespace b where a.relnamespace=b.oid and b.nspname= pg_catalog anda.relkind=r“ $DBNAME | psql -a $DBNAME长期没有vaccum 的大表,使用重建表/drop 表的方式,消除垃圾空间。Alter table xxx rename to yyyy.8. 查看数据分布
9、情况两种方式: Select gp_segment_id,count(*) from tablename group by 1 ; 如数据分布不均匀,将发挥不了并行计算的优势,严重影响性能。查看磁盘分布select dfhostname, dfspace,dfdevice from gp_toolkit.gp_disk_free order by dfhostname9. 实例恢复:gprecoverseg通过gpstate 或gp_segment_configuration 发现有实例down 掉以后,使用该命令进行回复,恢复时候不需要停机,不影响应用10. 查看锁信息:SELECT loc
10、ktype, database, c.relname, l.relation, l.transactionid, l.transaction, l.pid, l.mode, l.granted, a.current_queryFROM pg_locks l, pg_class c, pg_stat_activity aWHERE l.relation=c.oid AND l.pid=a.procpidORDER BY c.relname;主要字段说明:relname: 表名locktype、mode 标识了锁的类型MVCC: 读写相互不影响 select / insert update del
11、ete 避免死锁: delete 和 update 是 表级排他EXCLUSIVE锁。 11. 数据库备份 gp_dump, pg_dump常用参数:-s: 只导出对象定义(表结构,函数等)-n: 只导出某个schemagp_dump 默认在 master 的data 目录上产生这些文件:gp_catalog_1_ :关于数据库系统配置的备份文件gp_cdatabase_1_:数据库创建语句的备份文件gp_dump_1_:数据库对象ddl 语句gp_dump_status_1_:备份操作的日志在每个segment instance 上的data目录上产生的文件:gp_dump_0_:用户数据备
12、份文件gp_dump_status_0_:备份日志12. 数据库恢复 gp_restore pg_restore必选参数:-gp-k=key :key 为gp_dump 导出来的文件的后缀时间戳-d dbname :将备份文件恢复到dbname13. Master 主机硬件故障时,如何切换至 Stand by Master,切换成功后是否需要进行数据检查或恢复等 HA答:在stand by master 主机上,运行 gpactivatestandby -d /gpdata 进行切换。由于Master 只存储系统元数据信息,切换成功后,一般不需要进行数据检查和恢复。日常巡检中要检查Stand
13、by master 是否同步,可以通过表gp_master_mirroring 确认,如果发现不同步,可以通过命令:gpinitstandby -s standby_master_hostname n 使得master和standby 重新同步。14. 当 Master 主机硬件故障排除时,如何由 Stand by 切换至原 Master 主机。答:1,在standby master运行: gpinitstandby s original_master_hostname 2,在 standby master 上运行:gpstop m, 注意这里只停止 master 实例3,在原来的 maste
14、 上运行:gpactivatestandby -d /gpdata。4,在原来的 master 上运行:gpinitstandby -s original_standby_master_hostname15. 日志: master 和 segment 上分别有日志:$DATADIR/pg_log/*.csv$DATADIR:select * from pg_filespace_entry ; 使用外部表将日志导入数据库,进行分析。使用 xfs 文件系统。后台存储目录结构:base 下每个目录,对应 select oid ,* from pg_database ;select relfileno
15、de from pg_class : ;16. gpconfig : 4.0 新增加管理工具,参数配置工具;-c | -change -v | -value value-m | -mastervalue master_value-s | -show gpconfig -c max_connections -v 100 -m 1017. gpcheckperf :网络:gpcheckperf -f hostfile_gpchecknet_ic1 -r N netperf -d /tmp磁盘 IOgpcheckperf -f hostfile_gpcheckperf -d /data1 -d /d
16、ata2 -r dlinux DD 命令:dd if=/dev/zero of=/vol2/a.test bs=256k count=161000 dd if=/vol2/b.test of=/dev/null bs=256k count=16000018. gpssh : 同时登陆到多个机器上,进行操作Gpssh -h sdw1 h sdw2 -h sdw3 19. gp_toolkit: 管理工具包: gp_bloat_diag gp_stats_missing更多详细信息参见 GpadminGuide appendix I ;pg_stat_last_operation:Shows the last time certain database operations were performed on a database object, for example, the last time a table was vacuumed