小牛门户网站,电商培训类网站模板下载,长安营销型网站建设,网站域名邮箱怎么注册作者#xff1a;斯干#xff0c;阿里云数据库高级技术专家
在我们业务系统中#xff0c;数据库越来越扮演着举足轻重的角色。
和其它公司一样#xff0c;在阿里巴巴业务场景下#xff0c;大部分业务跟数据库有着非常紧密的关系#xff0c;数据库一个微小的抖动都有可能…作者斯干阿里云数据库高级技术专家
在我们业务系统中数据库越来越扮演着举足轻重的角色。
和其它公司一样在阿里巴巴业务场景下大部分业务跟数据库有着非常紧密的关系数据库一个微小的抖动都有可能对业务造成非常大的影响 如何让数据库更稳定得到持续优化一直都是非常重要的诉求。
数据库环境下的业务优化通常会提到三个层面 1应用层面优化应用代码逻辑优化以更高效的方式处理数据 2实例层面优化通过环境参数调整优化实例的运行效率 3SQL层面优化通过物理数据库设计、SQL语句改写等优化手段确保以最佳的方式获取数据。
开发者通常对于前面两个比较熟悉对于第三个即SQL层面的优化会有些生疏甚至会因由谁数据库管理员或应用开发者来负责而产生争论但SQL优化是整个数据库优化中非常关键的一环 线上SQL性能问题不仅会给业务带来执行效率上的低下甚至是稳定性上的故障。
按照经验约80%的数据库性能问题能通过SQL优化手段解决但SQL优化一直以来都是一个非常复杂的过程需要多方面的数据库领域专家知识和经验。 例如如何准确地识别执行计划中的瓶颈点通过优化物理库设计或SQL改写等手段让数据库优化器回归到最佳执行计划 另外由于SQL工作负载及其基础数据庞大且不断变化SQL优化还是一项非常耗时繁重的任务这些都决定了SQL优化是一项高门槛高投入的工作。
SQL诊断优化服务是阿里云数据库自治服务DAS中最为核心的服务之一 它以SQL语句作为输入由DAS完成诊断分析并提供专家优化建议包括索引建议、语句优化建议以及预期收益等信息用户不必精通数据库优化领域专家知识即可获得SQL优化诊断、改写和优化相关的专家建议最大化SQL执行性能。
另外 依托该能力DAS的SQL自动优化服务将SQL优化推向了更高的境界将重人工的被动式优化转变为以智能化为基础的主动式优化以自优化的自治能力实现SQL优化的无人值守。
接下来我们针对DAS的SQL诊断优化服务能力构建进行详细的解读。
01、面临的挑战
当我们提到诊断优化能力时很自然会想到两个问题 能力是否靠谱 能力是否全面
确实如此完美地回答这两个问题将面临非常巨大的挑战 现将其归纳为如下四点
❓挑战一如何选择靠谱的优化推荐算法生成靠谱的建议
在SQL诊断优化领域基于规则方式和基于代价模型方式是两种常被选择的优化推荐算法在目前许多产品和服务中基于规则的推荐方式被广泛使用特别是针对MySQL这种WHAT-IF内核能力缺失的数据库因为该方式相对来说比较简单容易实现但另一面也造成了推荐过于机械化推荐质量难以保证的问题 举一个例子例如对如下简单的SQL进行索引的推荐:
SELECT *
FROM t1
WHERE time_created 2017-11-25AND consuming_time 1000
ORDER BY consuming_time DESC
基于规则通常会首先生成如下四个候选索引
IX1(time_created)
IX2(time_created, consuming_time)
IX3(consuming_time)
IX4(consuming_time, time_created)
但最终推荐给用户的是哪个或哪几个考虑index oring/anding的情况索引呢基于规则的方式很难给出精确的回答会出现模棱两可的局面。在这个例子中SQL只是简单的单表查询那对于再复杂一点的SQL, 例如多个表Join,以及带有复杂的子查询情况又会如何呢情况变得更糟糕更加难以为继。
与此不同DAS中的SQL诊断优化服务采用的是基于代价模型方式实现也就它采用和数据库优化器相同的方式去思考优化问题最终会以执行代价的方式量化评估所有的或尽可能所有的 因为是最优解求解的NP类问题因此在一些极端情况下无法做到所有只是实现次优可能推荐候选项最终作出推荐。即便是如此但对于MySQL这样的开源数据库支持还将面临其它不一样的挑战
WHAT-IF内核能力缺失无法复用内核的数据库优化器能力来对候选优化方案进行代价量化评估
统计信息缺失候选优化方案的代价评估其本质是执行计划的代价计算统计信息的缺失便是无米之炊。
❓挑战二如何具备足够的SQL兼容性 SQL诊断优化服务如何做到SQL兼容性其中包括SQL的解析以及SQL语义的验证这直接关系到能力的全面性诊断的成功率它就像入场券做不到做不全面都是问题。
❓挑战三如何构建具有足够覆盖度的能力测试集
长期以来SQL诊断优化能力的构建一直都是颇具挑战性的课题挑战不仅在于如何将据库优化领域专家知识融入 还包括如何构建一个庞大的测试案例库用于其核心能力验证它就像一把尺子可以衡量能力同时又可以以此为驱动加速能力的构建 因此在整个过程中拥有足够覆盖度准确的测试案例库是能力构建过程中至关重要的一环。
但构建足够好的测试案例库是一件非常困难的事情挑战主要体现在两个方面
足够完备性保证影响SQL优化的因素很多 例如影响索引选择的因素有上百个加之各因素之间形成组合这就形成了庞大的案例特征集合如何让这些特征一一映射到测试案例也是非常庞大的工程
测试案例设计需要专业知识且信息量大例如对于单一测试案例设计也需要专业知识且测试案例中携带的信息量大如索引推荐测试案例它包括 a) schema设计如表、已有索引、约束等b各类统计信息数据c环境参数等等。❓挑战四如何构建大规模的诊断服务能力
SQL诊断优化服务需要具备服务于云上百万级数据库实例的能力其线上服务能力同样面临巨大挑战例如如何实现复杂的计算服务服务化拆分计算服务的横向伸缩最大化的并行资源访问分布式环境下的并发控制不同优先级的有效调度消除隔离峰值缓冲等等。
02、能力构建
面对上面提到的众多挑战下面着重从DAS中的SQL诊断优化引擎核心技术架构以及能力测试集的构建两个维度进一步解读。
2.1核心技术架构 图1: SQL诊断优化引擎核心架构
上图1是SQL诊断优化引擎的核心架构 它实现一套独立于数据库之外的优化器包括自适应的统计信息收集以及执行计划的代价计算以此为基础弥补WHAT-IF内核能力缺失自适应的统计信息收集弥补统计信息缺失。其具体的工作过程如下
SQL解析与验证引擎对查询语句做解析验证验证输入查询语句是否符合标准识别查询语句的组成形成语法树例如谓词以及谓词类型、排序字段、聚合字段、查询字段等识别查询语句相关字段的数据类型。验证SQL使用到的表、字段是否符合目标数据库的结构设计。
候选索引生成依据解析验证后的语法树生成多种候选索引组合
基于代价评估代价评估基于内置独立于数据库内核的优化器获取数据库统计信息在诊断引擎内部作缓存。诊断引擎内置优化器基于统计信息计算代价评估每个索引的代价以及不同SQL改写方法下的代价评估从而从代价选择最优索引或SQL改写方法。
索引合并与择优引擎输入可以是一条查询语句也可以为多个查询语句或者整个数据库实例所有的查询语句。为多个查询语句做索引推荐不同的查询语句的索引建议以及已经存在的物理索引有可能存在相同索引、前缀相同索引、雷同索引。
2.2能力测试集构建
如前面有关挑战性章节所述我们的目标是构建具有足够覆盖度的能力测试集并以此为尺度量能力驱动能力构建。在这一过程中如下图2所示我们构建了以用例系统为中心的开发模式。 图2: 案例系统
能力测试集构建的基本思想首先通过特征化实现测试案例基于特征的形式化描述形成测试案例形式化特征库并具备足够的完备性
在阿里巴巴集团内部我们已经对全网数据库实例上全部SQL进行实时采集和存储借助阿里巴巴这个大平台业务的丰富性和SQL场景的丰富行以特征化形式描述为抓手对线上海量全量SQL资源分析搜寻符合指定特征的真实案例抽取测试案例所需的信息注案例库的数据均来自阿里巴巴集团内部业务所涉及的线上抽取信息如统计信息均经过加密脱敏处理此过程为无人参与的全自动化过程最终完成测试案例库构建。 最后通过 “测试用例形式化特征库” 和 “测试案例库”的特征比对可实现测试完备度和覆盖度的评估 例如
1 哪些测形式化特征测试用例已被测试用例覆盖完备度是多少 2 哪些形式化特征测试用例当前的诊断优化能力未覆盖或测试验证失败 3在一段时间哪些测形式化特征测试用例出现频繁的回归问题 4各能力级的测试用例覆盖率怎样
03、真金不怕火练
DAS的SQL诊断优化服务云上发布前 已在阿里巴巴集团内部稳定运行将近3年多时间日平均诊断量在5万左右 很好地支撑着整个集团业务应用的SQL优化使用场景应用场景主要包括
1、自助优化集团用户指定问题SQL, 服务完成诊断并提供优化专家建议
2、自动优化自动优化服务自动识别业务数据库实例工作负载上的慢查询主动完成诊断生成优化建议评估后编排优化任务自动完成后续的优化上线操作及性能跟踪形成全自动的优化闭环提升数据库性能持续保持数据库实例运行在最佳优化状态。
3年多来SQL诊断成功率保持在98%以上针对慢SQL的推荐率超过75%。
截止到2020年3月底自动SQL优化已累计优化超4200万慢SQL集团全网慢SQL下降92%左右。
更为重要的是SQL诊断优化服务已经构建了有效的主动式分析反馈系统线上诊断失败案例用户反馈案例自动优化中的回滚案例会自动回流到案例系统一刻不停地驱动着诊断服务在快速迭代中成长。
04、如何使用
您可以在阿里云数据库自治服务 DAS 上免费使用该功能点击这里申请体验。
*相关阅读业务异常只能看着数据库崩溃看看应急处理利器——自动SQL限流
接下来每周我们会有系列文章深度解读DAS的AutoScale、异常检测服务、自动SQL优化服务、基于Workload的SQL Review、智能压测、智能调参等等敬请关注。
直播预告
数据库即将迈入自动驾驶时代 4月22日 15:00 — 16:30数据库自治服务DAS重磅新品发布会 期待与你一同见证精彩蜕变 点击这里立即预约直播
原文链接
本文为云栖社区原创内容未经允许不得转载。