1. 啟動(dòng)數(shù)據(jù)庫服務(wù)器(posgres用戶):
網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
[postgres@localhost bin]$ postgres -D /opt/postgresql/data/ /opt/postgresql/log/pg_server.log 21
[1] 4508
當(dāng)然如果設(shè)置了環(huán)境變量
PGDATA=/opt/postgresql/data
export PGDATA
后,可使用pg_ctl工具進(jìn)行啟動(dòng):
[postgres@localhost log]$ pg_ctl start -l /opt/postgresql/log/pg_server.log
pg_ctl: another server might be running; trying to start server anyway
pg_ctl: could not start server
Examine the log output.
[postgres@localhost log]$
因?yàn)橹耙呀?jīng)啟動(dòng),所以打印“another server might be running”。此時(shí),查看日志,有如下信息:
[postgres@localhost log]$ cat pg_server.log
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 4491) running in data directory "/opt/postgresql/data"?
[postgres@localhost log]$
當(dāng)然,最簡的.啟動(dòng)方式是:
[postgres@localhost ~]$ pg_ctl start
server starting
[postgres@localhost ~]$ LOG: database system was shut down at 2011-07-09 13:58:00 CST
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
如果要在操作系統(tǒng)啟動(dòng)時(shí)就啟動(dòng)PG,可以在/etc/rc.d/rc.local 文件中加以下語句:
/opt/postgresql/bin/pg_ctl start -l /opt/postgresql/log/pg_server.log -D /opt/postgresql/data
2.關(guān)閉服務(wù)器
最簡單方法:
[postgres@localhost ~]$ pg_ctl stop
waiting for server to shut down.... done
server stopped
與Oracle相同,在關(guān)閉時(shí)也可采用不同的模式,簡介如下:
SIGTERM
不再允許新的連接,但是允許所有活躍的會(huì)話正常完成他們的工作,只有在所有會(huì)話都結(jié)束任務(wù)后才關(guān)閉。這是智能關(guān)閉。
SIGINT
不再允許新的連接,向所有活躍服務(wù)器發(fā)送 SIGTERM(讓它們立刻退出),然后等待所有子進(jìn)程退出并關(guān)閉數(shù)據(jù)庫。這是快速關(guān)閉。
SIGQUIT
令 postgres 向所有子進(jìn)程發(fā)送 SIGQUIT 并且立即退出(所有子進(jìn)程也會(huì)立即退出),而不會(huì)妥善地關(guān)閉數(shù)據(jù)庫系統(tǒng)。這是立即關(guān)閉。這樣做會(huì)導(dǎo)致下次啟動(dòng)時(shí)的恢復(fù)(通過重放 WAL 日志)。我們推薦只在緊急的時(shí)候使用這個(gè)方法。
SIGKILL
此選項(xiàng)盡量不要使用,這樣會(huì)阻止服務(wù)器清理共享內(nèi)存和信號(hào)燈資源,那樣的話你只能在啟動(dòng)服務(wù)器之前自己手工做這件事。另外,SIGKILL 直接把 postgres 殺掉,而不會(huì)等它把信號(hào)中繼給它的子進(jìn)程,因此我們還需要手工殺掉每個(gè)獨(dú)立子進(jìn)程。
使用方法舉例:
[postgres@localhost ~]$ pg_ctl stop -o SIGTERM
LOG: received smart shutdown request
LOG: autovacuum launcher shutting down
waiting for server to shut down....LOG: shutting down
LOG: database system is shut down
done
server stopped
[postgres@localhost ~]$
最快速關(guān)閉方法:kill postgres 進(jìn)程
[postgres@localhost ~]$ kill -INT `head -1 /opt/postgresql/data/postmaster.pid`
[postgres@localhost ~]$ LOG: received fast shutdown request
LOG: aborting any active transactions
LOG: autovacuum launcher shutting down
LOG: shutting down
LOG: database system is shut down
附:postgre啟動(dòng)后的進(jìn)程,如下:
[postgres@localhost ~]$ ps -ef|grep post
root 4609 4543 0 13:57 pts/2 00:00:00 su - postgres
postgres 4610 4609 0 13:57 pts/2 00:00:00 -bash
postgres 4724 1 0 14:08 pts/2 00:00:00 /opt/postgresql/bin/postgres
postgres 4726 4724 0 14:08 ? 00:00:00 postgres: writer process
postgres 4727 4724 0 14:08 ? 00:00:00 postgres: wal writer process
postgres 4728 4724 0 14:08 ? 00:00:00 postgres: autovacuum launcher process
postgres 4729 4724 0 14:08 ? 00:00:00 postgres: stats collector process
postgres 4752 4610 0 14:11 pts/2 00:00:00 ps -ef
postgres 4753 4610 0 14:11 pts/2 00:00:00 grep post
[postgres@localhost ~]$
目 錄
總 結(jié)
PostgreSQL 通過調(diào)用系統(tǒng) fsync() 或者其他使得事務(wù)內(nèi)容寫入到物理磁盤,這樣可以保證操作系統(tǒng)或者數(shù)據(jù)庫出現(xiàn)宕機(jī)后,仍然可以恢復(fù)到某一個(gè)一致性的狀態(tài)。理論上講 PostgreSQL 的 fsync 功能關(guān)閉,可以實(shí)現(xiàn)性能的提升,但是帶來的影響就是需要承擔(dān)數(shù)據(jù)的丟失,因?yàn)槌霈F(xiàn)系統(tǒng)宕機(jī)或者數(shù)據(jù)庫崩潰的時(shí)候有一些數(shù)據(jù)是沒有落盤的。
本文將驗(yàn)證 fsync 參數(shù)的性能影響,以及參數(shù)關(guān)閉時(shí)數(shù)據(jù)庫宕機(jī)后的影響。
數(shù)據(jù)量:1000W
fsync 參數(shù):on
初始化表:user_info
pgbench 壓測(cè)
pgbench 結(jié)果
pgbench 壓測(cè)
pgbench 結(jié)果
數(shù)據(jù)量:1000W
fsync 參數(shù):off
初始化表:user_info
pgbench 壓測(cè)
pgbench 結(jié)果
pgbench 壓測(cè)
pgbench 結(jié)果
通過對(duì)比發(fā)現(xiàn),將 fsync 改為 off,對(duì)于讀 TPS,參數(shù) fsync 的影響不大,對(duì)于寫 TPS,性能有一定提升。
現(xiàn)在驗(yàn)證參數(shù)關(guān)閉時(shí)數(shù)據(jù)庫宕機(jī)后的影響
首先,使用將數(shù)據(jù)庫性能跑起來
然后,模擬服務(wù)器斷電
之后,啟動(dòng)數(shù)據(jù)庫
提示信息:比致命錯(cuò)誤還過分的錯(cuò)誤。
結(jié)果:數(shù)據(jù)庫無法啟動(dòng),原因就是因?yàn)闊o法找到一個(gè)有效的 checkpoint 記錄,這就是因?yàn)?fsync 設(shè)置為 off,由于數(shù)據(jù)庫異常宕機(jī)導(dǎo)致。可以通過使用 pg_resetxlog 恢復(fù)數(shù)據(jù)庫,但是會(huì)造成部分?jǐn)?shù)據(jù)無法找回,數(shù)據(jù)丟失;也可以通過備份恢復(fù),同樣也會(huì)丟失部分?jǐn)?shù)據(jù)。
fsync 參數(shù)對(duì)于讀 TPS 的性能影響不大,對(duì)于寫 TPS 的性能有一些影響,設(shè)置為 off,寫 TPS 性能有一定提升,但是存在數(shù)據(jù)庫宕機(jī)后無法正常啟動(dòng),即使恢復(fù)后啟動(dòng)數(shù)據(jù)庫,也會(huì)有數(shù)據(jù)丟失的很大風(fēng)險(xiǎn)。因此生產(chǎn)環(huán)境非必要時(shí),不要將此參數(shù)設(shè)置為 off,還是使用默認(rèn)的 on 比較穩(wěn)妥。
直接在命令行輸入:quit或者是exist即可完成退出。
備注:其實(shí)最簡單的方法就是關(guān)閉登錄窗口,或者切換用戶的形式完成退出當(dāng)前用戶的數(shù)據(jù)庫操作。