7天突破PolarDB for Postgre 2022版 — 第六讲 HTAP应用场景实践

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 分享人:渊云,阿里云智能数据库产品事业部PolarDB产品部内核开发工程师

7天突破PolarDB for Postgre 2022版

第六讲  HTAP应用场景实践


分享人:渊云,阿里云智能数据库产品事业部PolarDB产品部内核开发工程师


视频地址:https://developer.aliyun.com/learning/course/992/detail/14980


目录

一、前期准备

二、导入数据

三、执行 PostgreSQL 单机并行执行

四、执行 PolarDB HTAP 单机并行执行


正文:

本节将利用 PolarDB for PostgreSQL 的 HTAP 能力来加速 TPC-H 的执行,实践将基于单机本地存储来运行。


一、前期准备


1、部署 PolarDB PG


  • 在运行前默认已经通过前置文档部署好本地多节点 HTAP 实例。

前置文档:https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/guide/db-localfs.html#%E6%9C%AC%E5%9C%B0%E5%A4%9A%E8%8A%82%E7%82%B9%E5%B8%A6%E5%A4%87%E5%BA%93%E5%AE%9E%E4%BE%8B


  • 也可以直接从 DockerHub 上拉取 HTAP 实例镜像:

docker pull polardb/polardb_pg_local_instance:htap

docker run -it --cap-add=SYS_PTRACE --privileged=true --name polardb_pg_htap polardb/polardb_pg_local_instance:htap bash


  • 总计 1 个主节点(运行于 5432 端口),2 个只读节点(运行于 5433/5434 端口)。


  • 可以通过下面的命令来验证:

ps xf

会看到如下的三个进程,1 个主节点(运行于 5432 端口),2 个只读节点(运行于 5433/5434 端口):

image.png


2、生成 TPC-H 测试数据集

TPC-H 是专门测试数据库分析型场景性能的数据集,一共有 22 条分析型场景下的 SQL。用 TPC-H 可以有效测试 PolarDB 的 HTAP 的能力。通过 tpch-dbgen 工具来生成任意大小的数据集。


TPC-H资料:https://www.tpc.org/tpch/default5.asp

tpch-dbgen:https://github.com/qiuyuhang/tpch-dbgen


# 下载 tpch-dbgen

git clone https://github.com/qiuyuhang/tpch-dbgen.git


# 编译代码

cd tpch-dbgen

make

执行如下命令,生成模拟数据:


# 生成 10GB 数据

./dbgen -s 10


说明:建议先按照该命令,从 10GB 大小的数据开始生成。体验完本案例后还可尝试 100GB 的数据,即将该命令行中的 10 替换为 100。这里需要注意不要超过本机外存容量。


简单说明一下tpch-dbgen 里面的各种文件:


  • 后缀为 .tbl 表示生成的表数据;
  • queries/ 中存放的是 TPC-H 的 22 条 SQL;
  • 含有 explain 的 .sql 文件只打印计划,并不实际执行;
  • answers/ 中存储了 TPC-H 中 22 条 SQL 的执行结果;


二、导入数据


通过 psql 导入 TPC-H 数据。


注意:一直要在 tpch-dbgen/ 目录下执行。


# 创建表

psql -f dss.ddl


# 进入 psql 命令行

psql


# 导入数据

\copy nation from 'nation.tbl' DELIMITER '|';

\copy region from 'region.tbl' DELIMITER '|';

\copy supplier from 'supplier.tbl' DELIMITER '|';

\copy part from 'part.tbl' DELIMITER '|';

\copy partsupp from 'partsupp.tbl' DELIMITER '|';

\copy customer from 'customer.tbl' DELIMITER '|';

\copy orders from 'orders.tbl' DELIMITER '|';

\copy lineitem from 'lineitem.tbl' DELIMITER '|';


数据导入完成后,逐行执行如下命令,对创建的表设置最大并行度:

# 对需要 PX 查询的表设置最大并行度(若不设置则不会进入 PX 查询)

alter table nation set (px_workers = 100);

alter table region set (px_workers = 100);

alter table supplier set (px_workers = 100);

alter table part set (px_workers = 100);

alter table partsupp set (px_workers = 100);

alter table customer set (px_workers = 100);

alter table orders set (px_workers = 100);

alter table lineitem set (px_workers = 100);


三、执行 PostgreSQL 单机并行执行


模拟数据导入到 PolarDB 后,先执行单机并行查询,观测一下查询速度。


1、psql 连入后,执行如下命令,开启计时。

\timing


2、通过 max_parallel_workers_per_gather 参数设置单机并行度:

set max_parallel_workers_per_gather=2; -- 并行度设置为 2


3、执行如下命令,查看执行计划。

\i queries/q18.explain.sql

可以看到如图所示的 2 个并行度的并行计划:

image.png


4、执行 SQL,可以看到部分结果(按 q 不查看全部结果)和运行时间,运行时间为 1 分 23 秒:

\i queries/q18.sql


image.png


提示:如果单机并行度太高,可能会出现如下的错误提示:pq: could not resize shared memory segment "/PostgreSQL.2058389254" to 12615680 bytes: No space left on device。原因是 Docker 预设的 shared memory 空间不足,可以设置参数并重启 Docker 进行解决,参考链接:https://stackoverflow.com/questions/56751565/pq-could-not-resize-shared-memory-segment-no-space-left-on-device


四、执行 PolarDB HTAP 单机并行执行

在体验完单机并行查询后,开启 PolarDB HTAP 的并行执行,在单机上重新体验一下查询性能。


1、在 psql 后,执行如下命令,开启计时(若已开启,可跳过)。

\timing


2、执行如下命令,开启跨机并行查询(PX)。

set polar_enable_px=on;


3、设置每个节点的并行度为 1。

set polar_px_dop_per_node=1;


4、执行如下命令,查看执行计划。

\i queries/q18.explain.sql

该引擎集群带有 2 个 RO 节点,开启 PX 后默认并行度为 2x1=2 个:

image.png


5、执行 SQL:

\i queries/q18.sql

可以看到部分结果(按 q 不查看全部结果)和运行时间,运行时间为 1 分钟,比单机并行的结果降低了 27.71% 的运行时间。感兴趣的同学也可加大并行度或者数据量查看提升程度。

image.png


跨机并行查询会去获取全局一致性视图,因此得到的数据是一致的,无需担心数据正确性。可以通过如下方式手动设置跨机并行查询的并行度:


set polar_px_dop_per_node = 1;

\i queries/q18.sql


set polar_px_dop_per_node = 2;

\i queries/q18.sql


set polar_px_dop_per_node = 4;

\i queries/q18.sql

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
10月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB 开源基础教程系列 7.2 应用实践之 跨境电商场景
本文介绍了如何在跨境电商场景中快速判断商标或品牌侵权,避免因侵权带来的法律纠纷。通过创建品牌表并使用PostgreSQL的pg_trgm插件和GIN索引,实现了高性能的字符串相似匹配功能。与传统方法相比,PolarDB|PostgreSQL的方法不仅提升了上万倍的查询速度,还解决了传统方法难以处理的相似问题检索。具体实现步骤包括创建品牌表、插入随机品牌名、配置pg_trgm插件及索引,并设置相似度阈值进行高效查询。此外,文章还探讨了字符串相似度计算的原理及应用场景,提供了进一步优化和扩展的方向。
275 11
|
10月前
|
SQL 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.5 应用实践之 TPCH性能优化
PolarDB在复杂查询、大数据量计算与分析场景的测试和优化实践.
320 7
|
10月前
|
搜索推荐 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.3 应用实践之 精准营销场景
本文介绍了基于用户画像的精准营销技术,重点探讨了如何通过标签组合快速圈选目标人群。实验分为三部分: 1. **传统方法**:使用字符串存储标签并进行模糊查询,但性能较差,每次请求都需要扫描全表。 2. **实验1**:引入`pg_trgm`插件和GIN索引,显著提升了单个模糊查询条件的性能。 3. **实验2**:改用数组类型存储标签,并结合GIN索引加速包含查询,性能进一步提升。 4. **实验3**:利用`smlar`插件实现近似度过滤,支持按标签重合数量或比例筛选。
193 3
|
存储 SQL 安全
应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。
|
存储 Oracle 关系型数据库
关系型数据库Oracle应用场景
【7月更文挑战第5天】
560 3
|
存储 Cloud Native 关系型数据库
PolarDB 高可用架构设计与实践
【8月更文第27天】 在现代互联网应用中,数据库作为核心的数据存储层,其稳定性和可靠性尤为重要。阿里云的 PolarDB 作为一款云原生的关系型数据库服务,提供了高可用、高性能和自动化的特性,适用于各种规模的应用。本文将详细介绍 PolarDB 的高可用架构设计,并探讨其实现数据安全性和业务连续性的关键技术。
432 0
|
10月前
|
人工智能 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.4 应用实践之 AI大模型外脑
PolarDB向量数据库插件通过实现通义大模型AI的外脑,解决了通用大模型无法触达私有知识库和产生幻觉的问题。该插件允许用户将新发现的知识和未训练的私有知识分段并转换为向量,存储在向量数据库中,并创建索引以加速相似搜索。当用户提问时,系统将问题向量化并与数据库中的向量进行匹配,找到最相似的内容发送给大模型,从而提高回答的准确性和相关性。此外,PolarDB支持多种编程语言接口,如Python,使数据库具备内置AI能力,极大提升了数据处理和分析的效率。
407 4
|
11月前
|
关系型数据库 分布式数据库 数据库
瑶池数据库大讲堂|PolarDB HTAP:为在线业务插上实时分析的翅膀
瑶池数据库大讲堂介绍PolarDB HTAP,为在线业务提供实时分析能力。内容涵盖MySQL在线业务的分析需求与现有解决方案、PolarDB HTAP架构优化、针对分析型负载的优化(如向量化执行、多核并行处理)及近期性能改进和用户体验提升。通过这些优化,PolarDB HTAP实现了高效的数据处理和查询加速,帮助用户更好地应对复杂业务场景。
325 4
|
11月前
|
存储 SQL 缓存
PolarDB-X 在 ClickBench 数据集的优化实践
本文介绍了 PolarDB-X 在 ClickBench 数据集上的优化实践,PolarDB-X 通过增加优化器规则、优化执行器层面的 DISTINCT 和自适应两阶段 AGG、MPP 压缩等手段,显著提升了在 ClickBench 上的性能表现,达到了业内领先水平。
|
12月前
|
SQL 关系型数据库 分布式数据库
基于PolarDB的图分析:银行金融领域图分析实践
本文介绍了如何使用阿里云PolarDB PostgreSQL版及其图数据库引擎(兼容Apache AGE,A Graph Extension)进行图数据分析,特别针对金融交易欺诈检测场景。PolarDB PostgreSQL版支持图数据的高效处理和查询,包括Cypher查询语言的使用。文章详细描述了从数据准备、图结构创建到具体查询示例的过程,展示了如何通过图查询发现欺诈交易的关联关系,计算交易间的Jaccard相似度,从而进行欺诈预警。
基于PolarDB的图分析:银行金融领域图分析实践

热门文章

最新文章