文章目录
- 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不可不知的操作系统内核参数