AnalyticDB MySQL版重磅发布智能建模诊断与优化功能

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 云原生数据仓库AnalyticDB MySQL版提供的智能建模诊断与优化功能,主要分为「冷热数据优化」、「无效索引优化」、「分布键优化」三大功能,目的是帮助客户降低数据/索引的存储成本,提高Join场景性能。

随着客户各类数据分析业务的丰富和发展,数据库所承载的查询数量和复杂度都会持续增加,特别是对于数据库表结构的设计和优化,往往对数据库整体使用成本和查询性能有较大影响。想做好相关的库表结构设计和优化,用户往往需要关注以下几个部分:

  • 需要了解引擎架构:用户往往需要对数据库引擎的存储和计算架构特点有一定的了解,才能和业务的数据分布特征以及业务场景特征完美结合,来进行数据建模,从而设计出符合引擎架构特点的表结构。
  • SQL特性差异较大:即席查询的SQL往往特性差异较大,包括参与Join的表个数、Join条件、分组聚合的字段个数以及过滤条件等。
  • 数据特征变化较快:用户的数据分布特征是会随着业务特征的变化而变化的,如果一直按照最初的建模方式和SQL语句,也是无法保障能发挥出SQL引擎的最大优势,数据特征或者业务模型的变化,都会导致SQL性能回退。

基于此,AnalyticDB MySQL版(新一代云原生实时数据仓库,语法兼容MySQL,以下简称ADB)为用户提供了高效且智能化的「智能建模诊断与优化」功能,直观的为用户提供相关调优的建议,降低用户使用成本,提高用户使用ADB的效率。本功能通过对用户SQL查询所使用到的数据表、索引、查询性能的历史信息进行统计,在此基础上进行智能分析并提供调优建议,本文介绍如何查看和和使用相关建议。


调优建议类型

冷热分层优化:

  • 弹性实例支持数据存储的冷热分离配置(https://help.aliyun.com/document_detail/189727.html),冷数据存储到低成本的存储介质上,可以降低整体使用成本,本项建议分析数据表的使用情况,对于长期未使用的数据表,提出移至冷存的建议。
  • 本建议的优化单位为一个数据表的整体,优化后数据表存储成本会降低;若再次查询该数据表,查询时间会增长。

很多业务 BI 分析查询具有强烈的周期性,很多数据表只有每个月、每个季度才会用到一次。像这样低频使用的数据表完全可以利用弹性实例提供的冷热数据分离存储的功能,在不使用的时候先移至冷存,降低存储成本。只在使用的时候才移至热存。

1.png

如上图所示,我们对弹性实例利用冷热分离存储建议可以获得的潜在收益进行了统计。可以看到60%的实例可以通过本建议的提示,将 15 天未使用的数据表移至冷存,节省 3 成以上的热存空间,降低存储成本。


无效索引优化:

  • AnalyticDB MySQL版通过增加数据索引提高扫描数据的速度,达到查询性能的提示(https://help.aliyun.com/document_detail/296045.html)。数据索引也会占用磁盘空间,提高使用成本。本项建议分析数据索引的使用情况,对于长期未使用的数据索引,提出考虑删除的建议。
  • 本建议的优化单位为一个列的数据索引,优化后数据索引的存储成本会降低;若查询再次使用改数据列进行过滤操作,查询时间会增长。

数据库建表时默认对全部数据列进行索引,这样可以极大的简化用户建表时的负担,无需用户提前预知业务查询的特性,保证查询性能最大化。但与此同时,实际业务往往只会用到几个列的索引进行查询和数据过滤,长期无用的索引反而增加了存储的成本。

2.png

如上图所示,我们对线上实例利用索引优化建议可以获得的潜在收益进行了统计。可以看到50%的实例可以通过本建议的提示,将 15 天未使用的索引进行删除,节省 3 成以上的热存空间,降低存储成本。


分布键优化:

  • AnalyticDB MySQL版的查询执行依赖分布式计算和存储的架构(https://help.aliyun.com/document_detail/211215.html),特别是进行JOIN、聚合等计算时,往往需要通过网络传输对数据进行分布,合理选择数据表分布列可以减少网络开销,提高查询效率。如果数据表的分布列和实际查询的数据分布特征不一致,就会造成查询时间增长、查询效率降低等问题。本项建议分析数据查询实际需要使用的分布列与数据表定义的分布列的差异,提出考虑改变数据表分布列的建议。
  • 分布键优化建议的优化单位为表,也即对整张表的分布列进行优化,优化后涉及到该表分布列的相关查询,性能一般会增加;若同一张表同时有其他涉及到非分布列的查询存在,就会导致分布列选择的矛盾,我们的算法会按照整个库级别查询最优目标,使用优化算法选择每张表的最优分布列。
  • 下面列举两个简单的例子,我们的测试表A和表B分别有5百万行的数据,第一个例子,对于JOIN查询:
SELECT*FROM A INNER JOIN B ON A.order_id= B.order_idLIMIT1000;

我们对比两种情况:1. 表A按照自增id分布;2.表A按照JOIN列order_id分布,这里表B假设已经按照order_id分布。对于这两种情况,分别执行查询,测试结果是表A按照JOIN列order_id分布,查询时间会快大约30%,原因就是JOIN前无需进行网络传输对数据重分布。第二个例子,对于聚合查询:

SELECT order_id, max(total)FROM(SELECT order_id, sum(amount)AS total
FROM A
GROUPBY order_id
)

我们对比两种情况:1. 表A按照自增id分布;2.表A按照聚合列order_id分布。对于这两种情况,分别执行查询,测试结果是表A按照聚合列order_id分布,查询时间会快大约60%,同样是因为节省了数据重分布的网络传输时间,计算节点可以直接在本地进行聚合操作。


用户界面指南

用户通过控制台左边栏「诊断与优化」 -> 「库表结构调优」分页访问该功能

可采纳建议的查看

可用优化建议如下图所示,每条建议包含建议 ID, 建议类型,建议对应的 SQL, 给出建议的原因,建议收益估算等信息。其中建议对应的SQL为应用建议需要变更的表和相应定义等。建议优化收益为基于历史数据统计的预估值,非实时统计的准确值,仅供参考。

3.png


一键应用优化建议

用户点击“一键应用”按钮,即表示同意采纳该优化建议,并将相应变更的 SQL 下发到实例进行执行,下发后改建议会出现在“已采纳建议”分页中。下发的建议如同在客户端执行相应 SQL,不支持撤销操作,请谨慎使用。

4.png


已采纳建议的查看

用户可以按采纳建议日期和时间查询已采纳的建议;建议 SQL 下发后,需要数据表完成 build 方可完成应用,build 操作是数据库系统按一定规则自动触发的,未触发前,相应建议处于“运行中”的状态,触发后变为“已完成状态”

5.png


开启和关闭优化建议功能

6.png

用户可以通过开关按钮,打开和关闭优化建议的显示功能。


欢迎使用,并提供您宝贵的建议和反馈!

本功能现面向有意向使用的客户进行开放,欢迎进钉钉支持群联系我们。

7.png

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
8天前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
13天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
39 3
|
15天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
38 1
|
22天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万级数据统计优化实践
【10月更文挑战第21天】 在处理大规模数据集时,传统的单体数据库解决方案往往力不从心。MySQL和Redis的组合提供了一种高效的解决方案,通过将数据库操作与高速缓存相结合,可以显著提升数据处理的性能。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
58 9
|
17天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
83 1
|
22天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
52 5
|
27天前
|
存储 关系型数据库 MySQL
优化 MySQL 的锁机制以提高并发性能
【10月更文挑战第16天】优化 MySQL 锁机制需要综合考虑多个因素,根据具体的应用场景和需求进行针对性的调整。通过不断地优化和改进,可以提高数据库的并发性能,提升系统的整体效率。
49 1
|
27天前
|
缓存 关系型数据库 MySQL
一文彻底弄懂MySQL优化之深度分页
【10月更文挑战第24天】本文深入探讨了 MySQL 深度分页的原理、常见问题及优化策略。首先解释了深度分页的概念及其带来的性能和资源问题。接着介绍了基于偏移量(OFFSET)和限制(LIMIT)以及基于游标的分页方法,并分析了它们的优缺点。最后,提出了多种优化策略,包括合理创建索引、优化查询语句和使用数据缓存,帮助提升分页查询的性能和系统稳定性。
|
30天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万数据量的优化实录
【10月更文挑战第6天】 在现代互联网应用中,随着用户量的增加和业务逻辑的复杂化,数据量级迅速增长,这对后端数据库系统提出了严峻的挑战。尤其是当数据量达到百万级别时,传统的数据库解决方案往往会遇到性能瓶颈。本文将分享一次使用MySQL与Redis协同优化大规模数据统计的实战经验。
115 3
|
30天前
|
NoSQL 关系型数据库 BI
记录一次MySQL+Redis实现优化百万数据统计的方式
【10月更文挑战第13天】 在处理百万级数据的统计时,传统的单体数据库往往力不从心,这时结合使用MySQL和Redis可以显著提升性能。以下是一次实际优化案例的详细记录。
109 1

热门文章

最新文章

相关产品

  • 云原生数据仓库AnalyticDB MySQL版