《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(下)——三、SQL优化与慢查询解决(下)

简介: 《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(下)——三、SQL优化与慢查询解决(下)

更多精彩内容,欢迎观看:

《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(下)——三、SQL优化与慢查询解决(上)https://developer.aliyun.com/article/1222969?spm=a2c6h.13148508.setting.21.77f14f0es0kEi9



4. 典型慢查询

 

1) 消耗内存的慢查询

 

Stage中有GROUP BY操作,如果GROUP BY后面有大量不同值,首先GROUP BY会在内存中缓存这些不同值,会消耗大量内存。

Stage中有Join操作,在AnalyticDB MySQL中,Join多数情况下使用HASH,Join将其中一个小表构建HASH表加快运算过程,如果小表也比较大,对应构建的HASH表也会比较大,消耗大量内存。

Stage中有SORT操作,排序需要在内存中运行。

Stage中有窗口函数操作,比如常见的RANK、DENSE_RANK、ROW_NUMBER需要在内存中完成

 

2) 消耗CPU的慢查询

 

过滤条件没有下推到存储层,会消化大量CPU。

Join条件中带有过滤操作

Join时没有指定Join条件

 

3) 消耗磁盘I/O的慢查询

 

过滤条件的数据筛选率较低

正常情况下存储层利用索引进行数据的过滤,如果过滤条件没有下推,导致对源表进行了全表扫描,会消化大量的IO。

过滤条件下推,但是过滤条件。设置的范围较大,仍然有大量数据被扫描

需要扫描的分区较多。

 

5. 慢查询诊断与优化

 

1) 发现慢查询

 

用户要定位慢查询,首先需要找到慢查询。ADB的用户控制台提供了“甘特图”和“查询列表”两种形式支持在多个维度上进行检索,帮助用户快速定位慢查询,支持最近两周的全量查询检索和分析。

 

 

2) 甘特图

 

甘特图以图形化的方式,形象的展示了查询在ADB实例上的执行顺序,每个色块表示了一条查询,色块左侧为查询的提交时间,色块右侧为查询的结束时间,色块的相对长度表示了某条查询的执行时间。

 

3) 查询列表

 

支持按数据库名、用户名、客户端段IP、耗时、消耗内存以及扫描量等10余项维度进行检索和查询

支持模糊检索和精确检索

支持字符串类型的检索条件

支持数值类型的检索条件

 

4) SQL自诊断

 

将专家经验以规则的形式体现在执行计划中,对于ADB的初次接触者,即可以根据诊断结果确定查询执行过程中的性能瓶颈点,也可以根据诊断结果学习到ADB执行计划中需要关注的重点算子。

 

5) 诊断结果分层

 

Query级别诊断结果

Stage级别诊断结果

Operator算子级别诊断结果

 

6) 常见慢查询问题

 

返回客户端的数据量较大

JOIN存在数据膨胀

查询生成的Stage个数较大

查询读取的数据量较大

数据倾斜

Stage输入数据倾斜

Stage输出输出倾斜

 

6. 诊断与优化示例

 

1) Left join优化改写为right join

 

Jion有内连接、外连接,外连接又有左外连接和右外连接。Left join是实践中常用的一种表关联方式,由于Hash Join实现会以右表做build,且left Join不会做左右表的重新排序,在右表数据量很大时会造成执行慢、消耗过多内存资源等多个问题。

 

示例

nation是一个25行的小表,customer是一个15000000行的大表,通过explain analyze查看一条包含left join的SQL的执行计划。

 

原语句

 

select count(*) from nation t1 left join customer t2 on t1.n_nationkey=t2.cnationkey

 

问题

 

nation是左表,customer是右表,通过explain analyze分析,PeakMemory:515MB93.68%,WallTime4.34s43.05%),PeakMemory的占比高达93.68%,可以判断,left join为整个SQL的性能瓶颈。

 

解决方案

 

将lift join 改成right join,新语句:

 

select count(*) from Customert2 right join nationtion t1.n nationkey=t2.cnationkey

 

优化方案

 

可以将LEFT_TO_RIGHT_ENABLED设置为true,即两个表可以做相互转化,新语句和效果如下:

 

/*+LEFT_TO_RIGHT_ENABLED=true,CASCADES_OPTIMIZER_ENABLED=false*/

select count() from nation t1 left join customer t2 on t1.n_nationkey =t2.cnationkey

 

调整后PeakMemory的值为889KB3.31%,从515MB下降到889KB,已经不是计算热点。

 

2) 过滤条件不下推

 

在某些场景中,使用索引过滤数据不一定能得到较好的性能,甚至会影响整体性能。

过滤条件不下推功能,可以在查询级别或实例级别暂时蔽掉某些字段的过滤条件下推能力,带来更好整体查询收益。

 

不建议使用索引过滤数据条件的情况有以下三种:

 

数据唯一值少

磁盘IO压力大

同时有多个条件下推

 

设置过滤条件不下推:

 

/*+filter_not_pushdown_columns=[${database}.${tableName}:${col1Name}|${col2Name}]*/

/*+filter_not_pushdown_columns=[test01.table01:id|product]*/

 

3) 分组聚合查询优化

 

语句

 

SELECT sum(A), max(B) FROM tb1 GROUP BY C, D;

 

image.png

 

如图执行分组查询,如果C、D的组合值非常多,采用数据的局部PARTIAL聚合,由于C、D组合规模比较大,导致中间结果也比较大,然后在做最后的聚合时会达不到聚合的效果。

数据根据分组字段进行节点间的数据重分布,执行最终FINAL聚合,会避免中间结果数据的膨胀,减少中间结果的压力、网络堵塞等情况

 

7. 优化原则

 

合理选择分布列、分区列,避免数据倾斜导致长尾任务提升写入效率

配置较高的资源类型及较多的实例个数

基于一级分区设置数据的生命周期

适当设置较大的分区数,提升磁盘应用率

选择合适的数据同步策略:同步工具、方法、方式以及适当并发数。

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
4月前
|
人工智能 Cloud Native 算法
拔俗云原生 AI 临床大数据平台:赋能医学科研的开发者实践
AI临床大数据科研平台依托阿里云、腾讯云,打通医疗数据孤岛,提供从数据治理到模型落地的全链路支持。通过联邦学习、弹性算力与安全合规技术,实现跨机构协作与高效训练,助力开发者提升科研效率,推动医学AI创新落地。(238字)
295 7
人工智能 关系型数据库 OLAP
678 0
|
5月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
265 8
|
6月前
|
弹性计算 运维 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生Serverless实践
简介: 通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
172 1
|
6月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
国诚投顾携手阿里云,依托Serverless架构实现技术全面升级,构建高弹性、智能化技术底座,提升业务稳定性与运行效率。通过云原生API网关、微服务治理与智能监控,实现流量精细化管理与系统可观测性增强,打造安全、敏捷的智能投顾平台,助力行业数字化变革。
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
|
6月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
|
7月前
|
运维 Kubernetes Cloud Native
分钟级到秒级:Yahaha 基于 OpenKruiseGame 的 UE5 游戏云原生实践
回顾《STRIDEN》项目在短短两个月内完成云原生转型的历程,它验证了一条清晰、可行的路径,即如何利用云原生技术,从根本上解决现代在线游戏所面临的运维复杂性难题。
|
7月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
307 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
7月前
|
存储 SQL 监控
数据中台架构解析:湖仓一体的实战设计
在数据量激增的数字化时代,企业面临数据分散、使用效率低等问题。数据中台作为统一管理与应用数据的核心平台,结合湖仓一体架构,打通数据壁垒,实现高效流转与分析。本文详解湖仓一体的设计与落地实践,助力企业构建统一、灵活的数据底座,驱动业务决策与创新。

热门文章

最新文章

推荐镜像

更多