摘要:阿里云CloudDBA主要分为离线分析和在线分析两种功能。帮助用户节省成本,定位问题,分析缘由并推荐解决方法。CloudDBA能够作到实时诊断,离线诊断和SQL优化。而且经过MySQL的参数调优,检测参数的不合理或者准备的延迟的状况。数据库
演讲嘉宾简介:ide
勋臣,阿里云RDS内核团队技术专家,目前阿里云CloudDBA专家系统开发。有着丰富的数据库开发管理和优化的经验。函数
PPT下载连接:http://click.aliyun.com/m/51146/性能
如下内容根据演讲嘉宾视频分享以及PPT整理而成。优化
本次的分享主要围绕如下三个方面:动画
1、CloudDBA提供了什么阿里云
2、核心能力视频
3、典型实践应用索引
1、CloudDBA提供了什么
CloudDBA主要提供了两个功能,一个是离线分析,另外一个是在线分析。咱们知道DBA主要平常工做分为两块,一个是群检,还有就是作线上的响应,好比说个人数据库忽然一下应用被卡住了,或者数据库出现性能抖动,这些问题都是须要DBA实时响应的。Oracle包括两个报告,一个是AWR报告,还有一个叫ASH报告,咱们从功能上来讲和Oracle有些相似。离线的分析主要是AWR报告,而后在线响应是ACTIVE SESS HISTORY。
CloudDBA在云上是SASS化的一块,是基于PaaS平台的增值服务。云上的SASS须要去解决性能的问题,问题的诊断,以及提供一些辅助的工具。云上的数据库跟自建的数据库有一点不一样,若是数据库上云了以后,PaaS这层的工做云都帮忙解决了。好比,性能监控,HA等都已经作了。DBA真正要作的是上面这一层,就是怎么让数据库运行的更好,让用户用好数据库。
不论是云上的仍是自建的数据库,它自己的成本其实是看得见的,是很低的。对作DBA的同窗来讲,从准备到数据库上线花费的精力其实是有限的。而真正的难点是如何把数据库管理好?由于咱们为作产品的平台应用提供支撑,若是用户的使用习惯很差,很容易将咱们的数据库搞坏掉,整个业务都会受到影响。因此从下图能够看到咱们的数据库会有大量的维护成本,大概大于80%。固然DBA主要是解决应用中的一些问题,节省时间成本。好比说,用户反馈说应用卡住了,对DBA来讲须要登陆到数据库中,到控制台看动画,看看到底发生了什么?这些动做其实是很重复,很机械的、若是有CloudDBA,它会有本身的一些小的脚本,好比定位问题,很快的能够输入用户名密码,把状态抓出来,基于状态作一些判断。这种方式是能够的,可是还有更好的解决方式,若是做为一个产品,把这样的行为产品化和服务化,交付出来。在应用卡住的时候,用户只须要点一个按钮,产品就能够把状态抓出来,而且分析出数据库卡住的点,并给出下一步的解决建议。甚至绝大部分场景,命令都会给生成出来,用户直接复制执行就能够了。
2、核心能力
1.实时诊断
咱们会把DBA积累的经验产品化,编成程序,录入到资料库中去。将诊断的结果进行输出。咱们在平常工做当中会常常发现一样的问题对不一样的DBA来讲解决的方式也不一样。甚至说一位同窗在当值班的时候遇到问题,知道怎么解决了,换另外一位同窗指班没有遇到问题,过了很长的时间再一次发生时你们可能都忘了如何解决这个问题。因此这时就须要将工做经验进行沉淀,产品化,服务化,再把它输入出来。咱们把解决问题的方法。技巧,经验录入到资料库(Knowledge Base)中,它就是一个诊断程序,通过不断的录入经验,Knowledge Base会变得愈来愈丰富。结果格式会分为现象描述,缘由描述和相关诊断建议。
2.离线诊断
离线诊断是基于状态,作深层次的分析,挖掘Top SQL,看哪些SQL执行次数最多,最长,消耗时间最长。另外还有事物分析,看事物是否合理,以及SQL Review。由于咱们作DBA,若是没有一个很强大的工具去规范开发人员行为的话,这个工具早晚会被拖垮。在早期的时候,出一份规范发给开发人员,要求搜索语句只能按照规范写,不然会出事。可是若是没有一个工具约束和规范,每一个开发团队都不可能看每一条规范语句。还有就是死锁的分析。
3.SQL优化
MySQL的优化器固然没有Qracle那么优秀,咱们常常会听到它的执行效果不是很好,表的链接顺序不是那么的最优。好比表上面有索引,可是索引失效了,你们都知道索引失效的状况是字段不匹配。咱们的工具会帮助咱们在字段后面加个函数。好比说有一个交易表,交易表上有一个字段用时间去get,由于目前时间都至少精确到秒。不少开发人员会把日期函数直接加在get上面,等于具体某一天就能够了。可是若是用Oracle或者SQL Server3的数据库是没有问题的,DBA会给你加一个函数索引。可是若是用的是MySQL,并且是5.7以前的版本是没有办法的,真正的写法是大于等于这一天的开始和小于等于这一天的结束,应该是这一天24小时的范围以内均可以识别出来。还有一个是计算代价的重写,咱们会到备库动态的采样,好比说一个查询,上面没有索引,带有多个字段,要建一个混合索引,那么这个字段的顺序应该怎么放?咱们会到备库中动态采样,看这些列上的数据分布,而后生成最优的字段顺序,最优的索引。由于不可能看几个字段有的全部索引顺序,因此采起动态采样。这一块的内容能够到阿里云的官网搜,有不少很是详细的资料和视频。
3、最佳实践
咱们常常遇到用户把规格升级,而后进行压测,发现升级规格后性能反而降低。好比4C32G生级成了8C62G,发现吞吐降低。经过诊断报告TOP SQL定位性能降低缘由。发现truncate的执行时间变慢了,为何变慢?由于表的内存变多了,内存的张页变多了,MySQL truncate以前是要把张页落入文件里面去,利用咱们的工具能够很快的定位缘由语句,下一步应该把MySQL的 Max present的参数调小,把张块控制在必定的范围里面。
另一个问题是用户说每隔半小时就会出现压力抖动,查明什么缘由。由于用户提出这个问题时,抖动发生的时间是在前几天或者过了几个小时。因此咱们会建议用户开启CloudDBA,这样才方便咱们跟踪,具体的数据用户在本身的的控制台就能够看到了。以下图是经过TOP SQL获得的诊断报告,知道哪一个时间发生了抖动。
链接满了也分为不一样的场景。第一种是出现锁了,这种是最多见的,这是把锁会话KILL掉。第二种就是在业务高空的时候执行了ddl的操做,这时也很好解决,咱们都会帮助用户定位出来。还有一种是应用程序的链接使用有问题,没有关掉。好比Java的JDBC开了以后没有关掉,这时咱们也能够识别出来。咱们会建议用户使用链接池,及时的把链接关掉。还有一个,既不是MySQL堆积也不是锁,也正常使用链接池,这时就多是规格过小,压力太大。若是不能升级规格,那么应用程序就要作限流。
链接满了以后,CloudDBA能够帮助识别并终止会话。
CPU达到100%以后,CloudDBA能够帮忙识别出来,同时进行优化
除了上述的几种场景,阿里还作了一些参数优化。MySQL有很是多的参数,参数的不合理或者准备的延迟均可以经过CloudDBA检测出来。
CloudDBA是一个动态净化的产品,咱们是在不断的更新。咱们会和阿里云的工单系统联系,他们处理的工单会扭转到咱们这边,咱们会吸取消化掉一部分,看哪些能够经过程序集成起来,RDBA会嵌在RDS数据库的控制台上面,用户能够无偿使用。