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
目录
相关文章
|
14天前
|
存储 关系型数据库 MySQL
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
本文介绍了一个基于Python Django框架开发的医院管理系统,该系统设计了管理员、用户和医生三个角色,具备多用户功能,并使用MySQL数据库进行数据存储和管理。
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
|
1天前
|
关系型数据库 MySQL
MySQl优化:使用 jemalloc 分配内存
MySQl优化:使用 jemalloc 分配内存
|
9天前
|
存储 关系型数据库 MySQL
MySQL 上亿大表,如何深度优化?
【8月更文挑战第11天】随着大数据时代的到来,MySQL 作为广泛使用的关系型数据库管理系统,经常需要处理上亿级别的数据。当数据量如此庞大时,如何确保数据库的查询效率、稳定性和可扩展性,成为了一个亟待解决的问题。本文将围绕 MySQL 上亿大表的深度优化,分享一系列实用的技术干货,帮助你在工作和学习中应对挑战。
26 1
|
20天前
|
SQL canal 关系型数据库
(二十四)全解MySQL之主从篇:死磕主从复制中数据同步原理与优化
兜兜转转,经过《全解MySQL专栏》前面二十多篇的内容讲解后,基本对MySQL单机模式下的各方面进阶知识做了详细阐述,同时在前面的《分库分表概念篇》、《分库分表隐患篇》两章中也首次提到了数据库的一些高可用方案,但前两章大多属于方法论,并未涵盖真正的实操过程。接下来的内容,会以目前这章作为分割点,开启MySQL高可用方案的落地实践分享的新章程!
140 1
|
29天前
|
Cloud Native 关系型数据库 新能源
|
1天前
|
SQL 监控 关系型数据库
MySQL优化: CPU高 处理脚本 pt-kill脚本
MySQL优化: CPU高 处理脚本 pt-kill脚本
|
22天前
|
关系型数据库 MySQL 存储
|
25天前
|
SQL 缓存 关系型数据库
MySQL 查询索引失效及如何进行索引优化
MySQL 查询索引失效及如何进行索引优化
64 1
|
4天前
|
存储 SQL 关系型数据库
探索MySQL的执行奥秘:从查询执行到数据存储与优化的深入解析
探索MySQL的执行奥秘:从查询执行到数据存储与优化的深入解析
|
27天前
|
存储 负载均衡 关系型数据库
面试题MySQL问题之通过配置FastDFS提高性能如何解决
面试题MySQL问题之通过配置FastDFS提高性能如何解决
34 1

相关产品

  • 云原生数据仓库AnalyticDB MySQL版