博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 9.6 for Centos7.4 最佳实践安装
阅读量:6507 次
发布时间:2019-06-24

本文共 5498 字,大约阅读时间需要 18 分钟。

概述

PostgreSQL9.6 是PG一个非常经典的稳定版本,现在还有许多用户在使用这个版本。本篇就教大家如何最佳实践安装PG9.6数据库

PG9.6的主要新增功能

PostgreSQL 9.6的主要增强功能包括:

  • 并行执行顺序扫描,连接和聚合
  • 在真空冻结操作期间避免不必要地扫描页面
  • 同步复制现在允许多个备用服务器以提高可靠性
  • 全文搜索现在可以搜索短语(多个相邻的单词)
  • postgres_fdw现在支持远程连接,排序,UPDATE s和DELETE小号
  • 实质性的改进,特别是在多CPU服务器的可扩展性方面

系统的最佳实践

关闭防火墙

  1. 查看防火墙的状态

    firewall-cmd --state

    [root@localhost sas_data]# firewall-cmd --state
    not running

  2. 关闭防火墙
    临时关闭 :
systemctl stop firewalld

禁止开机启动:

systemctl disable firewalld

关闭selinux

  1. 查看selinux状态:
# getenforce

Disabled 关闭,其他的都表示开启状态

# sestatus -vSELinux status: enabled/disabled
  1. 关闭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/sda8192

该值的单位为512字节,对于现在的硬件,通常大小为 4096~16384

可通过如下命令修改

[root@GuangFa_PG9 ~]# blockdev  --setra 4096  /dev/sda[root@GuangFa_PG9 ~]# [root@GuangFa_PG9 ~]# blockdev  --getra /dev/sda4096

文件访问时间

用户每次访问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]# lsaclocal.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.6makemake install

添加用户

[root@GuangFa_PG9 ~]# useradd -U postgres

配置用户环境变量

export PATH=/usr/pgsql/bin:$PATHexport LD_LIBRARY_PATH=/usr/pgsql/lib:$LD_LIBRARY_PATHexport 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 ... okcreating subdirectories ... okselecting default max_connections ... 100selecting default shared_buffers ... 128MBselecting dynamic shared memory implementation ... posixcreating configuration files ... okrunning bootstrap script ... okperforming post-bootstrap initialization ... oksyncing data to disk ... okWARNING: enabling "trust" authentication for local connectionsYou 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 startserver starting[postgres@GuangFa_PG9 ~]$ LOG:  redirecting log output to logging collector processHINT:  Future log output will appear in directory "pg_log".[postgres@GuangFa_PG9 ~]$ [postgres@GuangFa_PG9 ~]$ [postgres@GuangFa_PG9 ~]$ [postgres@GuangFa_PG9 ~]$ psqlpsql (9.6.0)Type "help" for help.postgres=#

至此,最佳实践安装PostgreSQL9.6 结束

转载地址:http://hszfo.baihongyu.com/

你可能感兴趣的文章
使用IntelliJ IDEA 配置Maven(入门)
查看>>
spring cloud 学习(10) - 利用springfox集成swagger
查看>>
Eclipse在线更新慢
查看>>
面向接口编程实现不改代码实现Redis单机/集群之间的切换
查看>>
caffe实现自己的层
查看>>
Python 字典 values() 方法
查看>>
visual studio如何附加到进程调试python命令
查看>>
volatile
查看>>
布局 约束添加规则
查看>>
程序寄存器与指令寄存器
查看>>
Vue slot分发内容
查看>>
十年阿里java架构师的六大设计原则和项目经验
查看>>
作为完美主义者(强迫症)如何将linux的eth1网卡修改为eth0网卡
查看>>
微信小程序之 Index(仿淘宝分类入口)
查看>>
java播放wav文件
查看>>
Linux - ubuntu 设置固定ip和设置dns
查看>>
SQLServer 进程无法向表进行大容量复制(错误号: 22018 20253)
查看>>
读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技术(125)
查看>>
在SpringBoot中使用FluentValidator验证插件
查看>>
MySQL数据库锁定机制
查看>>