PostgreSQL關閉數(shù)據(jù)庫服務的三種模式
PostgreSQL 提供了三種關閉數(shù)據(jù)庫服務的不同方式,它們最終都是發(fā)送一個關閉信號到 postgres 主服務進程。
智能關閉模式
智能關閉(Smart Shutdown)模式向 postgres 主服務進程發(fā)送一個 SIGTERM 信號。此時服務器不允許新的客戶端連接,同時等待已有會話正常完成工作。當所有會話都主動終止連接之后關閉服務。如果數(shù)據(jù)庫服務正在執(zhí)行恢復操作時發(fā)送了關閉命令,恢復操作和流復制都會等待所有常規(guī)會話終止后停止。
使用 pg_ctl 工具關閉數(shù)據(jù)庫服務的命令如下:
$ pg_ctl stop -m smart
其中,-m 參數(shù)用于指定關閉模式,smart 表示智能模式。
PostgreSQL 智能關閉模式類似于 Oracle 數(shù)據(jù)庫中的正常關閉(shutdown normal)模式。
快速關閉模式
快速關閉(Fast Shutdown)模式對應的信號為 SIGINT。此時服務器不允許新的客戶端連接,同時向所有的服務進程發(fā)送 SIGTERM 信號,回滾進行中的事務并且強制斷開所有客戶端的連接,然后關閉數(shù)據(jù)庫。
使用 pg_ctl 工具快速關閉數(shù)據(jù)庫服務的命令如下:
$ pg_ctl stop -m fast $ pg_ctl stop
其中,fast 表示快速模式,它也是默認模式。
PostgreSQL 快速關閉模式類似于 Oracle 數(shù)據(jù)庫中的立即關閉(shutdown immediate)模式。
立即關閉模式
第三種模式是立即關閉(Immediate Shutdown),對應的系統(tǒng)信號為 SIGQUIT。
主服務器進程向所有的子進程發(fā)送 SIGQUIT 信號,如果 5 秒內(nèi)子進程沒有終止,繼續(xù)發(fā)送立即終止的 SIGKILL 信號。當所有子進程退出后,主服務進程立即終止,不會執(zhí)行常規(guī)的數(shù)據(jù)庫關閉流程。這種模式會導致下一次啟動數(shù)據(jù)庫服務時需要執(zhí)行恢復操作(重做 WAL 日志),只推薦在緊急情況下使用。
使用 pg_ctl 工具立即關閉數(shù)據(jù)庫服務的命令如下:
$ pg_ctl stop -m immediate
其中,immediate 表示立即模式。
PostgreSQL 快速關閉模式類似于 Oracle 數(shù)據(jù)庫中的立即關閉(shutdown abort)模式。
注意事項
三種關閉模式中,智能模式最安全,能夠確保數(shù)據(jù)的完整性和一致性;但是這種模式可能耗時較長,因為它需要等待客戶端主動斷開連接??焖倌J娇赡軐е率聞盏闹袛?,但不會導致數(shù)據(jù)不一致,優(yōu)點在于速度較快,一般情況下推薦使用這種模式。 立即模式速度最快,但是可能會導致數(shù)據(jù)不一致,再次啟動時可以通過 WAL 日志回放恢復到一致狀態(tài),只有在緊急情況或者其他模式無法關閉時推薦使用。
除了 Windows 之外的其他操作系統(tǒng)也可以直接使用 kill 命令發(fā)送信號關閉數(shù)據(jù)庫,例如:
$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
postmaster.pid 文件中存儲了主服務進程(postgres)的 PID。
不建議使用 SIGKILL 信號關閉服務,這種方式會阻止服務釋放共享內(nèi)存和信號量。而且,這種方式終止主服務器進程時不會發(fā)送信息到子進程,因此還需要手動關閉每個子進程。
Oracle 數(shù)據(jù)庫還支持一種事務關閉(shutdown transactional)模式,不允許新客戶連接,但是會等待進行中的事務完成提交后斷開客戶端連接,然后關閉數(shù)據(jù)庫。PostgreSQL 沒有這種對應的關閉模式。
到此這篇關于PostgreSQL關閉數(shù)據(jù)庫服務的三種模式的文章就介紹到這了,更多相關PostgreSQL關閉數(shù)據(jù)庫服務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
postgresql高級應用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路
這篇文章主要介紹了postgresql高級應用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
postgresql insert into select無法使用并行查詢的解決
這篇文章主要介紹了postgresql insert into select無法使用并行查詢的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
PostgreSQL 數(shù)據(jù)庫跨版本升級常用方案解析
這篇文章主要介紹了PostgreSQL 數(shù)據(jù)庫跨版本升級常用方案解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
PostgreSQL 數(shù)據(jù)庫性能提升的幾個方面
PostgreSQL提供了一些幫助提升性能的功能。主要有一些幾個方面。2009-09-09

