启动和停止数据库服务
启动和停止数据库服务¶
SeaboxMPP数据库系统中,所有节点的数据库实例(包括coordinator和所有executor实例)需同时启动或者同时停止,启停操作统一由coordinator实例发起。
由于SeaboxMPP数据库作为分布式系统,部署在很多节点上,启动和停止的过程与普通SeaboxSQL数据库的启动和停止过程不同。
分别使用seabox start
和 seabox stop
命令来启动和停止SeaboxMPP数据库。相关工具和程序位于SeaboxMPP数据库每个节点的的$SDHOME/bin
目录下。
重要:
请勿使用kill
命令来直接杀掉任何后台seaboxsql进程。可以使用数据库内命令pg_cancel_backend()
来完成此操作。
采用 kill -9
或 kill -11
可能引发数据库损坏并且妨碍根据目前数据库的表现进行问题根源分析。
有关seabox start
和 seabox stop
的详细信息,请参考文档 《SeaboxMPP数据库工具指南》。
启动数据库服务¶
在coordinator实例上,通过执行seabox start
可以启动一个初始化好的SeaboxMPP数据库系统。
可以使用seabox start
工具来启动一个已经由seabox init
工具初始化好的SeaboxMPP数据库系统,前提是该系统已经被seabox stop
工具停止。
seabox start
通过启动整个SeaboxMPP数据库集群中的所有Seabox数据库实例来启动SeaboxMPP数据库。
在coordinator主机上运行seabox start
以启动一个SeaboxMPP数据库:
$ seabox start
重启数据库服务¶
停止SeaboxMPP数据库系统然后重新启动它。
执行seabox restart
工具时,会停止SeaboxMPP数据库并在数据库完全关闭后重新启动它。
要重启SeaboxMPP数据库,在coordinator节点上输入下面的命令:
$ seabox restart
仅重新载入配置文件更改¶
重新载入对SeaboxMPP数据库配置文件的更改而不中断系统。
seabox notify reload
工具可以在不中断服务的前提下重新载入对sd_hba.conf
配置文件和coordinator上seaboxsql.conf
、sd_hba.conf
文件中的运行 参数进行更改。
会话将会在它们重新连接到数据库时使用这些更新。
很多服务器配置参数需要完全重启系统(seabox restart
)才能激活。有关服务器配置参数的信息请见《SeaboxMPP数据库参考手册》。
使用seabox stop
工具重新载入配置文件更改而不关闭系统:
$ seabox notify reload
停止数据库服务¶
seabox stop
工具可以停止或者重启SeaboxMPP数据库系统,该工具仅在coordinator节点运行。执行时,seabox stop
会停止系统中所有的seaboxsql、scdcs、gtm进程,包括coordinator和所有的executor实例。
seabox stop
工具默认使用64个并发来关闭集群所有的seaboxsql实例。
系统在关闭之前会等待所有的活动事务完成。要立即停止SeaboxMPP数据库,可以使用快速模式。
-
要停止SeaboxMPP数据库:
$ seabox stop
-
要以非交互模式停止SeaboxMPP数据库:
$ seabox stop -a
默认情况下,不使用
-a
选项时,管理员需输入确认是否关闭“Y/N”才能执行停止操作。
停止客户端进程¶
SeaboxMPP数据库会为每个客户端连接唤起一个后台进程。具有SUPERUSER
权限的SeaboxMPP用户可以取消或直接终止这些客户端后台进程。
pg_cancel_backend()
函数可以取消某个活动查询或队列中的后台进程。pg_terminate_backend()
可以直接终端访问SeaboxMPP数据库的客户端连接。
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
信息, SeaboxMPP数据库会将取消信息的msg内容一并返回给客户端。msg
最大为128字节;任何超出该长度的信息都会被SeaboxMPP数据库直接截断。
如果pg_cancel_backend()
和pg_terminate_backend()
函数执行成功,会返回状态true
,相反的会返回false
。
要取消或中断后台进程,必须先查出要处理的后台进程ID。进程ID可以从pg_stat_activity
视图的pid
列得到。
如果要看所有运行中和等待中查询的进程信息,可以执行:
=# SELECT usename, pid, wait_event, query, datname
FROM pg_stat_activity;
上例语句部分查询结果如下:
usename | pid | wait_event | query | datname
---------+----------+---------+-----------------------+---------
sammy | 31861 | PgSleep | select pg_sleep(100); | testdb
billy | 31905 | | SELECT * FROM topten; | testdb
可以从查询结果中找到对应查询或客户端连接的进程ID(pid
)。
下面语句会取消上面输出中的等待查询,并将"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."