简介:DAS推出了全局Workload优化性能,能够及时检测到数据库的负载变动,辨认到新增SQL、执行变动的SQL以及性能不佳的SQL,并综合思考SQL的执行频率和相干SQL信息,给出优化倡议。

背景

日常的数据库优化中,在数据库的表上创立适合的索引是解决慢SQL查问问题的一种十分重要且罕用的计划。在处理过程中,DBA或者开发人员通常会依据实例上的慢SQL信息进行优化,DAS主动SQL优化性能曾经实现了依据慢SQL进行主动诊断,并创立适合的索引。但该计划会面临如下几个挑战:

  1. 数据采集问题:一些业务SQL并没有达到慢SQL采集的阈值(比方1s),而这些SQL查问自身没有很好的利用索引,查问效率不高,依然有很大的优化空间。在并发量增大或者表数据增多的状况下,这些查问很容易造成实例性能忽然好转而引起故障。
  2. 写入代价问题:在创立索引时通常更重视进步数据读取的效率,而疏忽索引保护对写入性能的影响和空间占用的老本,对于写多读少的表,创立太多索引反而会影响零碎吞吐。
  3. workload变动问题:索引一旦创立,通常状况下很少变动,而业务却始终在动态变化中。随着业务一直迭代变动,一些索引可能不再有SQL应用,或者应用频率很低,此时须要引入更优的索引设计来晋升数据库的解决性能。

为了解决上述问题,DAS推出了全局Workload优化性能,它能够及时检测到数据库的负载变动,辨认到新增SQL、执行变动的SQL以及性能不佳的SQL,并综合思考SQL的执行频率和相干SQL信息,给出优化倡议。

解决方案介绍

     全局Workload优化,次要由三局部组成。

     Workload检测:依据数据库实例上和Workload相干的性能指标(如RT,CPU等)以及全量SQL相干指标(执行次数、执行耗时、扫描行数等),训练数据模型,实时检测Workload的SQL执行状况,从而辨认新增SQL、执行变动的SQL,以及整个负载变动的周期。

      如下图所示,全量SQL执行情况指标在period1和period2呈周期性状态,至period3,执行情况发生变化。全局Workload优化,依据数据训练模型,轻松实现辨认负载变动的工夫区间。

    全局诊断:全局诊断优化则依据数据库在某一时间范畴内的全副SQL执行状况,综合思考SQL的查问和写入性能以及空间占用状况,举荐最优索引组合,从而从SQL角度最大限度进步数据库的性能,升高数据库导致的问题的概率。

智能压测:智能压测能够回放实例上某个时间段内的全副SQL(该性能会在相干文章中具体解读),将全局诊断和智能压测联合后,零碎能够在测试实例上依据诊断倡议主动创立索引,回放历史流量并比照驳回倡议前后的SQL执行状况,生成测试报告。

具体实现

触发机会

全局workload诊断反对用户自定义触发和零碎自动检测触发两种模式:用户触发能够依据业务需要制订工夫区间,触发全局诊断获取优化倡议;自动检测会实时监测实例的负载信息,检测到数据库有异样SQL呈现,或者发现Workload整体趋势变动,及时触发全局workload诊断。其中异样SQL包含:(1) 新增SQL;(2) 执行次数占比浮动20%以上SQL;(3) 执行均匀RT浮动20%以上SQL等。

通过自动检测机制,能够帮忙用户及时发现结构设计落后于业务变动的场景,缩小故障产生的概率以及资源节约。

数据起源

全局workload诊断的数据起源是SQL审计,包含SQL类型、SQL模版、执行次数以及SQL性能信息等。SQL审计会记录诊断工夫内执行的所有SQL,因而能够发现不是慢SQL但性能欠佳的SQL问题。

关联SQL剖析

通过解析SQL模版和元数据,能够剖析出SQL、表、列之间的拜访关系,从而失去可能相互影响的SQL汇合。通过关联性剖析,能够无效地缩小后续求解问题的复杂度,同时为索引上线后的性能跟踪服务提供根底的数据反对。

候选索引生成及代价评估

该模块和前面的优化求解是全局workload优化的外围模块。在单SQL的索引举荐中能够依据一些规定或者教训来举荐索引,也能获得肯定的成果,但基于全局workload的优化基于规定的办法就简直有效了,必须可能将代价进行量化。咱们基于DAS实现的外置优化器,能够做到疾速精确的解析语法树、采样收集统计信息、生成候选索引以及计算应用某个索引的代价。

优化求解

在确定候选索引集以及索引代价的状况下,抉择最有索引汇合的过程能够等价为一个背包问题的变种。抉择某个索引的收益等价为放入背包物品的价值,因为创立一个索引既能够给查问带来正收益也会对写入和空间老本带来副收益,因而价值能够是负数也能够是正数。背包的容量是一个表上最多建设索引的阈值(用户设置或零碎默认,并非数据库存储束缚)。咱们的指标是使得背包中物品价值最大。另外须要留神的是,当抉择一个索引后,它会对其余索引的价值产生影响,因而在每次迭代抉择物品时须要依据曾经存在索引的状况,更新残余待选索引的价值。

索引I代价 = 执行次数 * (a*读收益 - b*写代价 - c*空间占用)

成果验证

为了保障优化倡议的有效性,咱们和智能压测性能整合到一起,提供疾速不便的验证计划。智能压测系统会主动搭建测试实例上并同步实在数据,而后在测试上主动驳回优化倡议,回放诊断时间段内的全量SQL并采集SQL执行的性能数据,最初比照生成测试报告。这种计划的益处是既保证了测试场景和线上业务的一致性,又不会对线上运行业务造成影响,同时还能预估驳回倡议后产生的影响。

示例

比方表1中存在6条SQL,如果独立的看每一条SQL,失去的优化索引可能为表2中的4条索引;而从workload维度来看,索引能够合并为表3的两条索引。两种后果比照,整体RT降落14.45%,索引空间节俭50%。

SQL2 :  idx\_is\_deleted\_gmt\_modified (is\_deleted, gmt\_modified)

SQL4 :  idx\_name(name)  

SQL5:   idx\_name\_id\_birth\_date (name, id, birth\_date)   

SQL6:   idx\_name\_nick\_name (name, nick\_name)

idx\_is\_deleted\_gmt\_modified (is\_deleted, gmt\_modified)

idx\_name\_id\_birth\_date (name, id, birth\_date) 

将来打算

    全局Workload优化将来会打造主动优化的闭环,包含workload异样检测、全局workload诊断、智能压测成果评估,主动驳回倡议、成果跟踪及异样解决。另外,目前全局workload优化思考了SQL执行频率,SQL查问和写入的影响,但没有思考固定参数或者参数歪斜等问题,前面能够进一步将这些业务属性纳入到思考因素当中。

**相干浏览:
**

数据库自治服务DAS公布年度新版本:1-5000,”数据库主动驾驶“进入规模化时代

深度技术揭秘 | 大促狂欢背地,如何无效评估并布局数据库计算资源?

重磅 | 数据库自治服务DAS论文入选寰球顶会SIGMOD,领航“数据库主动驾驶”新时代

干货|SQL申请行为辨认新性能上线,帮忙解决异样SQL检测之海底捞针问题

干货|一文读懂阿里云数据库Autoscaling是如何工作的

版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。