启动和停止Greenplum数据库


在Greenplum数据库DBMS中,所有主机上的数据库实例(master和所有segment)一起启动或停止,它们一起工作,成为一个统一的DBMS。

由于Greenplum数据库系统分布在许多机器上,因此启动和停止Greenplum数据库系统的过程,与启动和停止常规PostgreSQL DBMS的过程不同。

使用 gpstart 和 gpstop工具,分别启动和停止Greenplum数据库。这些工具位于Greenplum数据库master主机上的$GPHOME/bin目录。



重要提示:请勿采用kill命令直接杀掉任何Postgres进程。相反,请使用数据库命令pg_cancel_backend()。

采用 kill -9 或 kill -11可能会导致数据库损坏,并妨碍根因分析。



有关 gpstart 和 gpstop的更多信息,请参阅《 Greenplum数据库工具指南》。


父主题: 管理Greenplum系统



 


启动Greenplum数据库



通过在Master实例上执行gpstart工具,可以启动一个已初始化的Greenplum数据库系统。

使用gpstart工具启动greenplum数据库系统,该系统已由gpinitsystem工具初始化,但已被gpstop工具停止。 gpstart 通过启动Greenplum数据库集群中的所有Postgres数据库实例来启动Greenplum数据库。 gpstart 会精心安排这一过程并且以并行的方式执行它。



在Master主机上运行gpstart以启动一个Greenplum数据库:



gpstart


重新启动Greenplum数据库



停止Greenplum数据库系统,然后重新启动它。



执行gpstop工具并带有-r选项时,会停止Greenplum数据库并在其完全关闭后重新启动它。



 



gpstop -r


仅重新载入配置文件的更改



重新载入对Greenplum数据库配置文件的更改,无需中断系统。



gpstop 工具可以在不中断服务的前提下,重新加载对pg_hba.conf配置文件和Master上的postgresql.conf、 pg_hba.conf文件中的运行时参数进行更改。 活动会话将会在它们重新连接到数据库时使用这些更新。 很多服务器配置参数需要完全重启系统(gpstop -r)才能激活。有关服务器配置参数的信息请见 《Greenplum 数据库参考指南》。

使用gpstop工具重新载入配置文件更改而不关闭系统:



gpstop -u


以维护模式启动Master



仅启动Master以执行维护或管理任务,而不会影响Segment的数据。



维护模式应在Pivotal技术支持的指导下使用。例如,您可以用维护模式连接到只在master上的数据库,然后编辑系统目录设置。有关系统目录表的更多信息,请参阅《Greenplum数据库参考指南》。



  1. 使用-m 选项运行gpstart:
gpstart
  1. 以维护模式连接到Master来执行目录维护。例如:
$ PGOPTIONS='-c gp_session_role=utility' psql postgres
  1. 完成管理任务后,将主服务器停止在实用程序模式下。然后,以生产模式重新启动它。
gpstop -mr

警告:

维护模式连接的使用不当会导致不一致的系统状态。只有技术支持人员才能执行此操作。


停止Greenplum数据库



启用后,gpstop 会停止系统中所有的postgrespostgres进程,包括Master和所有的Segment实例。 gpstop工具默认使用最多64个并行工作线程,来关闭构成 组成Greenplum数据库集群的Postgres实例。 系统在关闭之前会等待所有的活动事务完成。要立即停止Greenplum数据库, 请使用快速模式。



  • 要停止Greenplum数据库:
$ gpstop
  • 要以快速模式停止Greenplum数据库:
$ gpstop -M fast

默认情况下,如果有任何客户端连接到数据库,就不允许您关闭Greenplum数据库。使用-M fast  选项,可以在关闭前 回滚所有正在进行的事务并中断 所有连接。


停止客户端进程



Greenplum数据库会为每一个客户端连接唤起一个后台进程。具有SUPERUSER权限的Greenplum用户可以取消或直接终止这些客户端后台进程。

使用pg_cancel_backend()函数可以取消某个活动的查询或队列中的后台进程。使用pg_terminate_backend()可以直接终端访问Greenplum数据库的客户端连接。



pg_cancel_backend()函数有两个签名:

  • pg_cancel_backend( pid int4 )
  • pg_cancel_backend( pid int4, msg text )

pg_terminate_backend()函数也有两个类似的签名:

  • pg_terminate_backend( pid int4 )
  • pg_terminate_backend( pid int4, msg text )



如果您提供了msg信息, Greenplum数据库会将取消信息中的msg内容一并返回给客户端。msg 最大为128字节; 任何超出该长度的信息都会被Greenplum数据库直接截断。

如果pg_cancel_backend()和pg_terminate_backend()函数执行成功,会返回状态true, 否则会返回false。



要取消或中断后台进程,必须先识别出的后台进程ID。进程ID可以从pg_stat_activity视图的procpid列得到。 例如,如果要看所有运行中和等待中查询的进程信息,可以执行:

=# SELECT usename, pid, waiting, state, query, datname
     FROM pg_stat_activity;



部分查询结果示例如下:

usename |  pid     | waiting | state  |         query          | datname
---------+----------+---------+--------+------------------------+---------
  sammy  |   31861  |    f    | idle   | SELECT * FROM testtbl; | testdb
  billy  |   31905  |    t    | active | SELECT * FROM topten;  | testdb

从查询结果中找到对应查询或客户端连接的进程ID(procpid)。

例如,下面语句会取消上面输出中的等待查询,并将"Admin canceled long-running query."信息反馈给客户端。



=# SELECT pg_cancel_backend(31905 ,'Admin canceled long-running query.');
ERROR:  canceling statement due to user request: "Admin canceled long-running query."