在做任何事之前,要在磁盘上初始化一个数据库存储区域,称这个是数据库集群。一个数据库集群是被运行数据库服务实例管理的一些数据库。在初始化完后,数据库集群包含一个叫做postgres的数据库,数据库服务本身不要求postgres数据库存在,但是很多外部工具要求它存在,另外的一个数据库叫做template1,这个用于后续数据库的创建,不用于实际的工作。为了初始化一个数据库集群,使用initdb命令。例如
initdb -D /usr/local/pgsql/data或
pg_ctl -D /usr/local/pgsql/data initdb
网络文件系统
很多的安装,将数据库集群安装在网络文件系统上,有些时候是直接通过NFS,或是使用nas设备。postgreSQL对nfs文件系统不做特别处理,就当他是本地的文件系统一样使用。如果客户端和服务端 nfs的实现由非标准的semantis,可能引发可靠性的问题。具体的,延迟写入NFS服务可能引起可靠性问题。如果可能,同步的方式挂载NFS来避免这个。软挂载也是不被推荐的。
启动数据库服务器
postgres -D /usr/local/pgsql/data启动数据库,这种方式会在前台运行,如果不指定D参数,那么会使用PGDATA变量指定的目录。最好是按下面的方式在后台运行这个服务
postgres -D /usr/local/pgsql/data >logfile 2>&1 &
pg_ctl start -l logfile这个也是能启动数据库在后台,同样D参数与上面的使用时一样的。
设置开机自启动数据库示例如下,在/etc/rc.local或/etc/rc.d/rc.local
su postgres -c 'pg_ctl start -D /usr/local/pgsql/data -l serverlog'
当server运行的时候,在数据目录下面有一个postmaster.pid的文件,放置启动多个server实例及用来关闭server
管理内核资源
共享内存和信号量
Table 17-1. System V IPC Parameters
Name Description Reasonable values
SHMMAX Maximum size of shared at least 1kB (more if running
memory segment (bytes) many copies of the server)
SHMMIN Minimum size of shared 1
memory segment (bytes)
SHMALL Total amount of shared memory if bytes, same as SHMMAX; if
available (bytes or pages) pages,
ceil(SHMMAX/PAGE_SIZE)
SHMSEG Maximum number of shared only 1 segment is needed, but
memory segments per process the default is much higher
SHMMNI Maximum number of shared like SHMSEG plus room for
memory segments system-wide other applications
SEMMNI Maximum number of at least
semaphore identifiers (i.e., sets) ceil((max_connections +
autovacuum_max_workers
+ 4) / 16)
SEMMNS Maximum number of ceil((max_connections +
semaphores system-wide autovacuum_max_workers
+ 4) / 16) * 17 plus room
for other applications
SEMMSL Maximum number of at least 17
semaphores per set
SEMMAP Number of entries in see text
semaphore map
SEMVMX Maximum value of semaphore at least 1000 (The default is
often 32767; do not change
unless necessary)
关闭数据库服务
有几种不同的关闭数据库的方式
sigterm
这是个smart shutdown模式。在接受到sigterm后,服务器不允许新的连接,让已经存在的会话完成他们的工作,当所有的会话结束后才关闭。
sigint
这个是快速关闭模式,服务器不允许新的连接,结束所有已存在的连接。会丢弃当前的事务。
sigquit
这个是立即关闭模式,主postgres进程发送sigquit给所有的子进程并马上退出。这个会导致在下次启动时候的recovery。
kill -INT `head -l /usr/local/pgsql/data/postmaster.pid`