写点什么

Amazon Aurora 并行查询

  • 2019-10-17
  • 本文字数:3234 字

    阅读完需:约 11 分钟

Amazon Aurora 并行查询

Amazon Aurora 是一种旨在全面发挥云中联网、处理和存储资源丰富的优势的关系数据库。Aurora 在用户可见层面保持了与 MySQL 和 PostgreSQL 的兼容,同时又在底层使用先进的特制分布式存储系统。您的数据跨三个不同的 AWS 可用区分布在数百个存储节点上,每个可用区两个副本,存储节点采用高速 SSD 存储设备。以下是这一结构的原理图(摘取自 Amazon Aurora 入门):



新增并行查询功能


在我们推出 Aurora 时,我们在计划中还按时要采用与数据库堆栈的其他层相同的扩展设计原则。今天,我想向大家介绍以下我们在该道路上的下一步计划。


在上图所描绘的存储层中,每个节点还包含大量的处理能力。现在,Aurora 能够提取您的分析查询(通常为处理一张大表中全部或相当大一部分内容的查询),然后跨数百个甚至数千个存储节点并行运行这些查询,充分利用这一处理能力,将速度提高两个量级。由于这种新模式减少了对网络、CPU 和缓冲池资源的争夺,您可以在一张表同时混合运行分析查询和事务查询,同时保持这两类查询的高吞吐量。


实例类别决定了在给定时间可以激活的并行查询数量:


  • db.r.large* – 1 个并发并行查询会话

  • db.r.xlarge* – 2 个并发并行查询会话

  • db.r.2xlarge* – 4 个并发并行查询会话

  • db.r.4xlarge* – 8 个并发并行查询会话

  • db.r.8xlarge* – 16 个并发并行查询会话

  • db.r4.16xlarge – 16 个并发并行查询会话


您可以使用 aurora_pq 参数来启用和禁用全局和会话级别的并行查询。


并行查询可增长超过 200 种单表断言和哈希连接的性能。Aurora 查询优化器会根据表的大小和内存中已有的表数据量自动决定是否使用并行查询功能;您还可以使用 aurora_pq_force 会话变量来覆盖优化器以满足测试的需要。


并行查询的操作


您需要创建一个新的集群才能使用并行查询功能。您可以全新创建,也可以通过还原快照的方式创建。


为了创建一个支持并行查询的集群,我只需将 Provisioned with Aurora parallel query enabled 选择为 Capacity type



我使用 CLI 还原了一个 100 GB 的快照进行测试,然后探索来自 TPC-H 基准测试的一条查询。基本查询如下:


SQL


SELECT  l_orderkey,  SUM(l_extendedprice * (1-l_discount)) AS revenue,  o_orderdate,  o_shippriority
FROM customer, orders, lineitem
WHERE c_mktsegment='AUTOMOBILE' AND c_custkey = o_custkey AND l_orderkey = o_orderkey AND o_orderdate < date '1995-03-13' AND l_shipdate > date '1995-03-13'
GROUP BY l_orderkey, o_orderdate, o_shippriority
ORDER BY revenue DESC, o_orderdate LIMIT 15;
复制代码


EXPLAIN 命令会显示查询方案,包括并行查询的使用:


SQL


+----+-------------+----------+------+-------------------------------+------+---------+------+-----------+--------------------------------------------------------------------------------------------------------------------------------+| id | select_type | table    | type | possible_keys                 | key  | key_len | ref  | rows      | Extra                                                                                                                          |+----+-------------+----------+------+-------------------------------+------+---------+------+-----------+--------------------------------------------------------------------------------------------------------------------------------+|  1 | SIMPLE      | customer | ALL  | PRIMARY                       | NULL | NULL    | NULL |  14354602 | Using where; Using temporary; Using filesort                                                                                   ||  1 | SIMPLE      | orders   | ALL  | PRIMARY,o_custkey,o_orderdate | NULL | NULL    | NULL | 154545408 | Using where; Using join buffer (Hash Join Outer table orders); Using parallel query (4 columns, 1 filters, 1 exprs; 0 extra)   ||  1 | SIMPLE      | lineitem | ALL  | PRIMARY,l_shipdate            | NULL | NULL    | NULL | 606119300 | Using where; Using join buffer (Hash Join Outer table lineitem); Using parallel query (4 columns, 1 filters, 1 exprs; 0 extra) |+----+-------------+----------+------+-------------------------------+------+---------+------+-----------+--------------------------------------------------------------------------------------------------------------------------------+3 rows in set (0.01 sec)
复制代码


Extras 列的相关部分如下:


SQL


Using parallel query (4 columns, 1 filters, 1 exprs; 0 extra)
复制代码


使用并行查询时,查询运行的时间不到 2 分钟:``


SQL


+------------+-------------+-------------+----------------+| l_orderkey | revenue     | o_orderdate | o_shippriority |+------------+-------------+-------------+----------------+|   92511430 | 514726.4896 | 1995-03-06  |              0 ||  593851010 | 475390.6058 | 1994-12-21  |              0 ||  188390981 | 458617.4703 | 1995-03-11  |              0 ||  241099140 | 457910.6038 | 1995-03-12  |              0 ||  520521156 | 457157.6905 | 1995-03-07  |              0 ||  160196293 | 456996.1155 | 1995-02-13  |              0 ||  324814597 | 456802.9011 | 1995-03-12  |              0 ||   81011334 | 455300.0146 | 1995-03-07  |              0 ||   88281862 | 454961.1142 | 1995-03-03  |              0 ||   28840519 | 454748.2485 | 1995-03-08  |              0 ||  113920609 | 453897.2223 | 1995-02-06  |              0 ||  377389669 | 453438.2989 | 1995-03-07  |              0 ||  367200517 | 453067.7130 | 1995-02-26  |              0 ||  232404000 | 452010.6506 | 1995-03-08  |              0 ||   16384100 | 450935.1906 | 1995-03-02  |              0 |+------------+-------------+-------------+----------------+15 rows in set (1 min 53.36 sec)
复制代码


我可以禁用会话的并行查询(我可以使用 RDS 自定义集群参数组以使其长期生效):


SQL


set SESSION aurora_pq=OFF;
复制代码


禁用并行查询后查询的运行速度会显著下降:


SQL


+------------+-------------+-------------+----------------+| l_orderkey | o_orderdate | revenue     | o_shippriority |+------------+-------------+-------------+----------------+|   92511430 | 1995-03-06  | 514726.4896 |              0 |...|   16384100 | 1995-03-02  | 450935.1906 |              0 |+------------+-------------+-------------+----------------+15 rows in set (1 hour 25 min 51.89 sec)
复制代码


这是在一个 db.r4.2xlarge 实例上运行的结果;其他实例型号、数据集、访问模式和查询的性能都会不同。此外,我还可以覆盖查询优化器,坚持使用并行查询进行测试:


SQL


set SESSION aurora_pq_force=ON;
复制代码


注意事项


在开始探索 Amazon Aurora 并行查询时需要注意以下几个方面:


引擎支持 — 我们正在推出对 MySQL 5.6 的支持,并在研究对 MySQL 5.7 和 PostgreSQL 的支持。


表格式 — 表的行格式必须为 COMPACT;不支持分区表。


数据类型 — 不支持 TEXT、BLOB 和 GEOMETRY 数据类型。


DDL — 表不能有任何待处理的快速在线 DDL 操作。


费用 — 您使用并行查询功能不会发生任何额外的费用。但由于它会直接访问存储,因此您的 IO 费用可能会上升。


立即尝试


这项新功能现已推出,您可以立即开始使用!


作者介绍:


Jeff Barr


AWS 首席布道师; 2004年开始发布博客,此后便笔耕不辍。
复制代码


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-parallel-query-for-amazon-aurora/


2019-10-17 09:00858
用户头像

发布了 1900 篇内容, 共 144.2 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

软件质量因素的定义

JefferLiu

软件测试/测试开发 | app自动化测试(Android)-- 特殊控件 Toast 识别

测试人

软件测试 自动化测试 测试开发 appium

如何修改 JumpServer 的上传文件大小的限制并修改上传文件的超时时间?

coxi_vv

JumpServer 用户权限体系的使用实践

coxi_vv

JumpServer 登录报错 'Request failed with status code 502'

coxi_vv

如何解决 JumpServer 连接 Linux 资产,资产乱码?

coxi_vv

JumpServer 常见问题处理

coxi_vv

一文揭晓,我是如何在Linux中查找自如

C++后台开发

Linux 后端开发 linux开发 Linux服务器开发 C++开发

我在京东做研发 | 揭秘支撑京东万人规模技术人员协作的行云DevOps平台

京东科技开发者

JumpServer 登录密码忘记及用户锁定如何处理

coxi_vv

JumpServer 审计录像

coxi_vv

JumpServer 如何通过 SFTP 进行文件的上传下载。

coxi_vv

如何使用 SQL 语句查询 JumpServer 相关信息?

coxi_vv

5大移动应用开发平台推荐

FN0

移动开发 移动开发平台 移动应用开发 移动端开发

如何使用自己的 SSL 证书登录堡垒机?

coxi_vv

如何解决纳管资产的网段与 JumpServer 后台服务器 Docker 网段重复?

coxi_vv

软件测试/测试开发 | app自动化测试(Android)-- 属性获取与断言

测试人

软件测试 自动化测试 测试开发 appium

Linux 常见高危命令汇总

coxi_vv

JumpServer 堡垒机对接 Elasticsearch 集群存储命令

coxi_vv

天穹-gateway网关系列1:Tesla网关整体介绍

哈哈哈

开源 云原生 后端 网关 #java

堡垒机如何测试Windows 资产可连接性

coxi_vv

JumpServer 常用的 MFA 工具

coxi_vv

成为技术管理者之后,我们应该做出哪些转变?

石云升

极客时间 2月月更 技术领导力实战笔记

1月书单 & 2月新书预告 | 百万册畅销书全新续作来啦!

图灵社区

书单推荐 新书

1月书单 & 2月新书预告 | 百万册畅销书全新续作来啦!

图灵教育

书单推荐 科技书单 新书

JumpServer & Windows 资产无法连接

coxi_vv

VSCode 连接 JumpServer 资产

coxi_vv

龙蜥开发者说:6 年前打开的开源“潘多拉盲盒”,如今都解了哪些未知数 | 第 15 期

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥开发者说 联通

java实现FTP下载,解决假死问题

Steven

如何使用 JumpServer 推送资产的系统用户?

coxi_vv

JumpServer 如何对接 Windows AD 域?

coxi_vv

Amazon Aurora 并行查询_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章