启动和停止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数据库参考指南》。
- 使用-m 选项运行gpstart:
gpstart
- 以维护模式连接到Master来执行目录维护。例如:
$ PGOPTIONS='-c gp_session_role=utility' psql postgres
- 完成管理任务后,将主服务器停止在实用程序模式下。然后,以生产模式重新启动它。
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."