近日由于系统运行时间太长,数据库库表中的数据也是越来越多,为了缩短库表的操作时间,所以对数据库中的部分库表进行分区的操作。

通过研究,决定采用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安装、配置的更多相关文章

  1. postgresql分区表探索(pg_pathman)

    使用场景 许多系统在在使用几年之后数据量不断膨胀,这个时候单表数据量超过2000w+,数据库的查询也越来越慢,而随着时间的推移许多历史数据的重要性可能逐渐下降.这时候就可以考虑使用分区表来将冷热数据分 ...

  2. PostgreSQL分区表实现——pg_pathman分区表管理

    该博文用于自己学习记录,内容节选自: https://github.com/digoal/blog/blob/master/201610/20161024_01.md pg_pathman 创建分区表 ...

  3. Linux下apache+phppgadmin+postgresql安装配置

    Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...

  4. postgresql+slony-i安装配置主从

    slon软件下载地址:slony1-1.2.6 http://slony.info/downloads/1.2/source/ postgresql下载地址: http://www.postgresq ...

  5. Centos 7.3 安装配置 PostgreSQL 9.x

    一.安装 PostgresSQL Centos 7 自带的 PostgresSQL 是 9.2 版的.因为,yum 已经做了国内源,速度飞快,所以直接就用 yum 安装了.依次执行以下命令即可,非常简 ...

  6. 安装配置postgreSQL+pgcli+pgadmin3

    记录了postgreSQL数据库的完整的安装配置过程,以及postgreSQL的pgcli命令行智能提醒扩展,pgadmin3图形化管理客户端的配置安装.此postgresql是bigsql版安装详情 ...

  7. Windows上PostgreSQL安装配置教程

    Windows上PostgreSQL安装配置教程 这篇文章主要为大家详细介绍了Windows上PostgreSQL安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PostgreSQL的 ...

  8. PostgreSQL 安装配置 (亲测可用)

    转自:http://blog.csdn.net/jesseyoung/article/details/41348835 受作者博客限制,请访问上面的链接 ---------- 下面是另一个转载 --- ...

  9. Django基础之安装配置

    安装配置 一 MVC和MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的 ...

随机推荐

  1. QByteArray数据进行CRC32校验时产生的随机结果

    QT中使用QByteArray来存放了C++中的char数组. 两端使用相同的crc32进行校验,QT中却产生了随机的校验结果, C++端产生唯一的正确校验结果. 查看QByteArray相关资料,未 ...

  2. EasyNVR摄像机网页无插件直播方案H5前端构建之:bootstrap弹窗功能的实现方案与代码

    前言介绍 在web前端的网页设计中,为了展示出简洁的网页风格和美观的效果,往往会使用弹窗效果在EasyNVR前端页面录像检索功能时,必然会播放录像,如果单独为播放录像文件排一个界面,用户在使用上会更加 ...

  3. (记录问题)1.Canvas.drawArc()方法的问题

    先看看异常: 一眼看去就知道说的是方法找不到错误 后面发现是系统版本过低,4.0的系统找不到5.0后添加的方法报的错. 修改后完美解决

  4. prototype和__proto__的关系是什么?

    我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法.(这个对象下面有个属性,这个属性是另外一个对象的应用 ,这个属性就 ...

  5. openstack keystone 总结

    1.OpenStack组件 OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack是一个不断发展的系统,在它的发展历程之中,它的组件个数在增加,服务 ...

  6. 超详尽-QThread的正确使用姿势-以及信号槽的跨线程使用

    贴上两篇博文 一.http://www.cnblogs.com/findumars/p/5031239.html 循序渐进介绍了,怎样正确的让槽函数工作在子线程中. 同时介绍了信号槽的绑定与线程的关系 ...

  7. SSM学习系列

    Spring+SpringMVC+MyBatis Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识 Spring+SpringMVC+MyBatis深入 ...

  8. jQuery Ajax async=>false异步改为同步时,导致浏览器假死的处理方法

    今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可以刷新用户当前的积分,这个肯定需要使用到ajax的同步请求了,当时喀喀喀三下五除二写玩了,大概代码如下: /** * 异步当前用户 ...

  9. kali更新软件源

    首先就是修改软件源文件 /etc/apt/sources.list 可以用leafpad打开,在终端中键入: leafpad /etc/apt/sources.list 原码是kali官方的软件源,更 ...

  10. golang开发:环境篇(六) Go运行监控Supervisord的使用

    为什么要使用Supervisord 17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了.到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功 ...