PostgreSQL分区表实现——pg_pathman安装、配置
近日由于系统运行时间太长,数据库库表中的数据也是越来越多,为了缩短库表的操作时间,所以对数据库中的部分库表进行分区的操作。
通过研究,决定采用pg_pathman插件对库表进行分区操作。pg_pathman安装、配置特此记录。
Pg_pathman原理:
PostgreSQL传统的分区方法,使用约束来区分不同分区存放的数据(配置constraint_exclusion=partition),执行select/delete/update时执行计划根据约束和查询条件排除不需要查询的分区表。
调用COPY或插入数据时使用触发器或规则,将数据插入对应的分区表。
传统的做法,无论是查询还是插入,对性能的影响都较大。
pg_pathman与传统的继承分区表做法有一个不同的地方,分区的定义存放在一张元数据表中,表的信息会cache在内存中,同时使用HOOK来实现RELATION的替换,所以效率非常高。
目前支持两种分区模式,range和hash,其中range使用binary search查找对应的分区,hash使用hash search查找对应的分区。
Pg_pathman 特性:
1. 目前支持range , hash分区。
2. 支持自动分区管理(通过函数接口创建分区,自动将主表数据迁移到分区表),或手工分区管理(通过函数实现,将已有的表绑定到分区表,或者从分区表剥离)。
3. 支持的分区字段类型包括int, float, date, 以及其他常用类型,包括自定义的domain。
4. 通过CUSTOM SCAN实现了有效的分区表JOIN, 子查询过滤分区。
5. 使用RuntimeAppend & RuntimeMergeAppend custom plan nodes实现了动态分区选择。
6. PartitionFilter HOOK,实现insert inplace, 代替传统的insert trigger或insert rule。
7. 支持自动新增分区。 目前仅支持range分区表。
8. 支持copy from/to 直接读取或写入分区表,提高效率。
9. 支持分区字段的更新,需要添加触发器,如果不需要更新分区字段,则不建议添加这个触发器,会产生一定的性能影响。
10. 允许用户自定义回调函数,在创建分区时会自动触发。
回调函数的规则如下
$part_init_callback$(args JSONB) RETURNS VOID 传入参数如下 /* RANGE-partitioned table abc (for exp: child abc_4) */ { "parent": "abc", "parttype": "", "partition": "abc_4", "range_max": "", "range_min": "" } /* HASH-partitioned table abc (for exp: child abc_0) */ { "parent": "abc", "parttype": "", "partition": "abc_0" }
11. 非堵塞式创建分区表,以及后台自动将主表数据迁移到分区表,非堵塞式。
12. 支持FDW,通过配置参数pg_pathman.insert_into_fdw=(disabled | postgres | any_fdw)支持postgres_fdw或任意fdw
13. 支持GUC参数配置,注意由于使用了HOOK,如果其他插件也使用了相同的HOOK,需要将pg_pathman放在前面注册,如pg_stat_statements。
以上内容摘自:https://yq.aliyun.com/articles/62314?spm=5176.8091938.0.0.tu4vhW
Pg_pathman安装、配置
Pg_pathman使用了custom scan provider api,所以只支持PostgreSQL 9.5以及以上的版本。
本次pg_pathman安装采用git的方式安装,首先安装git工具:
# yum install git
切换到admin用户,并进入postgresql目录:
从git克隆pg_pathman:
$ git clone https://github.com/postgrespro/pg_pathman
导入postgresql安装的环境变量:
$ export PATH=/home/digoal/pgsql9.6:$PATH
$ cd pg_pathman
$ make USE_PGXS=1
$ make USE_PGXS=1 install
更改postgresql的配置文件
$ cd $PGDATA
$ vi postgresql.conf
#将shared_preload_libraries注释取消,将下面变量赋值进去
shared_preload_libraries = 'pg_pathman,pg_stat_statements'
修改完成后,重启数据库服务
$ pg_ctl restart -m fast
启动数据库报错
这是由于未安装pg_stat_statements模块导致,pg_stat_statements模块位于contrib包中,因为contrib包为第三方工具包,虽然在postgresql数据库的安装包里面已经自带了contrib包,但是在安装数据库的时候并未主动安装,因此需要我们手动安装一下。
进去之前解压以后的postgresql数据库安装包的文件夹
$ cd /usr/local/postgresql-9.6.13
进入contrib文件夹,一次执行以下命令:
make make install
执行成功以后,再次启动数据库服务
启动成功
创建扩展
使用psql连接登录数据库
创建扩展
# create extension pg_pathman;
# create extension pg_stat_statements;
查看
# \dx
至此,pg_pathman安装配置完成
PostgreSQL分区表实现——pg_pathman安装、配置的更多相关文章
- postgresql分区表探索(pg_pathman)
使用场景 许多系统在在使用几年之后数据量不断膨胀,这个时候单表数据量超过2000w+,数据库的查询也越来越慢,而随着时间的推移许多历史数据的重要性可能逐渐下降.这时候就可以考虑使用分区表来将冷热数据分 ...
- PostgreSQL分区表实现——pg_pathman分区表管理
该博文用于自己学习记录,内容节选自: https://github.com/digoal/blog/blob/master/201610/20161024_01.md pg_pathman 创建分区表 ...
- Linux下apache+phppgadmin+postgresql安装配置
Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...
- postgresql+slony-i安装配置主从
slon软件下载地址:slony1-1.2.6 http://slony.info/downloads/1.2/source/ postgresql下载地址: http://www.postgresq ...
- Centos 7.3 安装配置 PostgreSQL 9.x
一.安装 PostgresSQL Centos 7 自带的 PostgresSQL 是 9.2 版的.因为,yum 已经做了国内源,速度飞快,所以直接就用 yum 安装了.依次执行以下命令即可,非常简 ...
- 安装配置postgreSQL+pgcli+pgadmin3
记录了postgreSQL数据库的完整的安装配置过程,以及postgreSQL的pgcli命令行智能提醒扩展,pgadmin3图形化管理客户端的配置安装.此postgresql是bigsql版安装详情 ...
- Windows上PostgreSQL安装配置教程
Windows上PostgreSQL安装配置教程 这篇文章主要为大家详细介绍了Windows上PostgreSQL安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PostgreSQL的 ...
- PostgreSQL 安装配置 (亲测可用)
转自:http://blog.csdn.net/jesseyoung/article/details/41348835 受作者博客限制,请访问上面的链接 ---------- 下面是另一个转载 --- ...
- Django基础之安装配置
安装配置 一 MVC和MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的 ...
随机推荐
- PMP 第4章错题总结
变更步骤: 1.配置管理活动:配置识别.配置状态记录.配置核实与审计2.项目章程中记录项目的目的和总体预算3.变更控制系统规定了变更管理流程及批准的权限4.项目章程是授权项目经理动用组织资源的文件5. ...
- 调试node接口
从node服务端到浏览器端,调试node脚本,验证接口功能是否正常. 一.温故知新 https://www.cnblogs.com/camille666/p/nodejs_server.html ht ...
- Centos7安装文件传输软件rz sz
一直使用Xshell的xftp传输文件,谁知道忽然无法正常使用. 于是,决定用户rz进行传输 安装步骤也比较简单 1.首先安装第三方源(以下源比默认源包含更多安装包,建议添加该源使用) yum ins ...
- 用PowerDesigner将SQL转pdm文件
1.打开新建的pdm文件,File->Reverse Enginner->Databases 2.选择对应数据库(DBMS),点击确定,然后添加SQL文件 3.点击确定 注:如果DBMS没 ...
- Maven依赖中scope的含义
https://www.jianshu.com/p/7145f01ac3ad Maven依赖中scope的含义 整理一下Maven中Scope的详细作用,都是抄的别人内容整理了一下.参考: https ...
- 长乐国庆集训Day5-2
T1 彩虹 题目 [题目描述] Mr.Raju和他的一个大家庭外出度假,他们想要乘着彩虹欣赏周围的景色,但是这样最会有一些问题. 在他们家族中,如果一个人想要骑上彩虹,那么他喜欢的所有人和喜欢他的所有 ...
- Locust性能测试_先登录场景案例
前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的loc ...
- 如何大幅提高百度云文件的下载速度?油猴+user-agent-switcher+PanDownload使用教程
最近尝试了提高百度云下载速度的方法,最后效果还不错,提供给大家参考.效果如图: 第一步:下载油猴插件 (截图来自word文档,所以是反的^_^||) 第二步:在油猴中添加新插件 搜索百度网盘 添加插 ...
- SP375 QTREE - Query on a tree (树剖)
题目 SP375 QTREE - Query on a tree 解析 也就是个蓝题,因为比较长 树剖裸题(基本上),单点修改,链上查询. 顺便来说一下链上操作时如何将边上的操作转化为点上的操作: 可 ...
- windows开机自启动的django服务
做了一个django项目,想部署在win10的笔记本电脑上,可以开机后台自动启动.找了很多的方法.最后成功了. 参考了这个博主的内容. https://blog.csdn.net/qq_3595961 ...