高效使用Greenplum:入门、进阶与数据中台
上QQ阅读APP看书,第一时间看更新

3.4 Greenplum数据库常用命令

3.4.1 启动和停止

gpstart命令用于启动数据库,常用的命令如下。

#查看gpstart参数说明
gpstart --help
#普通模式启动Greenplum
gpstart
#直接启动Greenplum,不提示终端用户输入确认
gpstart -a
#只启动master实例,主要在故障处理时使用
gpstart -m PGOPTIONS='-c gp_session_role=utility' psql
#限制模式,只有超级管理员可以连接
gpstart -R

gpstop命令用于关闭数据库,常用的命令如下。

#查看gpstop命令参数
gpstop --help
#正常关闭,需要用户输入y|n确认 
gpstop
#直接关闭,不需要用户输入y|n确认
gpstop -a
#3种关闭模式
#快速关闭。正在进行的任何事务都被中断,然后回滚
gpstop -M fast
#立即关闭。正在进行的任何事务都被中止。不推荐使用这种关闭模式,在某些情况下可能会导致数据库损坏,需要手动恢复
gpstop -M immediate
#智能关闭。如果存在活动连接,则此命令发出警告并等待连接关闭,这是默认的关机模式
gpstop -M smart
#只停止master实例,进入维护模式
gpstop -m
#重新加载配置文件postgresql.conf 和pg_hba.conf,不停止数据库
gpstop –u
#重启所有egment实例
gpstop –r

gpstate命令用于查看数据库运行状态,常用的命令如下。

#gpstate查看参数信息
gpstate --help
#显示详细信息
gpstate -s
#显示Primary Segment和Mirror Segment实例的对应关系
gpstate -c
#显示 Standby Master节点的详细信息
gpstate -f
#显示镜像实例的状态和配置信息
gpstate -m
#显示状态综合信息
gpstate -Q
#显示版本信息
gpstate -i

3.4.2 修改参数

gpconfig命令用于修改系统参数,是最常用的管理命令之一。

#查看参数max_connections的值
gpconfig --show max_connections
#修改配置参数<parameter name>的值为<parameter value>
#比如:gpconfig-c log_statement -v DDL
gpconfig-c <parameter name> -v <parameter value>
#删除配置项
gpconfig -r <parameter name>

在日常数据库运维中,我们通常会调整以下参数,现逐一说明用途。

1)work_mem:全局参数,一般设置为物理内存的2%~4%,用于限制Segment实例在进行sort、hash等操作时可用的内存大小。当PostgreSQL对大表进行排序时,数据库会按照此参数指定大小进行分片排序,将中间结果存放在临时文件中。这些中间结果的临时文件最终会再次合并排序,增加此参数可以减少临时文件的数量,进而提升排序效率。当然如果设置得过大,会导致swap(内存不足以交换数据到磁盘的现象)的发生,设置此参数时须谨慎。

2)mainteance_work_mem:全局参数,表示Segment实例用于VACUUM、CREATE INDEX等操作的可用内存大小,默认为16MB。因为在一个数据库会话里,任意时刻只能执行一个这样的操作,并且一个数据库通常不会有太多工作并发执行,所以把这个数值设置得和work_mem一致是比较合理的。设置更大的值可以加快数据清理和数据库恢复的速度。

3)max_statement_mem:设置每个查询任务的最大使用内存量,该参数可以防止statement_mem参数设置的内存过大导致内存溢出。

4)statement_mem:设置每个查询任务在Segment主机中可用的内存,该参数设置的值不能超过max_statement_mem的值,如果配置了资源队列,则不能超过资源队列设置的值。

5)gp_vmem_protect_limit:控制每个Segment主机为所有运行中的查询任务分配的内存总量。如果查询需要的内存超过此值,则会失败。

6)gp_workfile_limit_files_per_query:SQL查询任务分配的内存不足,Greenplum数据库会创建溢出文件(也称为工作文件)。在默认情况下,一个SQL查询最多可以创建100000个溢出文件,这足以满足大多数查询需求。该参数决定了一个查询任务最多可以创建多少个溢出文件,0意味着没有限制。限制溢出文件数据可以防止失控的查询任务破坏整个系统。

7)gp_statement_mem:服务器配置参数gp_statement_mem控制数据库上单个查询任务可以使用的内存总量。如果语句需要更多内存,则会溢出数据到磁盘中。

8)effective_cache_size:这个参数仅用于Master节点,可以设为物理内存的85%,告诉Greenplum的优化器有多少内存可以被用来缓存数据,以及帮助数据库决定是否应该使用索引。数值越大,优化器使用索引的可能性就越高。这个数值应该设置为shared_buffers和可用操作系统缓存的总量。通常这个数值会超过系统内存总量的50%以上。

9)gp_resqueue_priority_cpucores_per_segment:用于限制Master节点和每个Segment实例可以使用的CPU个数以及每个Segment实例可分配的线程数。

10)max_connections:用于设置Master节点和每个Segment实例的最大连接数,Segment实例建议设置成Master节点的5~10倍。

11)max_prepared_transactions:这个参数只有在启动数据库时才能被设置,它决定了能够同时处于prepared状态的事务的最大数目(参考PREPARE TRANSACTION命令)。如果它的值设为0,则数据库将关闭prepared事务的特性。该值通常应该和max_connections的值一致。每个事务消耗600字节共享内存。

12)max_files_per_process:设置每个服务器进程允许同时打开的最大文件数,默认为1000。如果操作系统内核强制将其设置为一个合理的数目,则不需要再进行设置。在一些平台上(特别是大多数BSD系统),内核允许独立进程打开比系统真正可以支持的数目多得多的文件数。如果发现有“Too many open files”这样的失败提示,可以尝试缩小这个值。这个值只能在数据库启动时设置。

13)shared_buffers:只能配置Segment实例,用作磁盘读写的内存缓冲区,开始时可以设置为一个较小的值,比如总内存的15%,然后逐渐增加,在此过程中监控性能提升和内存交换的情况。

14)temp_buffers:即临时缓冲区,存储数据库访问的临时数据,默认值为1MB,在访问比较到大的临时表时,对性能提升有很大帮助。

15)gp_fts_probe_threadcount:用于设置ftsprobe线程数,此参数建议大于、等于每台服务器Segment实例的数目。

3.4.3 其他常用命令

通过gpstate或gp_segement_configuration命令发现有实例宕机后,使用如下命令进行恢复。

#生成需要恢复服务的信息到指定文件中
gprecoverseg -o ./recov
#指定一个配置文件,该配置文件描述了需要修复的Segment实例和修复后的存放位置
gprecoverseg -i ./recov
#强制恢复,指定后,gprecoverseg会将-i中指定的或标记为d的实例删除,并从正常的Mirror节点中复制一个完整的备份到目标位置
gprecoverseg -F
#如果FTS(Fault Tolerance Serve,Greenplum中的故障检测服务)发现有Primary节点宕机并进行主备切换,在gprecoverseg修复后,担当Primary节点的Mirror角色并不会立即切换回来,就会导致部分主机上活跃的Segment实例过多,从而引起性能瓶颈,需要恢复Segment原先的角色,称为re-balance
gprecoverseg -r 
#快速恢复
gprecoverseg -a

数据库备份命令如下。

#备份testdb数据库中的member表,命令格式为-t表名,-U用户,-W密码 -f输出的备份文件名字
$ pg_dump testdb -t member -Ugpadmin -W -f /gpbackup/member_table.dmp 
# 备份数据库,只导出对象定义(表结构、函数、视图)等 
$ pg_dump testdb -s -Ugpadmin -W -f /gpbackup/testdb.dmp  
# 备份数据库中的模式,命令中-n表示模式,public是所有数据库中默认的模式,这里要备份testdb数据库中的temp模式
$ pg_dump testdb -n temp -Ugpadmin -W -f /gpbackup/temp_schema.dmp 

数据恢复命令如下。

#恢复整个数据
pg_restore -C -d postgres /gpbackup/testdb.dump 
#恢复其中一个模式并加-n参数
pg_restore -l -n public /gpbackup/testdb.dump 
#恢复其中一个模式并加-t参数,只恢复数据并加-a参数
pg_restore -l -t member -a /gpbackup/testdb.dump