PostgreSQL关闭数据库服务的三种模式例子解析

在这里插入图片描述
在PostgreSQL中,关闭数据库服务有三种模式,分别是智能关闭(Smart Shutdown)、快速关闭(Fast Shutdown)和立即关闭(Immediate Shutdown)。以下是每种模式的详细例子:

  1. 智能关闭模式:这是最安全的关闭方式,它向postgres主服务进程发送一个SIGTERM信号。服务器将不允许新的客户端连接,同时等待已有会话正常完成工作。当所有会话都主动终止连接之后,关闭服务。如果数据库服务正在执行恢复操作时发送了关闭命令,恢复操作和流复制都会等待所有常规会话终止后停止。使用pg_ctl工具关闭数据库服务的命令如下:

    $ pg_ctl stop -m smart
    

    这种模式类似于Oracle数据库中的正常关闭(shutdown normal)模式。

  2. 快速关闭模式:这种模式对应的信号为SIGINT。服务器不允许新的客户端连接,同时向所有的服务进程发送SIGTERM信号,回滚进行中的事务并且强制断开所有客户端的连接,然后关闭数据库。使用pg_ctl工具快速关闭数据库服务的命令如下:

    $ pg_ctl stop -m fast
    

    或者简单地使用:

    $ pg_ctl stop
    

    fast模式是默认模式,它类似于Oracle数据库中的立即关闭(shutdown immediate)模式。

  3. 立即关闭模式:这是最快速的关闭方式,但是风险最高。它向所有的子进程发送SIGQUIT信号,如果5秒内子进程没有终止,继续发送立即终止的SIGKILL信号。当所有子进程退出后,主服务进程立即终止,不会执行常规的数据库关闭流程。这种模式会导致下一次启动数据库服务时需要执行恢复操作(重做WAL日志),只推荐在紧急情况下使用。使用pg_ctl工具立即关闭数据库服务的命令如下:

    $ pg_ctl stop -m immediate
    

    这种模式类似于Oracle数据库中的立即关闭(shutdown abort)模式。

除了使用pg_ctl工具外,你也可以使用kill命令发送信号来关闭数据库,例如:

$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

其中,postmaster.pid文件中存储了主服务进程(postgres)的PID。

注意:不建议使用SIGKILL信号关闭服务,这种方式会阻止服务释放共享内存和信号量,并且这种方式终止主服务器进程时不会发送信息到子进程,因此还需要手动关闭每个子进程。

喜欢本文,请点赞、收藏和关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔丹搞IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值