PostgreSQL兩三事

不要用Graphic Installer

至少在Ubuntu下,以爲原生的apt-get管理方式更合適,PG的文件資源會被分配到應該的地方,Linux的系統文件結構也是種很是穩健的架構。例如在/etc/postgresql下能夠找到conf文件是一件清晰到爽的事情。正常經過apt安裝的方式參見這篇博文sql

以前有一臺VM就是沒有忍住一時之快,用了Graphic Installer,全部的東西被塞到/opt/PostgreSQL/x.x中,固然,conf、bin等文件都在其中。在沒有手動配置的狀況下,start/stop/restart/reload之類的事情,不得不交給pg_ctl作,而與postgres帳戶之間的來回切換,也會浪費寶貴的時間。例如重啓PG須要數據庫

./pg_ctl restart -D ../data

而出現衝突的時候還會須要忍不住 -m fast 一下。而若是使用系統服務,至少能夠這樣:ubuntu

sudo /etc/init.d/postgresql restart

修改postgresql.conf

數據庫系統參數是很重要的功能,根據應用特色進行性能調優時,每每須要用到。目前用到的幾個參數裏,shared_buffers通常會盡可能設置大一些,有人建議設爲RAM的10%,其實我以爲更大一些也沒什麼問題。tcp_keepalives_idle做爲秒數表示空閒時間間隔,當一個tcp鏈接持續該時間閒置,db會發送tcp_keeplive包給客戶端,若連續tcp_keepalives_count個包都在tcp_keepalives_interval秒內沒有迴應,則會認爲這個tcp已死。服務器

修改postgresql.conf後能夠經過 select pg_reload_conf();從新加載配置。可是配置裏有些是支持動態的,而有些必需要重啓db,例如shared_buffers就如此,悲催。重加載或重啓後,可經過show <配置項>命令查看當前已生效的配置項值,例如:session

show tcp_keepalives_idle;

查看當前的服務器狀態

可調用PG自帶的一個視圖:架構

select * from pg_stat_activity

這個視圖能夠查出目前的鏈接,以及各自鏈接的狀態、時間點、SQL內容等,視圖內容:app

CREATE OR REPLACE VIEW pg_stat_activity AS 
SELECT s.datid, d.datname, s.procpid, s.usesysid, 
u.rolname AS usename, s.application_name, s.client_addr, 
s.client_hostname, s.client_port, s.backend_start, 
s.xact_start, s.query_start, s.waiting, s.current_query 
FROM pg_database d, pg_stat_get_activity(NULL::integer) 
s(datid, procpid, usesysid, application_name, current_query, 
waiting, xact_start, query_start, backend_start, client_addr, 
client_hostname, client_port), pg_authid u 
WHERE s.datid = d.oid AND s.usesysid = u.oid;

固然,只要不是很老的PG版本,能夠用pg_terminate_backend來終止相應的會話,這篇文章例舉了更多的使用場景。例如:less

SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = 'databasename'

終止某個用戶的會話:tcp

SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename = 'username'

若是以爲terminate太暴力,還可使用pg_cancel_backend。post

相關文章
相關標籤/搜索