PostgreSQL关闭数据库服务的三种模式

PostgreSQL 提供了三种关闭数据库服务的不同方式,它们最终都是发送一个关闭信号到 postgres 主服务进程。

智能关闭模式

智能关闭(Smart Shutdown)模式向 postgres 主服务进程发送一个 SIGTERM 信号。此时服务器不允许新的客户端连接,同时等待已有会话正常完成工作。当所有会话都主动终止连接之后关闭服务。如果数据库服务正在执行恢复操作时发送了关闭命令,恢复操作和流复制都会等待所有常规会话终止后停止。

使用 pg_ctl 工具关闭数据库服务的命令如下:

$ pg_ctl stop -m smart

其中,-m 参数用于指定关闭模式,smart 表示智能模式。

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

快速关闭模式

快速关闭(Fast Shutdown)模式对应的信号为 SIGINT。此时服务器不允许新的客户端连接,同时向所有的服务进程发送 SIGTERM 信号,回滚进行中的事务并且强制断开所有客户端的连接,然后关闭数据库。

使用 pg_ctl 工具快速关闭数据库服务的命令如下:

$ pg_ctl stop -m fast

$ pg_ctl stop

其中,fast 表示快速模式,它也是默认模式。

PostgreSQL 快速关闭模式类似于 Oracle 数据库中的立即关闭(shutdown immediate)模式。

立即关闭模式

第三种模式是立即关闭(Immediate Shutdown),对应的系统信号为 SIGQUIT。

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

使用 pg_ctl 工具立即关闭数据库服务的命令如下:

$ pg_ctl stop -m immediate

其中,immediate 表示立即模式。

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

注意事项

三种关闭模式中,智能模式最安全,能够确保数据的完整性和一致性;但是这种模式可能耗时较长,因为它需要等待客户端主动断开连接。快速模式可能导致事务的中断,但不会导致数据不一致,优点在于速度较快,一般情况下推荐使用这种模式。 立即模式速度最快,但是可能会导致数据不一致,再次启动时可以通过 WAL 日志回放恢复到一致状态,只有在紧急情况或者其他模式无法关闭时推荐使用。

除了 Windows 之外的其他操作系统也可以直接使用 kill 命令发送信号关闭数据库,例如:

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

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

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

Oracle 数据库还支持一种事务关闭(shutdown transactional)模式,不允许新客户连接,但是会等待进行中的事务完成提交后断开客户端连接,然后关闭数据库。PostgreSQL 没有这种对应的关闭模式。

相关推荐

  1. PostgreSQL关闭数据库服务模式

    2024-07-11 07:14:04       8 阅读
  2. 云计算服务模式

    2024-07-11 07:14:04       7 阅读
  3. 数据库服务器数据结构

    2024-07-11 07:14:04       11 阅读
  4. 51单片机编译模式相互关系

    2024-07-11 07:14:04       36 阅读
  5. PostgreSQL关系数据库

    2024-07-11 07:14:04       32 阅读
  6. git reset 模式

    2024-07-11 07:14:04       18 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 07:14:04       7 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 07:14:04       7 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 07:14:04       6 阅读
  4. Python语言-面向对象

    2024-07-11 07:14:04       9 阅读

热门阅读

  1. 聚类方法K-means和DBSCAN,附matlab代码

    2024-07-11 07:14:04       8 阅读
  2. mysql默认开启索引下推,减少回表的数据

    2024-07-11 07:14:04       7 阅读
  3. Spring Boot项目Jar包加密详解

    2024-07-11 07:14:04       9 阅读
  4. 云端足迹:在iCloud中同步您的地图标记和路线

    2024-07-11 07:14:04       9 阅读
  5. Spring Boot(八十):Tesseract实现图片文字自动识别

    2024-07-11 07:14:04       9 阅读
  6. 5-2.模型层

    2024-07-11 07:14:04       8 阅读
  7. 一键安装ros及出现问题的解决方案

    2024-07-11 07:14:04       9 阅读
  8. [PaddlePaddle飞桨] PaddleOCR图像小模型部署

    2024-07-11 07:14:04       10 阅读
  9. 一起来了解深度学习中的“梯度”

    2024-07-11 07:14:04       10 阅读
  10. linux之内存泄漏分析

    2024-07-11 07:14:04       7 阅读
  11. Kotlin Class

    2024-07-11 07:14:04       8 阅读
  12. uniapp vue3微信小程序如何获取dom元素

    2024-07-11 07:14:04       9 阅读
  13. ROI 接口便捷修改

    2024-07-11 07:14:04       8 阅读