0
点赞
收藏
分享

微信扫一扫

第二章:德哥之PostgreSQL在Linux中的软件安装


文章目录

  • 1.数据库关心的OS内核参数设置
  • 2.Linux资源限制
  • 3.大页配置
  • 4.存储卷管理
  • 5.文件系统条带、inode、mount配置
  • 6.cgroup资源隔离
  • 7.编译安装
  • 8.RPM安装
  • 9.插件安装
  • 10.大版本升级-二进制校验

1.数据库关心的OS内核参数设置

/etc/sysctl.conf

  • 链接中数据库关心的OS内核参数

2.Linux资源限制

/etc/security/limits.conf

  • 链接中的数据库关心的资源限制

3.大页配置

5-6k个长连接都连接到数据库中,客户端访问数据库中的表时,数据库使用shared buffer进行加速,一个连接对应一个进程,该连接会访问shared buffer中很多个页,会保存touch到内存的位置,存入到内存的哈希表里,touch越多,哈希表越大。
huge page就是解决这个问题。

  • 链接:PostgreSQL Huge Page 使用建议 - 大内存主机、实例注意,PostgreSQL hugepage 支持与配置

为什么要使用huge page

  • OOM
  • Partition table,Relcache
  • Process model,SHared buffer touch,hash table,Global shared meta cache

评估

  • 平哥PG启动需要多少共享内存,先使用非大页启动

配置postgresql.conf

启动数据库,从postmaster.pid中获取数据启动需要多少内存。获得PID
head -1 $PGDATA/postmaster.pid

计算数据库启动用了多少内存,指定进程ID
pmap 4170|awk '/re-s/ && /zero/{print $2}'
6490428K

  • 计算需要多少huge page

grep ^Hugepagesize /proc/meminfo
Hugepagesize: 2048kb

计算需要多少huge page
6490428/2048约等于3170

配置

  • 配置postgresql.conf,让数据库使用huge page

huge_pages=on#或者try,try是优先使用huge page
shared_buffers=8GB#使用v8GB内存

  • 操作系统(可以关闭透明大页)

配置grub.conf,接着重启系统
numa=off
transparent_hugepage=never

或者在/etc/rc.local中加入下面几行,接着重启OS
if test -f /sys/kernel/mm/transparent_hugepage/enabled;then
	echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;then
	echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

  • 启动数据库

pg_ctl start

  • 查看是否使用大页

获取PID
head -1 $PGDATA/postmaster.pid
4170

计算数据库启动用了多少内存,指定进程PID
pmap 4170|awk '/re-s/ && /zero/{print $2}'
没有任何返回,说明使用了huge page

4.存储卷管理

为什么要卷管理

  • 大表空间(PG表空间与目录对应,目录与文件系统对应)
  • 单个块设备空间不够
  • 多个块设备组成一个大文件系统

如何进行卷管理?

  • 链接:PostgreSQL 11 1万亿 tpcb 性能测试 on 阿里云ECS + ESSD + zfs/lvm2条带 + block_size=32K
  • lvm
  • Zfs:BSD系统

5.文件系统条带、inode、mount配置

见链接中的块设备部署策略1 - lvm2 , ext4

6.cgroup资源隔离

非虚拟化技术

  • 链接:Linux cgroup - memory子系统讲解
  • 链接:Linux cgroup资源隔离各个击破之 - io隔离
  • 链接: cpu与cpuset子系统讲解
  • 链接:cgroup 术语和规则
  • cpu隔离
  • memory隔离
  • lops rw隔离
  • bps rw隔离

7.编译安装

  • PG源码位置,File Browser(PG ftp)
  • PostgreSQL on Linux 最佳部署手册 - 珍藏级

8.RPM安装

PostgreSQL 10 + PostGIS + Sharding(pg_pathman) + MySQL(fdw外部表) on ECS 部署指南(适合新用户) - 珍藏级

环境变量

su - postgres  
  
vi ~/.bash_profile  
  
##可不要export PS1="$USER@`/bin/hostname -s`-> "  
export PGPORT=1921 
export PGDATA=/data01/pg_root$PGPORT  
export LANG=en_US.utf8  
export PGHOME=/usr/pgsql-10  
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH  
export DATE=`date +"%Y%m%d%H%M"`  
export PATH=$PGHOME/bin:$PATH:
export MANPATH=$PGHOME/share/man:$MANPATH  
export PGHOST=$PGDATA  
export PGUSER=postgres  
export PGDATABASE=postgres  
alias rm='rm -i'  
alias ll='ls -lh'  
unalias vi

9.插件安装

插件链接 兼容oracle的话,需要装orafce的包
git方式

wget https://api.pgxn.org/dist/orafce/3.17.0/orafce-3.17.0.zip
unzip orafce-3.17.0.zip
cd orafce-3.17.0
export PATH=/home/wangji/pgsql11.1/bin/:$PATH
##pg_config作用是:与PG编译相关
which pg_config
USER_PGXS=1 make
USER_PGXS=1 make install

安装完毕后,就会有extension相关的library,控制文件(XXX.control,控制文件里面会写默认的sql),sql文件等
$PGHOME/share/extension/

我当前使用的版本是13.5
[postgres@node4 extension]$ ll |grep -i fce
-rw-r--r--. 1 postgres postgres 130K Dec 28 15:41 orafce--3.17.sql
-rw-r--r--. 1 postgres postgres  205 Dec 28 15:41 orafce.control
[postgres@node4 extension]$ pwd
/home/wangji/pginstall/share/postgresql/extension

orafce插件中的sql文件可以在create extension XXX.sql可以执行

插件的使用:
有操作符,使用create extension,会执行控制文件;
\dx可以列出orafce加载了哪些对象
postgres=# create extension orafce;
CREATE EXTENSION
postgres=# \dx
                                                  List of installed extensions
  Name   | Version |   Schema   |                                          Description
---------+---------+------------+-----------------------------------------------------------------------------------------------
 orafce  | 3.17    | public     | Functions and operators that emulate a subset of functions and packages from the Oracle RDBMS

对应的library在$PGHOME/lib里面

[postgres@node4 postgresql]$ ll|grep orafce
-rwxr-xr-x. 1 postgres postgres 1.3M Dec 28 15:41 orafce.so
[postgres@node4 postgresql]$ pwd
/home/wangji/pginstall/lib/postgresql

10.大版本升级-二进制校验

大版本元数据会改(catalog),小版本元数据不会改
不论库多多大,升级只做元数据的导出和导入
在现有的数据上面,直接变成一个新的版本,可以使用pg_upgrade

  • pg_upgrade原理:使用旧版本将旧的元数据导出来,使用新版本将旧的元数据再导入进去
  • 链接

pg_upgrade -b $PGHOME/bin -B $PGHOME/bin -c -d $PGDATA -D /data01/wangji/pg_root8000

  • pg_controldata
    打印在 initdb 期间初始化的信息

[postgres@node4 extension]$ pg_controldata
pg_control version number:            1300
Catalog version number:               202007201
Database system identifier:           7046654676351034825
Database cluster state:               in production
pg_control last modified:             Tue 28 Dec 2021 03:39:59 PM CST

跨版本增量复制

  • 方式:使用逻辑导出导入、逻辑复制xdb,mtk、PG逻辑订阅(类似Mysql binlog复制)
  • PostgreSQL 快速大版本升级多种方案 - 含重点介绍fast & safe upgrade to PostgreSQL 9.4 use pg_upgrade & zfs
  • 参考:第二章:安装,DBA不可不知的操作系统内核参数,DBA不可不知的操作系统内核参数


举报

相关推荐

0 条评论