启动和停止 Greenplum 数据库
启动和停止 Greenplum 数据库
在Greenplum数据库DBMS中,数据库服务器实例(master和所有segment)在系统中的所有主机上启动或停止,这样它们可以作为一个统一的DBMS一起工作。
因为 Greenplum 数据库系统分布在许多机器上,所以启动和停止 Greenplum 数据库系统的过程与启动和停止常规 PostgreSQL DBMS 的过程不同。
使用gpstart
和gpstop
实用程序分别启动和停止 Greenplum 数据库。这些实用程序位于您的 Greenplum 数据库主主机上的 $GPHOME/bin 目录中。
重要提示:不要发出kill
命令来结束任何 Postgres 进程。而是使用数据库命令pg_cancel_backend()
。
发出kill -9
orkill -11
可能会导致数据库损坏并阻止执行根本原因分析。
有关gpstart
和的信息gpstop
,请参阅Greenplum 数据库实用程序指南。
启动 Greenplum 数据库
gpstart
通过在主实例上运行实用程序来启动初始化的 Greenplum 数据库系统。
使用该gpstart
实用程序启动一个已经被该gpinitsystem
实用程序初始化但已被该gpstop
实用程序停止的Greenplum数据库系统。该gpstart
实用程序通过启动 Greenplum 数据库集群上的所有 Postgres 数据库实例来启动 Greenplum 数据库。gpstart
编排此过程并并行执行该过程。
在master主机上运行gpstart
启动Greenplum数据库:
$ gpstart
重启Greenplum数据库
停止 Greenplum 数据库系统,然后重新启动它。
带有该选项的gpstop
实用程序-r
可以在关闭完成后停止然后重新启动 Greenplum 数据库。
要重新启动 Greenplum 数据库,请在主控主机上输入以下命令:
$ gpstop -r
仅重新加载配置文件更改
在不中断系统的情况下重新加载对 Greenplum 数据库配置文件的更改。
该实用程序可以在不中断服务的情况下gpstop
重新加载对 pg_hba.conf 配置文件和主 postgresql.conf 文件中的运行时参数的更改。活动会话在重新连接到数据库时获取更改。许多服务器配置参数需要完全重新启动系统 ( gpstop -r
) 才能激活。有关服务器配置参数的信息,请参阅Greenplum 数据库参考指南。
gpstop
使用该实用程序在不关闭 Greenplum 数据库系统的情况下重新加载配置文件更改:
$ gpstop -u
在维护模式下启动 Master
仅启动主节点以执行维护或管理任务,而不影响段上的数据。
维护模式只能在 VMware 技术支持的指导下使用。例如,您可以仅在维护模式下连接到主实例上的数据库并编辑系统目录设置。有关系统目录表的更多信息,请参阅Greenplum 数据库参考指南。
-
gpstart
使用 -m 选项运行:$ gpstart -m
-
在维护模式下连接到 master 以进行目录维护。例如:
$ PGOPTIONS='-c gp_role=utility' psql postgres
-
完成管理任务后,将主节点停止在维护模式。然后,以生产模式重新启动它。
$ gpstop -m $ gpstart
警告:
不正确使用维护模式连接会导致系统状态不一致。只有技术支持才能执行此操作。
停止 Greenplum 数据库
该gpstop
实用程序停止或重新启动您的 Greenplum 数据库系统并始终在主控主机上运行。激活后,gpstop
停止postgres
系统中的所有进程,包括主实例和所有段实例。该gpstop
实用程序默认使用最多 64 个并行工作线程来关闭构成 Greenplum 数据库集群的 Postgres 实例。系统在关闭之前等待任何活动事务完成。如果两分钟后仍有活动连接,gpstop
将提示您继续在智能模式下等待、在快速模式下停止或在即时模式下停止。要立即停止 Greenplum 数据库,请使用快速模式。
重要提示:不建议立即关闭模式。此模式停止所有数据库进程,不允许数据库服务器完成事务处理或清理任何临时或进程中的工作文件。
-
停止 Greenplum 数据库:
$ gpstop
-
以快速模式停止 Greenplum 数据库:
$ gpstop -M fast
默认情况下,如果有任何客户端连接到数据库,则不允许关闭 Greenplum 数据库。使用该
-M fast
选项回滚所有正在进行的事务并在关闭之前终止任何连接。
停止客户端进程
Greenplum 数据库为每个客户端连接启动一个新的后端进程。具有SUPERUSER
特权的 Greenplum 数据库用户可以取消和终止这些客户端后端进程。
使用该函数取消后端进程会pg_cancel_backend()
结束特定的排队或活动客户端查询。pg_terminate_backend()
使用该函数终止后端进程会终止客户端与数据库的连接。
该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
限制为 128 字节;Greenplum 数据库会截断更长的时间。
pg_cancel_backend()
andpg_terminate_backend()
函数true
如果成功则返回,否则返回false
。
要取消或终止后端进程,您必须首先确定后端的进程 ID。您可以从视图的pid
列中获取进程 ID 。pg_stat_activity
例如,要查看与所有正在运行和排队的查询相关的进程信息:
=# 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
使用输出来识别pid
查询或客户端连接的进程 ID ()。
例如,要取消上面示例输出中标识的等待查询并'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."