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

相关文章
相关标签/搜索