1.gp数据库后台维护
1.数据库启动:gpstart
常用可选参数:
-a:直接启动,不提示终端用户输入确认
-m:只启动master实例,主要在故障处理时使用
2.数据库停止:gpstop:
常用可选参数:
-a:直接停止,不提示终端用户输入确认
-m:只停止master实例,与gpstart –m对应使用
-M fast:停止数据库,中断所有数据库连接,回滚正在运行的事务
-u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用。
评:-a用在shell里,最多用的还是-M fast。
3.gpstate:显示Greenplum数据库运行状态,详细配置等信息
常用可选参数:
-c:primary instance 和 mirror instance 的对应关系
-m:只列出mirror实例的状态和配置信息
-f:显示standby master 的详细信息
-Q:显示状态综合信息
评:该命令默认列出数据库运行状态汇总信息,常用于日常巡检。最开始由于网卡驱动的问题,做了mirror后,segment经常down掉,用-Q参数查询综合信息还是比较有用的。
4.当通过gpstate检查有实例宕机,segment节点为failed状态,不能完成同步状态,执行以下操作步骤恢复实例:
(1)停止master实例:gpstop -m
(2)恢复segment节点:gprecoverseg
(3)gpstate -m 检查同步情况,如果处于同步状态时,执行:gpstate -m
(4)恢复primary角色:gprecoverseg -r
5.若发现changing track存在。则表明有部分节点已经处于故障中。
(1)gpstate –c检查各节点状态;
(2)执行gprecoverseg –a进行节点故障恢复。
6.如果没有master standby,建议采用定期手动备份的办法,对Master库进行完全备份,具体操作方式:
(1)以gpadmin用户登录Master机器【机器名称为mdw】
(2)切换到 /data/gpdata/gpmaster目录下,用tar命令打包。
tar -cvf /home/gpadmin/gpmaster.tar gpseg-1
(3)将/home/gpadmin/gpmaster.tar进行库外备份
7.$MASTER_DATA_DIRECTORY目录下:
(1)主机远程访问策略:pg_hba.conf
(2)数据库运行参数:postgresql.conf
(3)数据库服务器日志文件:cd $MASTER_DATA_DIRECTORY
(4)greenplum管理脚本的日志文件:superuser_home/gpAdminLogs
(5)标准的PostgreSQL系统目录:pg_*
8.在master结点修改postgresql.conf文件,让所有segment同时修改postgresql.conf文件的操作:
gpssh -f ~/seg_hosts "echo 'parameter=value'|cat ->>/gpdata/p*/*/postgresql.conf"
9.收集统计信息,回收空间
定期使用Vacuum analyze tablename 回收垃圾和收集统计信息,尤其在大数据量删除,导入以后,非常重要
评:这个说的不全面,vacuum分两种,一种是analize,优化查询计划的,还有一种是清理垃圾数据,postres删除工作,并不是真正删除数据,而是在被删除的数据上,坐一个标记,只有执行vacuum时,才会真正的物理删除,这个非常重用,有些经常更新的表,各种查询、更新效率会越来越慢,这个多是因为没有做vacuum的原因。
--回收所有垃圾,并显示详细信息,而且更新规划器统计(非常吃I/O,不推荐)
VACUUM FULL VERBOSE ANALYZE
--开启定时任务,回收经常更新的表的空间(推荐)
VACUUM VERBOSE ANALYZE tablename
--autovacuum守护进程,自动执行vacuum和analyze命令
10.数据库备份:gp_dump
常用参数:
-s: 只导出对象定义(表结构,函数等)
-a: 只导出数据,不导出对象定义
-n: 只导出某个schema
gp_dump -p 5353 -d NTP2000 -h 172.16.19.37 -s
gp_dump -p 5353 -d NTP2000 -h 172.16.19.37 -a
gp_dump -p 5353 -d NTP2000 -h 172.16.19.37 -a -t tablename
gp_dump -h 172.16.19.37 -p 5432 -d dbname -a -t tablename --gp-c
默认在master的data 目录上产生这些文件:
(1)gp_catalog_1_<dbid>_<timestamp> :关于数据库系统配置的备份文件
(2)gp_cdatabase_1_<dbid>_<timestamp>:数据库创建语句的备份文件
(3)gp_dump_1_<dbid>_<timestamp>:数据库对象ddl语句
(4)gp_dump_status_1_<dbid>_<timestamp>:备份操作的日志
在每个segment instance 上的data目录上产生的文件:
(1)gp_dump_0_<dbid>_<timestamp>:用户数据备份文件
(2)gp_dump_status_0_<dbid>_<timestamp>:备份日志
11.数据库恢复gp_restore
必选参数:
--gp-k=key :key为gp_dump导出来的文件的后缀时间戳
-d dbname :将备份文件恢复到dbname
12.登陆与退出Greenplum
#正常登陆
psql gpdb
psql -d gpdb -h gphostm -p 5432 -U gpadmin
#使用utility方式
PGOPTIONS="-c gp_session_role=utility" psql -h-d dbname hostname -p port
#退出
在psql命令行执行\q
13.参数查询
psql -c 'SHOW ALL;' -d gpdb
gpconfig --show max_connections
评:这个有用,可以管道给grep。
14.操作gpdb
(0)创建数据库
createdb -h localhost -p 5432 dhdw
创建GP文件系统
(1)#子节点,视segment数创建目录
mkdir -p /gpfsdw/seg1
mkdir -p /gpfsdw/seg2
chown -R gpadmin:gpadmin /gpfsdw
(2)#主节点
mkdir -p /gpfsdw/master
chown -R gpadmin:gpadmin /gpfsdw
gpfilespace -o gpfilespace_config
gpfilespace -c gpfilespace_config
(3)创建GP表空间
psql gpdb
create tablespace TBS_DW_DATA filespace gpfsdw;
SET default_tablespace = TBS_DW_DATA;
(4)删除GP数据库
gpdeletesystem -d /gpmaster/gpseg-1 -f
15.导出数据:
#####shell脚本--start#######
#!/bin/bash
psql -d NTP2000 -h 196.168.1.11 -p 5532 -c "\copy (select * from tablename) to /home/gpadmin/tablename.txt"
echo "导出完成."
#####shell脚本-- end #######
16.导入数据:
#####shell脚本--start#######
#!/bin/bash
psql -d NTP2000 -h 196.168.1.11 -p 5532 -c "\copy tablename from '/home/gpadmin/tablename.txt' with delimiter ';';"
echo "导出完成."
#####shell脚本-- end #######
2.gp数据库客户端维护
1.查看实例配置和状态(对应后台执行:gpstate -c)
select * from gp_configuration order by 1
主要字段说明:
Content:该字段相等的两个实例,是一对P(primary instance)和M(mirror instance)
Isprimary:实例是否作为primary instance 运行
Valid:实例是否有效,如处于false 状态,则说明该实例已经down 掉。
Port:实例运行的端口
Datadir:实例对应的数据目录
2.查看用户会话和提交的查询等信息
该表能查看到当前数据库连接的IP地址,用户名,提交的查询等。
select * from pg_stat_activity
另外也可以在master主机上查看进程,对每个客户端连接,master 都会创建一个进程。
ps -ef |grep -i postgres |grep -i con
评:常用的命令,我经常用这个查看数据库死在那个sql上了。
3.查看数据库、表占用空间
--必须在数据库所对应的存储系统里,至少保留30%的自由空间,日常巡检,要检查存储空间的剩余容量。
select pg_size_pretty(pg_relation_size('schema.tablename'));
select pg_size_pretty(pg_database_size('databasename));
评:可以查看任何数据库对象的占用空间,pg_size_pretty可以显示如mb之类的易读数据.另外,可与pg_tables,pg_indexes之类的系统表链接,统计出各类关于数据库对象的空间信息。
---表占用空间大小排名:
SELECT relname as name, sotdsize/1024/1024 as size_MB, sotdtoastsize as toast, sotdadditionalsize as other
FROM gp_toolkit.gp_size_of_table_disk as sotd, pg_class
WHERE sotd.sotdoid = pg_class.oid ORDER BY relname;
---索引占用空间
SELECT soisize/1024/1024 as size_MB, relname as indexname
FROM pg_class, gp_toolkit.gp_size_of_index
WHERE pg_class.oid = gp_size_of_index.soioid
AND pg_class.relkind='i';
---OBJECT的操作统计
SELECT schemaname as schema, objname as table, usename as role, actionname as action, subtype as type, statime as time
FROM pg_stat_operations
WHERE objname = '<name>';
4.查看锁信息:
SELECT locktype, database, c.relname, l.relation, l.transactionid, l.transaction, l.pid, l.mode, l.granted, a.current_query
FROM pg_locks l, pg_class c, pg_stat_activity a
WHERE l.relation=c.oid AND l.pid=a.procpid
ORDER BY c.relname;
主要字段说明:
relname: 表名
locktype、mode 标识了锁的类型
5.查看资源队列的状态:
资源队列和属性:select * from pg_resqueue
资源队列的分配角色:select * from pg_roles
队列存在等待的状态:select * from pg_locks
执行和等待的查询进程信息:select * from pg_stat_activity
队列限制,执行和等待查询的数量:select * from pg_resqueue_status
pg状态:select * from pg_stats
pg设置:select * from pg_settings
查看segment配置:select * from gp_segment_configuration;
文件系统:select * from pg_filespace_entry;
磁盘、数据库空间
SELECT * FROM gp_toolkit.gp_disk_free ORDER BY dfsegment;
SELECT * FROM gp_toolkit.gp_size_of_database ORDER BY sodddatname;
select * from gp_configuration
select * from gp_distribution_policy
select * from gp_id
select * from gp_version_at_initdb
select * from pg_exttable
select * from pg_class
6.查看数据分布情况
在数据库客户端执行:
select gp_segment_id,count(*) from tablename group by 1;
评:非常有用,gp要保障数据分布均匀。如数据分布不均匀,将发挥不了并行计算的优势,严重影响性能。
7.explain:在提较大的查询之前,使用explain分析执行计划、发现潜在优化机会,避免将系统资源熬尽。
explain analyze select * from tablename
评:少写了个analyze,如果只是explain,统计出来的执行时间,是非常坑爹的,如果希望获得准确的执行时间,必须加上analyze。
3.gp自带测试命令:
测试硬盘的读写速度:gpcheckperf
测试硬盘存储的带宽:gpcheckperf
测试服务器间的网络传输速度:gpchecknet/gpcheckperf
验证操作系统的环境设置:gpcheckos
压力测试:bonnie++
4.postgres常用数学函数
%:求余,7%2=1
^:平方,2^2=4
|/:开平方,|/9=3
||/:开三次根号,||/8=2
!:阶乘,!3=6
&,|,#,~:与,或,亦或,非
<<,>>:左移,右移
abs():绝对值,abs(-999.9)=999.9
ceiling():上限取整,ceiling(48.2)=49
floor():下限取整,floor(48.2)=48
pi():常数,3.1415926
random():介于0到1的随机数
round():四舍五入函数,round(22.7)=23
||:字符串连接符,'my'||'my'=mymy
Char_length(string)或者Length(string):字符串长度,Char_length('mymy')=4
Position(string in string):字符位置,Position('my' in 'ohmy')=3
Lower('MYMY')='mymy'
Upper('mymy')='MYMY'
Substring(string from n for n):字串,Substring('myohmy' from 3 for 2)='oh'
Trim(both,leading,trailing from string):裁减,Trim(' mymy ')='mymy'
select age(current_timestamp,'2008-08-12') ---4 years 8 mons 8 days 10 hours 17 mins 24.464 secs
select extract(day from current_date) ---20
5.psql语法
查看数据库中所有schema列表:\dn
查看表的结构:\d+ table_name
列出所有系统目录表:\dt S
列出数据库的外部表:\dx
查看所有的视图:\dv
查看所有的视图定义:\d+ view_name
显示所有的索引:\di
查看一个索引的定义:\d+ index_name
显示所有的序列:\ds
查看一个序列的定义:\d+ sequence_name
查看系统目录中的统计视图和表:\dtvS pg_stat*
显示系统清单:\dtS
显示系统视图清单:\dvS