德歌:阿里云RDS PG最佳实践

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
对象存储 OSS,20GB 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 5月27日云栖社区《云数据库RDS for PostgreSQL最佳实践》的直播分享顺利结束,来自阿里云的高级技术专家德歌与大家分享阿里云云数据库PostgreSQL的最佳技术实战,包括上云实战、数据迁移与同步、阿里云RDS相关周边组件用法、插件使用等内容。

直播视频:

0f920f9e9f9260f0cd3776966ec22aa45cc557ce

(点击图片查看视频)

幻灯片下载地址:https://oss-cn-hangzhou.aliyuncs.com/yqfiles/1138a8a3aff5f63b426162e265d98375.pdf


5月27日云栖社区《云数据库RDS for PostgreSQL最佳实践》的直播分享顺利结束,来自阿里云的高级技术专家德歌与大家分享阿里云云数据库PostgreSQL的最佳技术实战,包括上云实战、数据迁移与同步、阿里云RDS相关周边组件用法、插件使用等内容。直播中德歌还就部分操作在线进行了演示。本次视频直播的整理文章、视频、幻灯片整理完毕,如下内容。


上云实践

在上云之前,首先需要评估RDS的规格,这是因为线下使用的硬件可能与线上的硬件不能一一对应,并且线上的RDS可能还做了一定的优化。在评估RDS规格的时候,需要考虑以下几个方面:

  • 可用区:
    •  尽量与应用服务器在同一可用区;
    •  否则只能通过公网地址访问。
  • 数据库版本:根据业务需求选择,建议选择新版本;
  • 网络:与应用服务器在同一VPC,或者都在经典网络,否则只能通过公网地址访问;
  • 容量:根据实际的需求购买,最后留有足够余量(用于存储XLOG,已经运行SQL时可能产生的临时文件)。余量建议不低于1GB、同时不低于实际数据空间的20%;
  • 内存:建议大于活跃数据的实际占用空间;
  • CPU:根据购买的内存规格设定;
  • IOPS:根据购买的内存规格设定。

44a3bb9fb9af64de427b627b66a0fac46f11c1f2

图一 RDS PG性能评测与瓶颈分析

 

对于评测所选的RDS规格是否可以满足业务需求,可采用TPC-BTPC-C以及自定义评测模型对RDS PG进行性能评测与瓶颈分析。其中自定义模型评测中,可以使用Sysbench测试阿里云RDS PostgreSQL性能或者通过并行COPY 或写大对象测试网络吞吐率。

11983d14d10a27350854c8f1a964d9713b4fd111

图二 TPC-B实例诊断

  

在上云实践中,数据的迁移也至关重要,数据的迁移主要分为同构全量迁移、同构增量迁移、异构全量迁移、异构增量迁移四种方式。

同构全量迁移

399954ec4661c964b10bd444b8ed53399a4548ad

图三 同构全量迁移


从用户端PostgreSQL 迁移到阿里云 PostgreSQL主要有两种方法:第一种方法是在云端数据库创建与线下数据库一致的用户、数据库名。采用pg_dump 依次导出线下数据库,然后再采用pg_restore 依次还原线下数据库,整个迁移过程数据是不落地的,是通过管道过去的;另一种方法是借助阿里云提供的数据迁移工具DTS,通过简单的操作即可完成线上线下的数据迁移。

同构增量迁移

如果是用户端PostgreSQL 迁移到 阿里云 PostgreSQL的同构增量迁移,可以使用xDB增量迁移插件,该插件由enterprisedb默认提供。

异构全量迁移

如果线下是一个Oracle或者SQL Server数据库,可以采用DTS将数据迁移到线上的 PostgreSQL。

异构增量迁移

4cf8225c8e8ca0a87e8436b42f104737ea56cd9f


图四 异构增量迁移


异构增量的迁移实现的方法比较多。首先可以使用xDB增量迁移插件,该插件支持从Oracle、SQL Server迁移到EDB和PostgreSQL,反之同样可行。除此之外,Oracle GoldenGate(oracle的商业产品)和Symmetricds(基于触发器实现的开源软件)同样可支持异构增量迁移。

 

RDS PG使用最佳实践

接下来将介绍RDS PG使用最佳实践,主要包括备份与恢复、RT的优化、插件用法、参数最佳实践、安全与审计、规格升降级、数据分片的用法、读写分离、一主多备、异地容灾、诊断实践、事件通知等。

备份与恢复

4cf8225c8e8ca0a87e8436b42f104737ea56cd9f

图五 备份与恢复


RDS的备份与恢复可在PG的管理控制台进行实现,使用者只需将需要备份的时间点等调度信息在管理控制台配置好之后,就可以自动地在后台实现全量以及归档的备份。备份恢复到任意时间点的操作也很简单,只需要在控制管理台中创建一个临时实例,并输入需要恢复到的时间点即可。但有一点值得注意的是,如果将线上的数据库恢复到某个具体的时间点,首先需要创建一个临时实例,然后再从该临时实例中当时数据库中的数据导入到线上数据库中,临时实例是目前无法替换线上的数据库的。

RT的优化

一个请求的RT大约在2ms左右,因此网络的RT会严重影响系统的性能,比如在几条SQL语句的RT就可以达到十几毫秒,而由这几条SQL语句组成的事物在数据库中执行时间仅需1ms甚至更短的时间。针对这种情况,可以采用UDF进行RT的优化,用户自己将业务逻辑下降到数据库层面处理,充分地利用数据库的计算能力,以减轻网络延迟带来的瓶颈。

插件用法

PostgreSQL可以查询当前RDS PG版本支持的插件名,具体的SQL语句见下图所示。创建插件的过程也很简单,只需要采用create extension+插件名的方式即可创建对应的插件。

 

cca7e8bb6a6bc42c3c81a8226aa505928800b29a

图六 插件用法


具体的插件用法,使用者可以参看插件对应的手册进行操作。这里简单介绍两种插件:

  •    auto_explain 插件用法:用户可以通过此插件查看某些SQL语句在执行过程中是否出现异常;
  •    pg_hint_plan 插件:该插件是一个强制用户使用用户提供的执行计划的插件。

安全与审计

1a0c6aa23b477cb25a3b741a11942a5f278f75a2

图七 安全和审计


用户可以登陆RDS管理控制台来设置安全和设计,其中通白名单为允许连接数据库的来源IP;同时SQL设计也是需要用户主动开启的,开启之后可以看到数据库之间的每条SQL语句。

规格升降级

用户可登陆RDS管理控制器查看基本信息和变更配置,完成规格升降级。

分布式用法

5e064189773fb9834b654decb97fd9fa59113a00

图八 分布式用法


尽管目前RDS PG是多节点配置,但是整体对用户提供访问服务的还是一个节点,这一个节点就有可能成为整个系统的瓶颈。虽然RDS PG现在还不支持分布式,但对于用户而言,实现分布式其实很简单。用户通过在ECS上安装分布式中间件即可实现分布式用法。比如说用户购买了8个RDS,然后在中间件上配置好,然后就可以将数据均衡地打散到8个RDS中。目前支持的中间件包括:plproxy、oneproxy for pgsql、pgpool-II、pg_shard、citusdb、FDW。

读写分离

由于目前RDS尚未开放只读节点,用户在做读写分离时,需要将RDS同步一份到ECS上,然后再通过中间件来实现读写分离。读写分离的插件也相当多,包括Pgpool-II、Oneproxy for pgsql和Pg-jdbc,可以实现用户自定义函数、黑名单、白名单的配置。

一主多备

目前,RDS PG内部一主多备功能正在建设。用户如果自建RDS PG备库有两种方法:

  •    自建RDS PG逻辑备库:用户可以使用RDS PG提供的alidecode插件,在异地创建RDS PG的逻辑备库;
  •    自建RDS PG的物理备库:如果用户需要构建一个和RDS PostgreSQL一模一样的备库,则可以通过流复制或者归档来完成。

异地容灾的操作类似于一主多备,因此此处不再赘述。

诊断实践

5bd00cb896ab4272fbbd02c58a6ee1934b3dfdab

图九 诊断实践


用户可以登录RDS管理控制台,进行设置报警阀值、设置监控间隔和查询慢SQL;同时控制台也提供了查看日志的接口;此外,还可以使用auto explain和debug 分别实现查看当前的执行计划是否异常和打印SQL的parse, rewritten, plan日志,分析计划相关的问题。  

事件通知

通过在管控平台设置好阀值,接收通知,同时当数据库可用性状态变化时也会自行通知。


阿里云RDS相关周边组件用法

7e84a7534a5964c3f6998ae302e7f6fa51980f33

图十 阿里云RDS相关周边组件用法

 

阿里云RDS相关周边组件中最为重要的就是OSS(对象存储),OSS的使用方法较多,其中比较重要的一点就是实现数据的冷热分离。下面一个实例来展示下其实现过程:用户购买RDS PG之后,会连续不断地有数据插进来,并且不断地有数据变成冷数据,新插进来的数据成为热数据。如果将所有的数据都保留在线上的PG里,数据库会越来越大,但是这些冷数据的访问频率并不高。针对该类应用场景,阿里RDS提供了一个名为OSS_fdw的插件,可以将历史数据(冷数据)导入OSS中,然后通过建web表的方式直接读取之前导入的历史数据。经过上述操作可以实现冷热数据分离,热数据放在关系数据库中,冷数据放在OSS中,需要使用冷数据时,可以将其导入一个临时库中,也就是一个预热过程,预热之后和访问本地数据相同。

另外一个就是管理,管理主要是冷数据和OSS对象存储的URL对应关系,包括时间片。这些对应关系可以存储在RDS PG中,用户只需维护好URL的元数据信息,定时将冷数据导出至OSS,实现冷热数据的分离。应用在访问RDS时,访问的是热数据,如果访问冷数据,需要一个过读元数据,然后将对应的OSS导入到RDS PG中的预热过程。性能上,每天新增的数据插入OSS,对于每个实例,可以实现100MB/s速度。

此外,PostgreSQL也可以和 MongoDB结合使用,将 MongoDB作为一个计算单元,PostgreSQL 作为 一个SQL的接口来实现MongoDB BI功能。


数据同步

723e7c8f384d5bbeaceb072bfc4617c0d96202ab

图十一 数据同步


数据同步又分为RDS PG到线下单向同步、线下到RDS PG单向同步、线上线下双向同步三种。

RDS PG到线下单向同步

从RDS PG到线下单向同步有两种方式,一是通过使用RDS PG提供的alidecode插件,在异地创建RDS PG的逻辑备库。在用户端的数据库可以是和RDS PG不一样的数据库,只同步部分数据;另一种方式是建立完全一致的物理备库。该过程需要申请一定的权限,可以在线下做一个云端数据库的镜像。

线下到RDS PG单向同步

0e303f2f10285be84b2ccb5b96dd293fbb9c91af

图十二 线下到RDS PG单向同步

 

如果线下数据库版本大于等于9.4,就可以使用 Lgical Decode实现;如果版本小于9.4,可以采用增量的数据同步,如xDB、Goldengate、 Smmetricds。

线上线下双向同步

线上线下双向同步用到的技术与之前的提到的技术类似,如xDB和Logical Decode都是支持双向同步的。

 

文章内所提到的所有案例的详细介绍文章链接如下:

 

TPC-C 测试软件

HammerDB:http://www.hammerdb.com/document.html

 

OLTP 性能评测

https://yq.aliyun.com/articles/35517

https://github.com/digoal/sysbench

 

PostgreSQL

网络延迟 瓶颈定量分析:https://yq.aliyun.com/articles/35176

 

同构全量迁移:

方法一:https://help.aliyun.com/document_detail/rds/rds_qs_pg/rds_qs_pg_00007.html

方法二:https://help.aliyun.com/knowledge_list/8314900.html

 

同构增量迁移

xDB:https://dts.console.aliyun.com/

 

异构全量迁移

https://help.aliyun.com/knowledge_list/8314900.html

https://dts.console.aliyun.com/

 

RT的优化

https://yq.aliyun.com/articles/35176

https://yq.aliyun.com/articles/35517

 

插件用法

auto_explain :http://www.postgresql.org/docs/9.5/static/auto-explain.html

pg_hint_plan:https://yq.aliyun.com/articles/7255

 

自建RDS PG的物理备库

https://yq.aliyun.com/articles/7255

 

OpenAPI

https://help.aliyun.com/document_detail/rds/OpenAPI-manual/RDS-OpenAPI-Invoke/rquest-structure.html

 

关于分享者 

德歌 PostgreSQL中国社区发起人、阿里云飞天八部数据库技术组技术专家


相关系列文章

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
SQL 关系型数据库 MySQL
阿里云MySQL数据库价格、购买、创建账号密码和连接数据库教程
阿里云数据库使用指南:购买MySQL、SQL Server等RDS实例,选择配置和地区,完成支付。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码访问。同地域VPC内的ECS需将IP加入白名单以实现内网连接。参考链接提供详细步骤。
367 3
|
18天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
22天前
|
存储 关系型数据库 数据库
超1/3中国500强企业都在用的「汇联易」,为什么选用阿里云RDS?
迎峰而上:汇联易依托阿里云RDS通用云盘,加速业务智能化升级
超1/3中国500强企业都在用的「汇联易」,为什么选用阿里云RDS?
|
27天前
|
弹性计算 关系型数据库 MySQL
阿里云MySQL云数据库优惠价格、购买和使用教程分享!
阿里云数据库使用流程包括购买和管理。首先,选购支持MySQL、SQL Server、PostgreSQL等的RDS实例,如选择2核2GB的MySQL,设定地域和可用区。购买后,等待实例创建。接着,创建数据库和账号,设置DB名称、字符集及账号权限。最后,通过DMS登录数据库,填写账号和密码。若ECS在同一地域和VPC内,可内网连接,记得将ECS IP加入白名单。
429 2
|
28天前
|
SQL 关系型数据库 MySQL
阿里云mysql数据库价格购买和使用教程
阿里云数据库使用指南:购买MySQL、SQL Server等RDS实例,通过选择配置、地域和可用区完成购买。创建数据库和账号,分配权限。使用DMS登录数据库,进行管理操作。确保ECS与RDS在同一地域的VPC内,配置白名单实现内网连接。详细步骤见官方文档。
629 1
|
30天前
|
关系型数据库 MySQL 数据库
使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
【2月更文挑战第29天】使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
217 2
|
1月前
|
SQL 关系型数据库 MySQL
购买阿里云RDS实例
购买阿里云RDS实例
165 2
|
9月前
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
730 1
|
9月前
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
1052 2
|
8月前
|
SQL 存储 自然语言处理
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词