HTAP 应用场景实践 | 学习笔记

简介: 快速学习 HTAP 应用场景实践,介绍了 HTAP 应用场景实践系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【7天突破PolarDB for PostgreSQL 2022版HTAP 应用场景实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/992/detail/14980


HTAP 应用场景实践


内容介绍:

一、PolarDB for PostgreSQL HTAP 架构基本内容

二、实例实践


一、PolarDB for PostgreSQL HTAP 架构基本内容

这里所说的 HTAP 架构是指数据库是指可以同时应对 OLTP 事务性查询结构和 OLAP 分析性查询请求这样一个混合负载的特性和功能。针对 OLTP 事务性查询是通过主节点进行执行,针对 OLAP 分析性查询是通过分布式并行引擎进行查询加速。

image.png

常见的分布式并行引擎是基于 shared nothing 架构PolarDB 的分布式并行引擎是基于 Shared Storage 架构,也就是共享存储架构。


二、实例实践

利用 PolarDB HTAP 能力加速 TPC-H

1.前期准备

(1)部署 PolarDB PG

在运行前默认已经通过文档《实例部署:基于单机本地存储中部署好本地多节点HTAP 实例,一共1个主节点(运行于5432端口),2个只读节点(运行于5433/5434端口)

可以通过 ps xf 来查询具体的进程

image.png

可以看到,一共有3个进程,一个是主节点的进程,另外两个是只读节点的进程,分别占了5433和5434

然后确保通过 psql 命令进入 postgres 客户端

image.png

(2)生成 TPC-H 测试数据集

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

①下载 tpch-dbgen

可以通过下面这条命令来下载这样一条代码:

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

下载成功:

image.png

编译代码

cd tpch-dbgen

make

编译成功:

image.png

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

./dbgen -s 10

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

下面是生成好的数据:

image.png

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

后缀为 .tbl 表示生成的表数据;

queries/ 中存放的是 TPC-H 的 22 条 SQL;

含有 explain 的 .sql 文件只打印计划,并不实际执行;

answers/ 中存储了 TPC-H 中 22 条 SQL 的执行结果;

22条具体 SQL 的执行结果

image.png

2.导入数据

# 创建表(一定要进入 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);

px_workers 表示工作的最大并行度

3. 执行 PostgreSQL 单机并行执行

接下来会进行一个对比,分别对比的是 pg 本身带有的单机并行查询的能力与 px 并行执行的并行查询能力、他们计划的区别和运行时间的区别。在模拟数据导入 pg 后用 qsql 联入。

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

\timing

image.png

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

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

(单机并行度与和数有关,和数越多,可以设置的单机并行度越高)

image.png

这里的 set 是可以看对应参数的操作,看参数具体的值可以通过 show 方式查看,上图所示。

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

\i queries/q18.explain.sql

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

image.png

(4)执行如下 SQL

\i queries/q18.sql

可以看到部分结果和运行时间(10gb 也需要一分多钟的时间运行在数据量大的情况下,可以选择将程序放在后台运行)

image.png

如果想查看更多,可以回车查看更多,不需要则可按  q 退出。

退出可以看到运行时间,下图可知运行时间为1分23秒。

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

4.执行 跨机并行查询,并进行耗时对比

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

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

\timing

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

set polar_enable_px=on;

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

每个节点并行度:

每个节点有一个读写节点和两个只读节点,因为这里是单机的,如果是分布式的话,这里具体的两个只读节点代表两台 slot ,每台 slot 上可以设置并行度,如果是1的话,就是每台并行度只启一个 work 来并行执行,如果是2的话,每台机器有2个 work ,一共就是4个 work来执行。这是原来单机并行不具备的能力,原来的 pg 只能在单机上并行,不具有分布式的能力,但是可以扩展到多机来执行并行

set polar_px_dop_per_node=1;
image.png

查看两个参数是否设置成功

Show polar_enable_px;

Show polar_px_dop_per_node;

image.png

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

\i queries/q18.explain.sql

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

image.png 

PX Hash 就是以 hash 的方式把两个节点所查询到的数据分散到其他两个节点上。

Coordinator 指具体的意思,Coordinator 2:1 是会收集两个节点到主节点上。

PolarDB PX Optimizer 说明生成了分布式计划,可以通过分布式计划来执行一共跨机并行查找。

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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
恢复时间目标(RTO, Recovery Time Objective)缩短
恢复时间目标(RTO, Recovery Time Objective)缩短
516 2
|
机器学习/深度学习 运维 监控
提升数据中心效率的关键策略
【2月更文挑战第31天】随着数据量的爆炸性增长,数据中心作为信息处理和存储的核心设施,其运行效率直接影响到企业的服务质量和成本控制。本文将深入探讨数据中心效率提升的关键技术和管理策略,包括能效优化、自动化运维、以及弹性资源配置等。通过分析当前的挑战和解决方案,我们旨在为数据中心管理者提供实用的参考和指导,帮助他们在确保系统稳定性的同时,有效降低能耗和运营成本。
|
移动开发 小程序 JavaScript
【小程序质量提优解决方案】(二)内嵌H5加载异常(404)
【小程序质量提优解决方案】(二)内嵌H5加载异常(404)
514 0
|
8月前
|
网络协议
为何UDP协议不可靠?DNS为何选择UDP?
总的来说,UDP和TCP各有优势,选择哪种协议取决于应用的具体需求。UDP可能不如TCP可靠,但其简单、快速的特性使其在某些场景下成为更好的选择。而DNS就是这样的一个例子,它利用了UDP的优势,以实现快速、高效的名字解析服务。
457 14
|
Kubernetes 负载均衡 应用服务中间件
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix
418 0
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【8月更文挑战第3天】在数字时代,数据安全至关重要。Python AES+RSA加密方案提供了一种强大且可靠的数据保护方式。AES以高效安全著称,适用于大量数据的快速加密;RSA作为非对称加密技术,确保了密钥传输的安全性。二者结合形成“内外兼修”的加密策略:AES加密数据内容,RSA保护AES密钥,共同构建起数据安全的双重保险。通过示例代码展示了这一加密流程,强调了加密后密钥与密文的安全传输和存储的重要性。在实际应用中,应采用HTTPS等安全协议进行传输,并将数据安全存储于加密的数据库或文件系统中。
368 12
|
关系型数据库 MySQL 数据库
python3连接MySQL数据库,并执行数据库的基本增删改查操作
python3连接MySQL数据库,并执行数据库的基本增删改查操作
788 0
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
404 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
机器学习/深度学习 算法 数据挖掘
Python 机器学习算法交易实用指南(一)(1)
Python 机器学习算法交易实用指南(一)
558 4
|
关系型数据库 MySQL Shell
mysql数据库在windows(Windows Server)安装、使用
写这些基础类型的文章,主要是想将官方文档整理成简洁方便回忆的中文步骤,以便自己日后快速使用,也方便初学者快速理解、应用,希望大家可以通过这篇文章理解官方文档的信息,养成良好查看官方文档的习惯。
2321 0
mysql数据库在windows(Windows Server)安装、使用