当前位置: 首页 > 科技观察

SQL请求行为识别新功能上线,助力解决异常SQL检测大海捞针的问题

时间:2023-03-21 01:55:49 科技观察

业务背景:DAS(数据库自治服务)为百万数据库实例稳定运行保驾护航,准确定位数据库运行过程中的异常SQL是DAS最基本的功能。90%以上的数据库问题都来自异常的数据库请求。无论是集团在双十一的海量事务请求行为,还是用户的业务变更请求行为,每时每刻都在影响着数据库的性能。自动驾驶汽车通过感知路况图像的变化来掌握汽车的方向,自动驾驶数据库通过感知和识别用户请求行为不断修复和优化数据库中的各种问题,保护云端数据库。如何从海量数据库的海量请求中定位到不同数据库引擎的不同场景,一直是困扰DBA们多年的问题。在推荐领域,通过分析用户行为习惯,不再是机械的网页展示文字/视频/商品,精准推荐给用户,提升用户体验和商品转化率。同样,下一代数据库自动驾驶平台也需要对用户请求行为进行分析。用户开发业务行为并推荐相应的优化、修复和扩容操作,以提高自动驾驶数据库的效率,使数据库更快、更稳定、更安全。因此,从用户请求行为和业务行为出发,在海量数据库实例的海量请求中进行数据挖掘是一个值得深入研究的课题,也是数据库自动驾驶平台支撑DAS数据库所依赖的底层技术能力自治服务。场景自治。DAS多年来提供了多项分析SQL数据的L2功能,包括:专业SQL洞察、全SQL、慢日志、一键诊断、锁分析、会话等,每一个功能都沉淀了DBA分析不同问题的方法从不同的角度,不同的实例和业务诊断问题的方法略有不同。对于对DB运维不是很熟悉的用户,DAS提供了统一、高效、简单的方式帮助用户定位问题。我们结合SQL减速的多指标特点,提出了一种基于特征相似度匹配的方法来厘清问题SQL与各种资源异常现象之间的关系,是一个具有挑战性的问题。关于如何发现异常SQL,DAS团队还在研究和探索中。在探索过程中,我们提供了新的分析功能SQL请求行为识别,帮助用户更好的定位SQL问题。问题描述:以下图为例。实例的CPU有剧增,数据库存在CPU爆满的潜在风险。发现问题SQL很容易,但是当用户的全SQL模板超过几万甚至上亿时,用户无法通过当前DAS页面快速定位到异常SQL。我们需要提供一种更高效的方式,通过更多的数据来定位异常请求。用户在使用DAS专业版的SQLinsight功能时,即使我们将全量的SQL流水线压缩聚合成模板,模板的数量也是惊人的,可以看到大量具有相似特征和趋势的模板。因此,如果我们根据SQL请求行为进一步压缩模板,用户可以更好地定位异常SQL问题。目前,DAS产品功能和业界的AWSAzure等其他产品都具备了初步的异常SQL定位能力。通过对收集到的SQL数据进行多维度排序,用户可以自行定位数据库问题。这种方法可以解决80%以上的简单数据库问题。是有效的,但是在复杂的业务场景和DBA难以定位的数据库问题上效果很差。以阿里云内控的元数据数据库集群实例为例,今年平均每个月出现10次以上的CPU爆满问题,全年多次出现性能相关故障,但每次都出现问题不同的是,有的时候DBA仅仅能发现现象,却很难快速定位到问题的根源。因此,通过对用户请求行为的分析,更好的迭代DAS数据库自治服务产品,解决我们复杂场景下的数据库性能问题,提升整个数据库各个引擎的稳定性、易用性和效率。行业产品:AWS:RDS:PerformanceInsight,功能和现在的DAS产品一样,采集的数据维度也差不多。通过TopN排名进行异常SQL定位,没有SQL请求行为分析功能。Azure:QueryPerformanceInsight使用TopN方式通过定位SQL请求,可以定位到60%的明显问题,但是对于复杂业务的SQL请求是无法定位数据库问题的,也没有SQL请求行为分析功能腾讯云:DBBrain功能,与目前DAS现有功能类似,无SQL请求行为分析功能华为云:DatabaseAdminService,与DAS现有功能类似,无SQL请求行为分析功能Challenges&DifficultiesChallenges:Scalechallenges:海量查询海中的性能问题海量数据库用户海量业务请求丰富,如何从海量数据库实例中的海量请求中定位各种数据库引擎的性能问题.监控诊断挑战:7*24实时异常检测=>7*24近实时根因分析对于潜在的SQL请求导致的数据库性能问题,需要近实时定位根因。复杂数据库异常:异常指标通常与多个SQL请求相关。单条SQL无法解释异常原因,多个业务的SQL请求相互影响。相关问题包括全表扫描/索引/锁问题/缓存故障/内核问题等多个问题在指标现象上有异同动机:人工根因定位:帮助DBA或用户解决性能问题,工单问题帮助后端开发者合理安排请求查询流程,尽量从业务角度对资源密集型请求进行拆分,帮助DBA在业务层面找到不同请求之间的直接和间接关系。赋能自治服务:限流更精细:异常SQL限制更细致工作负载预测更准确:工作负载预测更准确autonomousactionsSolutionpotentialperformanceproblems:CrackthepotentialperformanceissueatthefirstplaceDASSolution:启示:在很多后端应用开发的过程中,后端架构设计往往会保证接口的幂等性。比如项目中为了解决超时问题,通常会引入重试机制,有时会请求重复的数据,有时在消费消息时会读取重复的数据。例如,多次插入或更新可能会导致数据错误。为了解决这些幂等的方法,后端通常会使用先select后insert,加悲观锁/乐观锁/分布式锁,或者基于状态机管理有状态业务等这些方法。支付场景状态机示例:......update`bill`setstatus=1whereid=520andstatus=0;订单行为SQLAupdate`bill`setstatus=2whereid=520andstatus=1;支付行为SQLBupdate`bill`setstatus=3whereid=520andstatus=2;取消订单行为SQLC.....所以同一个业务流程会伴随着这多个SQL请求,串行的或者并行的,就是说这些SQL在执行趋势上有这种相关性,这种相关性与业务相关.当我们发现业务异常时,伴随着异常的指标。所以,当我们定位到异常的SQL时,同一个业务下的SQL就会出现异常现象。因此,通过这些SQL趋势特征,我们可以通过算法对海量的SQL数据进行处理。聚类。因此,我们认为通过分析SQL的同源性,从业务角度定位异常SQL,可以更高效地定位异常SQL。Layer)请求,性能数据(PerfData)和SQL请求数据(SQLQueryData),性能数据通过多指标异常检测(MTSAnomalyDetection)/特征提取(FeatureExtraction)异常请求定位过程:示例:模板集合X:{sql_a,sql_b,sql_c}==>影响mysql.cpu_usage指标变化==>sql集的影响程度(计算cpu_time的比例)模板集Y:{sql_i,sql_j,sql_k}==>影响mysql.active_session索引变化==>sql集的影响程度(估计session占比)感知层感知到时序索引异常后,使用全量SQL模板处理后的数据,并采用GraphBasedclustering的方法,根据请求对海量SQL进行聚类。对行为特征进行划分,最后根据聚合后的请求行为的贡献分值(QueryBehaviorRanking)进行排序,检测异常请求及其对性能指标的影响。根本原因分析过程:例子:坏的SQL模板sql_i-->导致锁等待现象--->影响了mysql.rows_lock_wait_time索引-->导致模板Y集合的SQL被阻塞-->导致突然增加在session中-->阻塞的Y集合的X集合中CPU密集SQL被阻塞-->导致CPU突然增加通过SQL解释指标异常现象后,还有很多故障我们无法准确定位,比如主备延迟、锁问题、OOM、内核问题等,这些问题可能导致执行SQL的时间消耗增加,反过来,SQL也可能导致这些问题。(AnomalyPropagationAnalysis)帮助我们分析这些现象之间的传播关系。这里的分析,我们利用时间关系和我们的历史案例数据进行综合对比,最后将异常传播链和整个DAS分析过程和建议添加到后台案例库中,细化案例模型。CaseModel会根据反馈不断叠加调整匹配参数,给出更精准的建议。基于请求行为识别的异常SQL定位案例:定位session(active_session)突增尖峰问题:下图中的数据库实例activesession出现异常尖峰,持续时间过长,可能会引起一些敏感业务的问题,我们希望找出尖峰的原因。首先,DAS的实时异常检测可以检测多个指标的异常时间段。对于CPU,检测到activesession异常,会出现黄色的异常事件提示。活动会话通常与总执行时间密切相关。通过SQL请求行为分析,选择对应的指标,点击Analyze,找到类似session的指标,点击View,按照总耗时排序,就可以找到对session异常“贡献”最大的指标。对于异常的SQL,可以点击对应的SQL_ID查看详情。通过趋势行为排序的结果,可以很明显的看到SQL相比历史趋势有所放缓。通过执行趋势可以看出,异常趋势与历史趋势完全不同,与活跃会话异常趋势相吻合。最终定位:这条SQL的执行次数突然增加(从1000次增加到8000多次执行),导致其他SQL耗时执行速度变慢,导致activesession堆积,导致突然增加active_session索引。CPU爆满(cpu_usage)突增问题:下图中的数据库实例CPU爆满,除了SQL设计的CPU密集型计算如join等昂贵的操作,在大多数情况下,CPU与扫描的行数呈正相关。在SQL请求行为分析选择、cpu_usage和扫描总行数中,我们更容易定位到与CPU相关的指标。CPU满载,导致会话堆积。未来,DAS计划支持更多引擎的实时检测和异常定位。专业版结合用户全SQL,帮助更多用户定位更多类型的数据库实例问题。不仅可以让专业的DBA更好的使用DAS来控制数据库实例,也可以让数据库领域的初学者无门槛地控制数据库,真正保证数据库实例的自感知、自优化、自修复。原文链接:http://click.aliyun.com/m/1000282743/

猜你喜欢