Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【数据库智能管家DBbrain】深入揭秘DBbrain智能优化引擎

【数据库智能管家DBbrain】深入揭秘DBbrain智能优化引擎

原创
作者头像
迪B哥
修改于 2020-05-29 03:49:16
修改于 2020-05-29 03:49:16
2.5K0
举报
文章被收录于专栏:MySQL实战分享MySQL实战分享

本期的将为大家分享DBbrain的SQL优化原理和实现。主要看点如下:

1.深入揭秘DBbrain智能优化引擎架构及原理

2.DBbrain推出业内首个SQL优化效果对比功能

为了便于大家理解DBbrain的SQL优化功能的使用场景和设计背景,先简单聊一聊SQL性能较差与数据库性能联系——我们通常把性能较差的SQL称之为慢SQL,一般我们可通过设置slow_query_log参数设置为ON,来捕获执行时间超过一定数值(由long_query_time参数控制)的SQL语句。表现上来理解就是执行时间过长的SQL,但广义上消耗资源过多、执行计划不够优秀的SQL同样具有影响数据库性能的潜在隐患,可能只是因为资源足够空闲(紧急升配往往能够临时掩盖性能问题)或者数据量不够大,所以这几类SQL的执行时间并没有太长,但在特定场景下却会放大其对数据库性能的影响。而一般80%的数据库性能问题都是由于SQL性能所导致的,所以如何进行SQL的优化、SQL优化的效果就成为了数据库性能提升的关键因素。那么接下来就为大家揭秘,DBbrain的智能优化引擎是如何进行SQL优化的。

基于规则和代价估算的SQL优化建议

DBbrain的SQL优化引擎独立于数据库,避免对原生数据库引擎进行侵入。它的主要组件包括SQL解析和校验、基于规则的SQL重写、查询条件选择度/代价估算、SQL子句检查以及建议生成器。除此之外,Connector组件负责与目标数据库交互,同步SQL优化所需配置和表结构定义相关信息以及SQL代价估算。

1、SQL解析和校验

负责解析输入SQL语句,将提取涉及到的库表交给Connector组件获取表定义,并校验相关字段名、类型以及字符集(出于性能考虑,DBbrain不支持MyISAM表以及视图)。

2、SQL重写 数据库优化器都具有重写组件。它一般在选择索引,生成执行计划之前,通过对原SQL语句进行无语义差别的变换,使得SQL语句更加简洁,方便后续组件更好的选择执行计划。执行计划选择是在当前给定条件下尽力选择最佳执行路径,而SQL重写、增加合适的索引则是为执行计划选择创造更好物理条件。数据库自身具有一定重写功能,因此SQL优化建议也需要识别这些规则,并通过变换将查询条件和实际库表进行关联。下面举个例子来说明一下SQL 重写的原理:

SQL在数据库中的执行路径往往和开发人员在写的结构不太相同,比如开发人员看到的如下SQL语句:

在数据库中的视图却是如下的执行流程:

DBbrain的SQL优化功目的就是帮助数据库寻找最佳执行路径,将其执行路径优化成更为简洁和高效的视图。从SQL解析上看,查询条件字段"value"是和a关联,但a仅仅是子查询的别名。从无语义差别的角度,该查询条件是可以下推到子查询,和库表dbbrain_1直接关联。

但是数据库自身重写功能通常具有片面性,实现并不完善。在某些特定场景下,显示的更改SQL语句,可以大幅度提高执行性能。比如:条件下推聚合子查询,exists变换为join,条件合并等。实现SQL变化的最大前提条件是无语义差别的,保证查询结果正确。这些变化是基于预先设定好的规则。

3、选择度计算

条件选择度计算是索引建议核心,它决定了索引字段顺序以及驱动表的选择。条件字段的选择度计算依赖于表的统计信息,并需要对库表进行数据抽样。DBbrain会默认随机抽取200~1000条数据。这些数据是应用了crc32函数的校验码,避免获取用户原始数据,用户不必担心数据安全问题。

4、条件/子句检查

根据MySQL引擎规则,识别出order by/ aggregate条件、project(输出字段),并合理利用索引;与此同时,识别出不合理条件或使用方式,提示用户。比如非前置like匹配,数字作用于字符条件字段等。

5、SQL优化建议生成

SQL优化建议包括索引优化建议和SQL重新优化建议。

优化前后的执行计划对比及效果评估

传统的手动优化SQL,极度考验DBA的知识储备和实战经验积累,优化后一般只能通过explain的改变来预估SQL优化效果,而大多数研发和运维目前使用的市面上的SQL优化工具更是只能根据理论分析得出优化结果。这样一来我们如何精确验证SQL优化的效果好坏?大多数情况下都只能通过执行后观察业务延迟的表象来判断(也可以采用较为复杂的测试环境变更,旁路流量的方式验证),但这样的验证方式不仅效率低下,而且在变更前、变更中、变更后均对数据库性能存在极高的风险。但这些已经是过去式了,现在不用担心啦!腾讯云数据库DBbrain团队历经多年的技术探索和研发后,终于推出了业内第一款基于执行代价分析的SQL性能优化效果对比功能,能够在未执行变更前对变更效果进行预估,让用户能预知变更的优化效果,更加放心的根据优化建议进行变更,同时也通过此类技术的结果反馈不断优化自身SQL优化引擎的精准性。在不更改用户数据库的前提下,DBbrain智能优化引擎能够对给出的SQL优化建议进行效果评估。SQL代价估算引擎在该功能中起到主要作用。通过分析SQL相关库表的统计信息、OPTIMIZER_SWITCH配置、以及索引字段区分度估算,对优化后的SQL语句待机进行整体代价估计。下面我们通过一个现网真实案例进行展示:

1、优化效果提前预知

DBbrain智能优化引擎通过代价对比,直观呈现出SQL优化后降低99.19%的效果,也可通过优化前后的执行计划比对进一步验证优化的效果

2、智能建议省时省力

DBbrain智能优化引擎给出的SQL重写+增加索引相结合的建议对SQL进行性能优化

3、辅助用户理解优化

为了辅助用户更好的理解优化,DBbrain还提供表结构信息的展示,让信息更加直观明了。

基于全量审计日志负载评估和优化

一般对实际系统的优化需要全局的把握,而不是仅仅针对有一个SQL语句,虽然增加索引可以提高查询性能,但同时也会增加磁盘开销,降低写入性能。针对不同SQL语句,可能给出针对某一个表的重复索引;同时我们还需要考虑SQL的执行频度,对系统的整体负载影响,有时候单个SQL的扫描行数不高,但是因频率过高也会成为主要问题点。

而DBbrain的评估优化是基于全量审计日志的负载,实时计算SQL扫描行数,定位主要问题SQL语句并给出优化建议,因此优化是整体的,全方位的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DBbrain诊断日 | 深入揭秘DBbrain智能优化引擎
为更好的帮助DBA运维数据库,腾讯云将于每月12日开展DBbrain诊断日,腾讯云高级产品经理迪B哥为大家解析经典数据库运维难题,结合腾讯云数据库智能管家DBbrain的能力,为大家提供问题优化思路和方法,玩转数据库!
腾讯云数据库 TencentDB
2020/03/19
1.1K0
DBbrain诊断日 | SQL优化老大难?一键召唤鹅厂专家来帮你
为更好的帮助DBA运维数据库,腾讯云将于每月开展DBbrain诊断日,腾讯云高级产品经理迪B哥直播解析经典数据库运维难题,结合腾讯云数据库智能管家DBbrain的能力,为大家提供问题优化思路和方法,玩转数据库! 本期文章将聚焦于数据库智能管家DBbrain的最新功能“SQL优化”服务,为大家详细解读如何高效、高质的完成耗时又繁重的SQL优化工作,帮助业务持续稳定的运行,实现数据库“自治”。 1 多样的数据库优化手段 数据库(Database)一直以来都在业务系统中扮演着举足轻重的角色,大部分业务的稳定运
腾讯云数据库 TencentDB
2020/06/23
6240
腾讯云2024双11大促:数据库智能管家 DBbrain最佳实践
腾讯云2024双11大促已正式开始,在这场活动中,腾讯云为用户带来了超值福利,其中云服务器CVM成为企业和个人用户部署应用、存储数据、处理信息的首选方案,其高效、灵活、可扩展的特性极大地促进了业务的快速发展。。
参谋带个长
2024/11/15
2.4K0
腾讯云2024双11大促:数据库智能管家 DBbrain最佳实践
【连载】openGauss SQL 引擎|查询优化
上一篇 openGauss SQL 引擎 中我们介绍了SQL引擎概览、SQL解析以及查询优化器的优势和优化技术的分类,本文将详细介绍查询优化的相关内容。
JiekeXu之路
2023/02/24
1K0
【连载】openGauss SQL 引擎|查询优化
高级SQL优化 | 你真的了解用 UNION替换OR吗?
本篇属于高级SQL优化系列专题中的一篇,该专题介绍PawSQL引擎优化算法原理及优化案例,欢迎大家订阅。
PawSQL
2024/08/20
2440
高级SQL优化 | 你真的了解用 UNION替换OR吗?
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。
JAVA日知录
2019/11/06
1.8K0
数据库优化 - SQL优化
DBbrain诊断日 | DBA休假,数据库CPU使用率过高怎么办?
为更好的帮助DBA运维数据库,腾讯云将于每月12日在社群直播开展DBbrain诊断日,腾讯云高级产品经理迪B哥直播解析经典数据库运维难题,结合腾讯云数据库智能管家DBbrain的能力,为大家提供问题优化思路和方法,玩转数据库! 本期诊断日主要分享内容:如何使用智能管家DBbrain解决MySQL实例CPU使用率过高的问题? 1 前言 在使用MySQL的过程中,经常会遇到由于数据库性能问题导致的业务故障。对于研发、运营、产品等非运维职能的同事来说,往往更愿意请DBA来协助定位问题和优化。如果公司确有DBA
腾讯云数据库 TencentDB
2020/02/14
2.1K0
DBbrain诊断日 | DBA休假,数据库CPU使用率过高怎么办?
【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
优化器会根据生成的逻辑执行计划枚举出候选的执行路径,要确保执行的高效,需要在这些路径中选择开销最小、执行效率最高的路径。那么如何评估这些计划路径的执行开销就变得非常关键。代价估算就是来完成这项任务的,基于收集的数据统计信息,对不同的计划路径建立代价估算模型,评估给出代价,为路径搜索提供输入。
数据和云
2021/11/29
7180
【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
openGauss SQL引擎 (上)
数据库的SQL引擎是数据库重要的子系统之一,它对上负责承接应用程序发送的SQL语句,对下负责指挥执行器运行执行计划。其中优化器作为SQL引擎中最重要、最复杂的模块,被称为数据库的“大脑”,优化器产生的执行计划的优劣直接决定数据库的性能。
叶秋学长
2023/02/01
5900
SQL语句优化艺术:让你的数据库飞起来
在以MySQL为主要存储组件的业务系统中,MySQL的性能直接影响到应用的响应速度、用户体验和系统的可扩展性。因此,优化数据库的性能,特别是SQL查询的执行效率,成为了提升整个应用性能的关键环节。
windealli
2024/03/12
5460
SQL语句优化艺术:让你的数据库飞起来
数据库查询优化技术(一):数据库与关系代数
我是看李海翔的《数据库技术丛书·数据库查询优化器的艺术:原理解析与SQL性能优化》这本书的视频讲解学习的,因为数据库的知识学的不多,直接看优化有些吃力,慢慢补吧。现在要用一些优化的知识只能先看着了。
sunonzj
2022/06/21
8890
数据库查询优化技术(一):数据库与关系代数
数据库如何解析执行SQL
客户端将查询的select sql,按照mysql通信协议传输到数据库服务。数据库服务接受查询sql,执行sql前判断要执行的sql是否是查询语句。
BUG弄潮儿
2020/06/15
1.5K0
数据库如何解析执行SQL
大型分布式业务平台数据库优化方法(上)
文章摘要:一个小小的MySQL数据库B-Tree索引可能会带来意想不到的性能优化提升……
用户2991389
2018/09/05
1K0
大型分布式业务平台数据库优化方法(上)
MySQL【第六章】——优化器及执行计划 - Explain
  1.客户端发送一条查询给服务器。   2.服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。   3.服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。   4.MySQL根据优化器生成的执行计划,再调用存储引擎的API来执行查询。   5.将结果返回给客户端。
用户10196776
2022/11/22
1.1K0
MySQL【第六章】——优化器及执行计划 - Explain
直播分享| 腾讯云 MongoDB 智能诊断及性能优化实践
点击下方公众号关注并分享获取 MongoDB 最新资讯 互动有奖! 为了感谢社区小伙伴一直以来的关注与支持,社区又来发送福利啦~ 100%精选留言喜欢这篇文章的小伙伴们要积极活跃起来! 社区将会在本文评论下方抽取点赞前5名的评论各赠送社区精美马克杯! 评论6月24日(周五)18点结束关闭,19点在公众号底部公布幸运用户! 本次直播分享主要分为五个部分展开: 第一部分:主要介绍 MongoDB 的核心优势; 第二部分:主要总结云上 MongoDB 用户常见的一些问题; 第三部分:介绍腾讯云 MongoDB
MongoDB中文社区
2022/06/24
1.1K0
直播分享| 腾讯云 MongoDB 智能诊断及性能优化实践
MySQL - SQL优化干货总结(吐血版)
BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察。一提到数据库,先“说一说你对SQL优化的见解吧?”。SQL优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢?
陈哈哈
2020/07/03
1.4K0
从执行计划了解MySQL优化策略
在MySQL中,执行计划是优化器根据查询语句生成的一种重要的数据结构,它描述了如何通过组合底层操作实现查询的逻辑。当我们编写一条SQL语句时,MySQL会自动对其进行优化,并生成最优的执行计划以实现更快的查询速度。
终有救赎
2023/12/22
2850
从执行计划了解MySQL优化策略
DBbrain诊断日 | 这个匪夷所思的数据库故障,你会处理吗?
为更好的帮助DBA运维数据库,腾讯云将于每月12日在社群直播开展DBbrain诊断日,腾讯云高级产品经理迪B哥直播解析经典数据库运维难题,结合腾讯云数据库智能管家DBbrain的能力,为大家提供问题优化思路和方法,玩转数据库! 本期诊断日主要分享内容:数据库库表中的细节设计-数据类型相关案例。 在MySQL的使用和运维工作中,大家往往会把大量精力集中在如何优化慢SQL、如何设计数据库架构以及如何使用最佳时间的配置组合来提升数据库的访问性能上,但对于库表设计往往都比较随意。 其实良好的数据库逻辑设计和物理设
腾讯云数据库 TencentDB
2020/01/15
1.5K0
DBbrain诊断日 | 这个匪夷所思的数据库故障,你会处理吗?
MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取
SQL索引建议是帮助数据库优化器创造最佳执行路径,需要遵循数据库优化器的一系列规则来实现。CloudDBA需要首先计算表统计信息,是因为:
全栈程序员站长
2022/07/20
9130
如何定位及优化SQL语句的性能问题
在现如今的软件开发中,关系型数据库是做数据存储最重要的工具。无论是Oracale还是Mysql,都是需要通过SQL语句来和数据库进行交互的,这种交互我们通常称之为CRUD。在CRUD操作中,最最常用的也就是Read操作了。而对于不同的表结构,采用不同的SQL语句,性能上可能千差万别。本文,就基于MySql数据库,来介绍一下如何定位SQL语句的性能问题。
咸鱼学Python
2020/07/21
1.4K0
推荐阅读
相关推荐
DBbrain诊断日 | 深入揭秘DBbrain智能优化引擎
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档