概述
PostgreSQL9.6 是PG一个非常经典的稳定版本,现在还有许多用户在使用这个版本。本篇就教大家如何最佳实践安装PG9.6数据库
PG9.6的主要新增功能
PostgreSQL 9.6的主要增强功能包括:
- 并行执行顺序扫描,连接和聚合
- 在真空冻结操作期间避免不必要地扫描页面
- 同步复制现在允许多个备用服务器以提高可靠性
- 全文搜索现在可以搜索短语(多个相邻的单词)
- postgres_fdw现在支持远程连接,排序,UPDATE s和DELETE小号
- 实质性的改进,特别是在多CPU服务器的可扩展性方面
系统的最佳实践
关闭防火墙
- 查看防火墙的状态
firewall-cmd --state
[root@localhost sas_data]# firewall-cmd --state
not running - 关闭防火墙
临时关闭 :
systemctl stop firewalld
禁止开机启动:
systemctl disable firewalld
关闭selinux
- 查看selinux状态:
# getenforce
Disabled 关闭,其他的都表示开启状态
# sestatus -v
SELinux status: enabled/disabled
- 关闭selinux
1.假设selinux是正在运行的,我们可以使用setenforce 命令设置临时关闭,不用重启生效。
# setenforce 0
2.改变配置文件,需要重启生效
# vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled,保存重启即可
文件系统预读设置
在Linux文件系统中,当执行向前的顺序的读操作时,Linux内核里的预读会在应用读取数据请求之前,预先读取磁盘上的数据对于当下较快的驱动,预读操作是获取高性能读取的关键所在。pg数据库安装之前,要根据业务的类型与具体情况设置该值
用户可以通过blockdev 命令查看当前预读取值得大小,如
[root@GuangFa_PG9 ~]# blockdev --getra /dev/sda
8192
该值的单位为512字节,对于现在的硬件,通常大小为 4096~16384
可通过如下命令修改
[root@GuangFa_PG9 ~]# blockdev --setra 4096 /dev/sda
[root@GuangFa_PG9 ~]#
[root@GuangFa_PG9 ~]# blockdev --getra /dev/sda
4096
文件访问时间
用户每次访问Linux 上的文件时,文件都会更新一个叫做=作上次访问时间(atime)的属性。读取数据时,这种开销成了稳定的写入流,在数据库中,这可不是一个受欢迎的开销。在/etc/fstab中,用户可以将 noatime 添加到卷挂载选项中来禁止这种行为。例如
/dev/sda ext3 noatime,errors=remount-ro 0 1
透明大页的关闭
可以看到,默认时开启的,我们需要将其关闭
[root@GuangFa_PG9 usr]# cat /sys/kernel/mm/*transparent_hugepage/enabled
[always] madvise never
安装PG9.6
下载源码包
进入PG官网,进入源码下载界面,选择Pg9.6进行下载(一般的,大版本下的小版本都是进行一些bug修复,维护等,所以一般的都建议使用最新的,比如9.6.x中最新的为9.6.11)
解压源代码
将源码包下载到系统之上
tar -xvzf postgresql-9.6.0.tar.gz
[root@GuangFa_PG9 opt]# cd postgresql-9.6.0
[root@GuangFa_PG9 postgresql-9.6.0]# ls
aclocal.m4 config configure configure.in contrib COPYRIGHT doc GNUmakefile.in HISTORY INSTALL Makefile README src
查看编译选项
编译安装时需要查看编译选项,这里挑几个重要的参数
[root@GuangFa_PG9 postgresql-9.6.0]# ./configure --help
- --prefix=PREFIX: 指定安装目录,默认安装位置为/usr/local/pgsql
- --includedir=DIR: 指定一个C和C++的头文件目录
- --with-pgport=PORTNUM:指定初始化数据目录的默认端口
- --with-blocksize=BLOCKSIZE:指定数据文件的块大小,默认为8KB
- --with-wal-blocksize=BLOCKSIZE:指定wal文件得块大小默认为8kB
- --with-wal-segsize=SEGSIZE:指定wal文件得大小,默认为16MB
编译安装
直接进行编译安装,若有依赖用yum解决依赖即可(PG的依赖需求非常少,所以是非常好编的)
./configure --prefix=/usr/pgsql9.6
make
make install
添加用户
[root@GuangFa_PG9 ~]# useradd -U postgres
配置用户环境变量
export PATH=/usr/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/usr/pgsql/lib:$LD_LIBRARY_PATH
export PGDATA=/pgdata/
export PGHOST=/tmp
配置好目录
将数据库数据目录和安装目录分别准备好
[root@GuangFa_PG9 ~]# mkdir /pgdata
[root@GuangFa_PG9 ~]# cd /usr/
[root@GuangFa_PG9 usr]# ln -s pgsql9.6 pgsql
[root@GuangFa_PG9 usr]# chown -R postgres:postgres /pgdata
[root@GuangFa_PG9 usr]# chown -R postgres:postgres pgsql
[root@GuangFa_PG9 usr]# chown -R postgres:postgres pgsql9.6
[root@GuangFa_PG9 usr]# chmod 700 /pgdata/
初始化
直接在postgres 运行initdb,即可初始化数据库
[postgres@GuangFa_PG9 ~]$ initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /pgdata/ -l logfile start
数据库参数设置
在初始化完成之后,可以根据给定的启动语句直接将数据库启动,但是由于此时的数据库设置完全为默认,可以修改一下配置在启动
日志策略
在初始化完成之后,Pg默认时不会打开日志的,所以报错或是提示什么的就直接输出到屏幕上,这对运维当然是不方便,所以可以配置一下日志策略
- 将日志收集打开
logging_collector = on
log_directory = 'pg_log'
这两个参数要设置好,这个参数修改是需要重启的。
这边是一般情况下的日志策略,我选了三个比较经典的贴了出来。一般情况下这三个策略是可以满足一般的日志要求了。如下
- 每天生成一个新的文件
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 1d
log_rotation_size = 0
- 每当日志写满一定的大小,(如10M),则切换一个日志
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 0
log_rotation_size = 10M
- 只保留七天的日志,进行循环覆盖
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
监听IP
一般的都会改为*,允许远程连接
#listen_addresses = 'localhost' # what IP address(es) to listen on;
listen_addresses = '*'
在pg_hba.conf 文件中,将自己需要访问的IP段添加上去,以保证远程访问服务器正常
内存参数的设置
安装完成之后,可以修改以下两个主要的内存参数
- shared_buffer : 共享内存的大小,主要用于共享数据块
- work_mem : 单个SQL执行的时候,排序,hash jion所使用的的内存。SQL运行完之后,内存就释放了
shared_buffer 默认值为32MB,work_mem为1MB,如果你的机器上有足够的内存,可以把这个值设置的大一点,这样数据库就能缓存更多的数据块。当读取数据时,就可以从共享内存中读取,而不需要再去从文件上读取
work_mem 设置的大一点会让排序操作变得快一些
tips
在pg的配置文件postgressql.conf中一个个的修改这些配置文件是比较麻烦的,其实可以直接这些参数设置写到安装目录下的 postgresql.auto.conf 文件中,此文件在初始化成功后自动生成,且是空的。 在数据库启动时,PG会先读取此配置文件下的相关配置,优先级要比postgresql.conf 要高,适合刚开始的批量修改
启动数据库
[postgres@GuangFa_PG9 ~]$ pg_ctl start
server starting
[postgres@GuangFa_PG9 ~]$ LOG: redirecting log output to logging collector process
HINT: Future log output will appear in directory "pg_log".
[postgres@GuangFa_PG9 ~]$
[postgres@GuangFa_PG9 ~]$
[postgres@GuangFa_PG9 ~]$
[postgres@GuangFa_PG9 ~]$ psql
psql (9.6.0)
Type "help" for help.
postgres=#
至此,最佳实践安装PostgreSQL9.6 结束