数据库内核月报

数据库内核月报 - 2019 / 06

CloudDBA · 最佳实践 · Performance Insights

Author: 风移

Performance Insights是什么

阿里云RDS Performance Insights是RDS CloudDBA产品一项专注于用户数据库实例性能调优、负载监控和关联分析的利器,以简单直观的方式帮助用户迅速评估数据库负载,资源等待的源头和对应SQL查询语句,以此来指导用户在何时、何处、采取何种行动进行数据性能优化。

几个名词解释

AAS和MaxVcores来量化系统瓶颈

在文章开始,我们希望能够把一个非常重要的问题解释清楚:为什么可以使用AAS (平均活跃会话数)与RDS数据库实例MaxVcores量化对比来作为系统瓶颈的判断依据?我们的理由是:

首先,RDS数据库系统中,我们认为最为重要的资源是CPU资源,因为其他所有资源都需要CPU来调度。

其次,CPU的并发处理能力,与CPU Cores的数量相关。假设在相当小的一个时间切片上,CPU对活跃会话(AS)处理能力瓶颈就是CPU Cores数量。即:CPU最多同时能够处理与Cores数量均等的活跃会话数。

因此,我们可以用RDS数据库系统中,平均活跃会话(AAS)数与MaxVcores数的量化对比,做为判定系统是否存在瓶颈的重要依据。

Performance Insights能做什么

阿里云RDS Performance Insights能够帮助我们的用户快速方便、直接了当的发现数据库实例负载,以及导致性能问题的SQL语句。目前Performance Insights页面以三个方面承载我们的产品思路:

关键资源利用率趋势图

阿里云RDS Performance Insights关键性能指标的趋势图,可以从宏观的角度帮助客户发现实例负载的来源,比如:到底是CPU资源吃紧,IOPS过高?还是网络开销过大,又或是活跃连接数打满?

PerformanceInsights_性能指标.png

实时AAS变化趋势图

从关键资源利用率趋势图部分,我们已经大致清楚了实例负载的来源。接下来,带着这个问题,我们去看看目前实例中活跃会话的资源等待情况。那么,此时我们可以来到页面的第二个部分:实时AAS变化趋势图。 PerformanceInsights_AAS趋势.png

从Performance Insights中的实时AAS变化趋势图中,我们可以非常清晰的发现RDS实例中的资源等待情况。比如上图,我们可以分析出以下重要信息:

由此可见,我们使用Performance Insights中的实时AAS变化趋势图,可以非常清晰简单,直接了当的找到用户RDS实例负载来源,资源等待于何时、何处,以及变化规律。

多维度负载详情

通Performance Insights中的实时AAS变化趋势图,掌握了实例负载来源,资源等待及变化规律,接下来用户理所应当最关心的一个问题便是:到底导致这些实例负载的具体查询语句是什么?哪个用户导致的?哪个连接主机客户端?哪个应用数据库?这一系列的问题我们可以使用多维负载信息部分来解答。

PerformanceInsights_TopWorking.png

从以上截图的下半部分,我们可以方便的找出与AAS变化趋势关联的负载对应的SQL查询语句,以及每个语句对AAS的贡献的对比情况。当然,您也可以根据自己的需要切换为Waits,Users,Hosts,Commands,Databases和Status,分别表示资源等待,用户,客户端主机,命令类型,数据库,进程状态等维度查看。

Performance Insights架构

了解阿里云RDS Performance Insights能够做什么以后,让我们来看Performance Insights的设计架构图,简要概括为五个字:四层两链路。

PerformanceInsights_架构.png

四层架构

RDS Performance Insights四层架构从上往下,依次为:

两条链路

从数据链路来看Performance Insights,有两条链路:

典型案例

以下两个典型案例,来看看Performance Insights如何一目了然,一针见血的帮助我们诊断分析数据库系统瓶颈,资源等待和SQL查询语句。

为什么CPU 100%了?

在我们多年的专家服务过程中, 遇到最多的用户问题便是“为什么我的CPU 100%了”,来看看Performance Insights是如何庖丁解牛这个问题。

Performance Insights截图

以下是该RDS实例,Performance Insights页面截图。 Performance Insights_CPU100%.png

分析

我们从Performance Insights页面截图分析出以下几个问题:

XXX时间点SQL查询变慢了

另外,用户经常遇到的一个问题是“为什么我的SQL查询语句突然变慢了”?

Performance Insights截图

某RDS实例用户反馈在16:05左右,原本执行很快的Update语句,突然变得很慢,16:08左右恢复正常,以下是该RDS实例Performance Insights页面截图。

PerformanceInsights_突然变慢了.png

分析

从Performance Insights截图,我们可以分析出:

以上,我们从两个特定的用户案例可以看到Performance Insights可以简单直观,轻松愉悦的帮助用户诊断问题,关联分析系统瓶颈,资源等待和SQL查询,取得了非常好的效果。

Performance Insights的未来

伴随阿里云RDS Performance Insights第一期发布,我们已经可以帮助用户快速发现RDS实例性能问题,以及导致性能问题的具体SQL查询。但是,这远远不够,我们还需要更深入的帮助我们的客户自动化、智能化解决问题。

从“是什么”到“为什么”

当前,用户通过阿里云RDS Performance Insights找到了导致性能问题的具体查询SQL语句后,接下来很自然的一个问题是,为什么这个查询语句会导致性能问题?是缺失必要的索引?统计信息数据倾斜?查询数据类型转换?Non-SARG查询等等?接下来,我们需要深入探索为什么SQL会导致性能问题。

从“为什么”到“怎么办”

当用户知道了SQL语句为什么有性能问题以后,接下来的问题便是:我该怎么做才能解决性能问题?我们需要明确告诉用户怎么办就能够解决性能问题。

从“怎么办”到“自动办”

随着用户能够解决SQL语句性能问题以后,用户接下来最为迫切的需求便是:阿里云能否帮我们预先发现、智能化、自动化处理解决这些类似的问题?

以上,便是RDS Performance Insights的产品脉络,从是什么到为什么;从为什么到怎么办;从怎么办到自动办,层层递进,步步为营,一步一步创造客户越来越高的诊断优化需求。

最后总结

阿里云RDS Performance Insights是数据库实例性能调优、负载监控、关联分析的必备利器,它可以帮助用户决策从何处下手,何时采取行动,采取何种行动以及智能化自动解决问题根源。我们有能力有信心可以帮助我们的客户更好的上好阿里云,用好阿里云。