启动和停止Greenplum数据库
在一个Greenplum数据库管理系统中,所有主机上的数据库实例(Master和所有的Segment)一起被启动或者停止,启停操作统一由Master实例发起,它们步调一致,在外界看来是一个完整的数据库管理系统。
由于一个Greenplum数据库系统分布在很多机器上,启动和停止一个Greenplum数据库系统的过程与普通PostgreSQL数据库的启动和停止过程不同。
分别使用gpstart 和 gpstop 工具来启动和停止Greenplum数据库。这些工具位于Greenplum数据库Master主机的 $GPHOME/bin 目录下。
Important: 不要采用kill命令来直接杀掉任何后台Postgres进程。 可以使用数据库内命令pg_cancel_backend()来完成此操作。
采用 kill -9 或 kill -11 可能引发数据库损坏并且妨碍根据目前数据库的表现进行问题根源分析。
有关gpstart 和 gpstop的详细信息,请参考文档 Greenplum数据库工具指南。
Parent topic: 管理一个Greenplum系统
启动Greenplum数据库
在Master实例上,通过执行gpstart可以启动一个初始化好的Greenplum数据库系统。
可以使用gpstart工具来启动一个已经由gpinitsystem工具初始化好的Greenplum数据库系统,前提是该系统已经被gpstop工具停止。 gpstart 通过启动整个Greenplum数据库集群中的所有Postgres数据库实例来启动Greenplum数据库。 gpstart 会精心安排这一过程并且以并行的方式执行它。
在Master主机上运行gpstart以启动一个Greenplum数据库:
$ gpstart
重启Greenplum数据库
停止Greenplum数据库系统然后重新启动它。
执行gpstop工具并带有-r选项时,会停止Greenplum数据库并在数据库完全关闭后重新启动它。
要重启Greenplum数据库,在Master主机上输入下面的命令:
$ gpstop -r
仅重新载入配置文件更改
重新载入对Greenplum数据库配置文件的更改而不中断系统。
gpstop 工具可以在不中断服务的前提下重新载入对 pg_hba.conf配置文件和Master上postgresql.conf、 pg_hba.conf文件中的运行 参数进行更改。 活动会话将会在它们重新连接到数据库时使用这些更新。 很多服务器配置参数需要完全重启系统(gpstop -r)才能激活。有关服务器配置参数的信息请见 Greenplum Database Reference Guide。
使用gpstop工具重新载入配置文件更改而不关闭系统:
$ gpstop -u
以维护模式启动Master
只启动Master来执行维护或者管理任务而不影响Segment上的数据。
例如,可以用维护模式连接到一个只在Master实例上的数据库并且编辑系统目录设置。 更多有关系统目录表的信息请见Greenplum Database Reference Guide。
使用-m模式运行gpstart:
$ gpstart -m
以维护模式连接到Master进行目录维护。例如:
$ PGOPTIONS='-c gp_session_role=utility' psql postgres
在完成管理任务后,停止处于维护模式的额Master。然后以生产模式重启它。
$ gpstop -mr
Warning:
对维护模式连接的不当使用可能会导致不一致的系统状态。只有技术支持才应该执行这一操作。
停止Greenplum数据库
gpstop工具可以停止或者重启Greenplum数据库系统,它总是运行在Master主机上。 当被激活时,gpstop 会停止系统中所有的postgrespostgres进程,包括Master和所有的Segment实例。 gpstopgpstop工具使用一种默认的最多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, procpid, waiting, current_query, datname
FROM pg_stat_activity;
上例语句部分查询结果如下:
usename | procpid | waiting | current_query | datname
---------+----------+---------+-----------------------+---------
sammy | 31861 | f | <IDLE> in transaction | testdb
billy | 31905 | t | 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."