Chinaunix首页 | 论坛 | 博客
  • 博客访问: 512903
  • 博文数量: 174
  • 博客积分: 8001
  • 博客等级: 中将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-04 19:30
文章分类

全部博文(174)

文章存档

2011年(1)

2010年(24)

2009年(149)

我的朋友

分类:

2009-09-27 23:17:48

有好几种关闭数据库服务器的方法。通过给 postgres 进程发送不同的信号,你就可以控制关闭服务器的不同方法。

SIGTERM

不再允许新的连接,但是允许所有活跃的会话正常完成他们的工作,只有在所有会话都结束任务后才关闭。这是智能关闭

SIGINT

不再允许新的连接,向所有活跃服务器发送 SIGTERM(让它们立刻退出),然后等待所有子进程退出并关闭数据库。这是快速关闭

SIGQUIT

postgres 向所有子进程发送 SIGQUIT 并且立即退出(所有子进程也会立即退出),而不会妥善地关闭数据库系统。这是立即关闭。这样做会导致下次启动时的恢复(通过重放 WAL 日志)。我们推荐只在紧急的时候使用这个方法。

pg_ctl 程序提供了一个发送这些信号关闭服务器的便利接口。

另外,你可以用 kill 直接发送这些信号。可以用 ps 命令或者从数据目录里的 postmaster.pid 文件中找出 postgres 的 PID 。所以,举例来说,要做一次快速关闭:

$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
【重要】尽可能不要用 SIGKILL 关闭服务器。这样会阻止服务器清理共享内存和信号灯资源,那样的话你只能在启动服务器之前自己手工做这件事。另外,SIGKILL 直接把 postgres 杀掉,而不会等它把信号中继给它的子进程,因此我们还需要手工杀掉每个独立子进程。
阅读(1574) | 评论(0) | 转发(0) |
0

上一篇:远程连接postgresql

下一篇:C/C++ 求职面试

给主人留下些什么吧!~~