高性能特性体验:ePQ 的详解与实战

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PolarDB PostgreSQL 引擎提供了弹性跨机并行查询(elastic Parallel Execution)的功能,支持多个计算节点分布式地执行 SQL 查询。本实验将体验该功能。

高性能特性体验:ePQ 的详解与实战


1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息


2. 连接数据库准备

本实验将通过 psql 来连接 PolarDB for PostgreSQL 数据库。

  1. 登录阿里云控制台,选择 PolarDB PG 实例

首先打开桌面的 Chrome 浏览器,使用左侧给出的子用户名称子用户密码登录。

登录成功后,搜索并进入 PolarDB 的控制台:

进入控制台以后,点击全局概览,可以看到正在运行中的 PolarDB for PostgreSQL 实例。

点击这个实例查看详情:

  1. 创建高权限用户

对于一个新实例来说,我们需要创建一个新的用户才可以使用 PolarDB 实例。点击创建用户,创建一个名为 polardb 的高权限用户。

  1. 设置访问白名单

登录设置访问白名单

新增 IP 白名单分组

白名单内 IP 地址为 0.0.0.0/0 表示所有 IP 均可访问该 DB 数据库,比较危险 ,只推荐在测试环境下使用,生产环境中要把自己机器的 IP 地址添加入白名单中。

  1. 设置公网地址

点击这里进行申请,图中这里已经申请好了,所以按钮只有复制

  1. 创建数据库

由于通过 psql 无法直接连接 postgres 数据库,需要自己创建数据库

点击如下的登录数据库按钮

输入创建好的账号名和密码

成功登录 DMS 以后,点击左侧的 SQL 窗口,选择连接默认数据库 postgres :

输入如下的创建数据库命令:

create database mypolardb;

执行结果如下图所示:

  1. 登录 ECS 机器,安装 psql 工具

点击 LX 终端,输入云产品资源中提供的 ECS 机器,连接用户为 root,机器IP 和 登录密码如左边所示

登录机器后,执行下面的命令:

yum install -y postgresql

安装成功后,即可通过 psql 连接数据库,连接命令如下:

psql -h 集群地址的公网地址 -p 端口(通常为1921) -U 你的用户名 DB名称 -W

说明:

(1)集群地址的公网地址:XXXXXX.rwlb.polardb-pg-public.rds.aliyuncs.com 。 其中,填充集群地址的公网地址时,将 XXXXXX 替换为您申请公网链接地址填入的名称

(2)DB 命令:为上述步骤创建的 mypolardbpg

(3)psql 连接数据库输入密码时,终端机不显示,输入密码完成后直接按 Enter 键执行

接下来输入你刚刚设置的密码,登录成功后出现如下界面

连接成功出现如下窗口:


3. 准备数据

首先,我们需要创建表并导入数据。

后面我们将通过 ePQ 功能对这些表发起并行查询。

  1. 创建表并导入数据
-- create table
create table t1(c1 int,c2 int, c3 int, c4 int);
create table t2(c1 int,c2 int, c3 int, c4 int);
create table t3(c1 int,c2 int, c3 int, c4 int);
create table t4(c1 int,c2 int, c3 int, c4 int);
-- insert values
insert into t1 select generate_series(1,1000),generate_series(1,1000);
insert into t2 select generate_series(1,1000),generate_series(1,1000);
insert into t3 select generate_series(1,1000),generate_series(1,1000);
insert into t4 select generate_series(1,1000),generate_series(1,1000);
  1. ePQ 可以对每个表设置最大的并行度(px_workers)。默认为 0 ,即不开启并行查询。这里,需要设置表的最大并行度。
alter table t1 set (px_workers = 100);
alter table t2 set (px_workers = 100);
alter table t3 set (px_workers = 100);
alter table t4 set (px_workers = 100);

设置成功后如下图所示:

这样,表的导入和最大并行度设置完成。

接下来会以 join, CTE, 子查询 这三种分析型查询中最常见的语法来说明 ePQ 的使用。

本实验将介绍参数开关来使用 ePQ。


4. 通过参数开关使用 ePQ

接下来会以 join, CTE, 子查询这三种分析型查询中最常见的语法来说明 ePQ 的使用。

本节将介绍通过参数开关来使用 ePQ。

注意,这种方式打开开关只对单个会话有效,要想全局生效,需要通过阿里云控制台来进行更改。

  1. 打开 ePQ 开关,并设置并行度,polar_px_dop_per_node 表示单个结点内的 PX worker 并行度
set polar_enable_px=1;
set polar_px_dop_per_node=3;

执行成功如下图所示:

2. 打开计时

\timing on

3. 执行 join

执行下面的 SQL,我们先查看其查询计划,并展示运行时间。其中,只要出现 PolarDB PX Optimizer 则说明开启了 ePQ 查询

-- 执行计划
explain select sum(t1.c1), sum(t2.c2) from t1, t2 where t1.c1=t2.c2;
-- 运行结果
select sum(t1.c1), sum(t2.c2) from t1, t2 where t1.c1=t2.c2;

运行结果截图如下,出现时间和代价不同属于正常现象

4. 执行 CTE 语法

运行的 SQL 如下

-- 执行计划
explain with x as (select * from t1 where c1 < 50) select sum(x.c1), sum(x.c2) from x,t2 where x.c1=t2.c1;
-- 执行结果
with x as (select * from t1 where c1 < 50) select sum(x.c1), sum(x.c2) from x,t2 where x.c1=t2.c1;

执行结果如下图所示

5. 执行子查询

运行的 SQL 如下所示:

-- 执行计划
explain select sum(s.c1),sum(s.c2) from (select t1.c1 as c1,t1.c2 as c2 from t1,t2 where t1.c1=t2.c2 and t1.c1 < 100) s,t3 where s.c1
=t3.c1;
-- 运行结果
select sum(s.c1),sum(s.c2) from (select t1.c1 as c1,t1.c2 as c2 from t1,t2 where t1.c1=t2.c2 and t1.c1 < 100) s,t3 where 
s.c1=t3.c1;

执行截图如下:

6. 调整并行度

通过调整 polar_px_dop_per_node 可以更改 PX 的并行度,PX 并行度值可以通过计划看出,如下面的命令所示:

explain select count(*) from t1;
set polar_px_dop_per_node=6;
explain select count(*) from t1;

结果如下图所示:

计划中的 PX Coordinator 3:1 变成了 PX Coordinator 6:1,segments 也由 3 变成了 6。


5. ePQ 在 TPC-H 上的性能表现

TPC-H 是专门测试数据库分析型场景性能的数据集,一共有 22 条分析型场景下的 SQL。用 TPC-H 可以有效测试 PolarDB 的 HTAP 的能力。

由于 TPC-H 本身导入数据需要大量时间,本实验中无法进行展示。大家可以看该文档来查看 ePQ 在 TPC-H 环境下的提升效果。平均有 23 倍的提升。

实验链接:https://developer.aliyun.com/adc/scenario/c6e803ae50784a07b4317005b396b203

相关实践学习
函数计算X RDS PostgreSQL,基于LLM大语言模型构建AI知识库
基于ChatGLM6B 大语言模型构建AI知识库问答应用。答疑群17125058181
相关文章
|
7月前
|
缓存 算法 Java
Java性能优化实战:打造高性能应用
【4月更文挑战第2天】探索Java性能优化,掌握JVM内存管理、垃圾回收与类加载,避免内存泄漏,使用StringBuilder优化字符串操作,明智选择数据结构与算法,有效管理多线程,利用NIO提升IO性能,应用缓存、连接池等策略,打造高性能Java应用。深入了解原理,解决实际问题,持续优化,创造卓越。
106 2
Java性能优化实战:打造高性能应用
|
2月前
|
存储 安全 关系型数据库
后端技术深度剖析:构建高效稳定的企业级应用
【10月更文挑战第5天】后端技术深度剖析:构建高效稳定的企业级应用
59 0
|
27天前
|
自然语言处理 运维 开发工具
深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成
本文深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成。通过命令对比,展示了两者在启动、配置、模式切换、移动编辑、搜索替换、插件管理、文件操作、窗口缓冲区管理和高级功能等方面的差异。总结部分强调了 NeoVim 在多个方面的显著优势,解释了为什么越来越多的运维人员选择 NeoVim。
35 3
|
2月前
|
存储 监控 NoSQL
探索后端技术:构建高效、可扩展应用的秘诀
在当今数字化时代,后端技术是任何成功应用程序的核心。本文将深入探讨如何利用先进的后端技术和策略来创建高效、可靠和可扩展的应用程序。我们将从基础架构的选择开始,逐步深入到数据管理、安全性、性能优化等关键领域,旨在为开发者提供一套全面的解决方案。
|
6月前
|
存储 算法 安全
用C++打造极致高效的框架:技术探索与实践
本文探讨了如何使用C++构建高性能框架。C++凭借其高性能、灵活性和跨平台性成为框架开发的理想选择。关键技术和实践包括:内存管理优化(如智能指针和自定义内存池)、并发编程(利用C++的并发工具)、模板与泛型编程以提高代码复用性,以及性能分析和优化。在实践中,应注意代码简洁性、遵循最佳实践、错误处理和充分测试。随着技术发展,不断提升对框架性能的要求,持续学习是提升C++框架开发能力的关键。
124 1
|
7月前
|
缓存 监控 前端开发
从零到一:构建高性能SPA的探索与实践
作为一名高级前端工程师,我曾负责构建高性能SPA,面临首屏加载、路由切换卡顿、内存泄漏和数据加载策略等挑战。通过代码拆分、懒加载、服务端渲染、路由预加载、Keep-alive、严格管理组件生命周期、内存泄漏检测工具以及分页加载和数据缓存策略,成功优化性能,降低首屏加载时间,改善路由切换体验,控制内存泄漏,并提升数据加载效率。持续优化是关键,未来将侧重性能监控自动化和新技术探索。分享这些经验希望能激发更多同行的思考与创新。
95 1
|
6月前
|
监控 安全 网络协议
EIPX-660的特性、优势及其应用场景
EIPX-660的特性、优势及其应用场景
|
7月前
|
存储 缓存 前端开发
《构建高性能的前端应用:优化技巧与最佳实践》
本文探讨了构建高性能前端应用的关键技巧与最佳实践。从代码优化、资源压缩到网络请求管理,提供了一系列有效的解决方案,旨在帮助开发者提升前端应用的性能和用户体验。
|
7月前
|
缓存 前端开发 UED
实战指南:如何优化前端性能提升用户体验
本文探讨了在当今互联网时代,前端性能优化对于提升用户体验的重要性,以及如何利用各种技术手段实现前端性能的优化。通过介绍前端性能优化的原则、常见的性能优化技巧和工具,以及实际案例分析,帮助开发者深入了解并掌握提升前端性能的方法,从而提升网站的加载速度、响应速度,提高用户的满意度和留存率。
|
监控 负载均衡 测试技术
扩展性:构建无限可能的高性能系统
扩展性:构建无限可能的高性能系统

热门文章

最新文章