数据库实例性能调优利器-Performance Insights最佳实践

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 作者: 风移Performance Insights是什么阿里云RDS Performance Insights是RDS CloudDBA产品一项专注于用户数据库实例性能调优、负载监控和关联分析的利器,以简单直观的方式帮助用户迅速评估数据库负载,资源等待的源头和对应SQL查询语句,以此来指导用户在何时、何处、采取何种行动进行数据性能优化。

作者: 风移

Performance Insights是什么

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

几个名词解释

Performance Insights:中文翻译过来叫性能洞察。
Active Session (AS):RDS数据库系统中,活跃的会话数量。
Average Active Session (AAS):一段时间内,RDS数据库中平均活跃会话数量。
Max Vcores:RDS数据库实例最大可以使用到的CPU Cores数量。

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页面以三个方面承载我们的产品思路:

  • 关键性能指标趋势图:关键资源利用率变化趋势图。
  • 实时AAS变化趋势图:数据库实例中平均活跃会话(Average Active Sessions)实时变化趋势。
  • 多维负载信息:展示多维度实例负载信息。

关键资源利用率趋势图

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

实时AAS变化趋势图

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

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

  • 时间10:25 - 10:57之间,平均活跃会话远远大于实例CPU Cores数量24(几个点低于CPU Cores),说明数据库已经面临比较大的系统瓶颈。
  • 从AAS变化趋势图来看,几乎是在等待蓝色标示的资源,即CPU资源。

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

多维度负载详情

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

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

Performance Insights架构

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

四层架构

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

  • 应用层:前端用户可见,承载着我们产品的思路和逻辑,是终端用户可见的产品呈现。
  • 服务层:各系统API协调工作,为应用层提供应用数据服务,我们产品主要的业务逻辑处理层。
  • 数据层:数据实时处理平台,统计汇总,数据扁平化,实时计算,最终持久化到元数据库中,为服务层提供数据。
  • 采集层:从RDS实例中,采集有价值的基础数据,为数据层输入数据。

两条链路

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

  • 访问链路:数据至上而下请求访问,至下而上的数据返回。
  • 采集链路:数据从生产到消费,从统计汇总到最终落库整个生命过程。

典型案例

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

  • 为什么CPU 100%了
  • XXX时间点SQL查询变慢了

为什么CPU 100%了?

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

Performance Insights截图

以下是该RDS实例,Performance Insights页面截图。

分析

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

  • 从资源利用率中CPU使用率和活跃会话数量来看:大概在 09:59 - 10:05,均有大幅上升。CPU使用率达到了100%,活跃会话(Active Sessions)达到了400+;
  • AAS变化趋势中发现,这段时间内,系统瓶颈主要集中在CPU和Lock两资源的等待,总的Active Sessions数远远超过CPU Cores(实例的CPU Cores为16),存在严重的系统瓶颈。
  • SQL语句详情部分:非常清晰的看到排在第一位的SQL查询语句是等待CPU资源,达到了96个活跃会话;第二位是Lock资源等待,达到了79个会话,可以点击SQL语句,查看详情。

XXX时间点SQL查询变慢了

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

Performance Insights截图

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

分析

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

  • 从AAS变化趋势图中,发现大约从16:05:50秒开始,系统出现了大量等待Lock资源的活跃会话(图中橙色颜色区域),达到了33个,远超CPU Cores数。
  • 从截图最下部分SQL查询中,发现等待Lock资源的SQL语句(第一条,橙色标示),恰巧是用户抱怨变慢的Update操作语句。于是我们可以很快断定,这个Update变慢的原因是资源被锁住,导致等待锁资源释放时间过长,拉长了执行时间,即Update语句变慢了。
  • 从AAS变化趋势图中,发现大约在16:07:20左右,等待锁资源的活跃进程消失了,Update语句性能恢复正常,说明锁资源已经释放。

以上,我们从两个特定的用户案例可以看到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是数据库实例性能调优、负载监控、关联分析的必备利器,它可以帮助用户决策从何处下手,何时采取行动,采取何种行动以及智能化自动解决问题根源。我们有能力有信心可以帮助我们的客户更好的上好阿里云,用好阿里云。

福利:云数据库MySQL试用半年仅需10元,点此查看>

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
NoSQL Java 数据库
【问题篇】springboot项目通过数据库限制实例端口号
【问题篇】springboot项目通过数据库限制实例端口号
19 0
|
1月前
|
供应链 数据库 开发者
深入了解数据库锁:类型、应用和最佳实践
深入了解数据库锁:类型、应用和最佳实践
|
3月前
|
弹性计算 关系型数据库 MySQL
快速上手阿里云RDS MySQL实例创建,轻松管理数据库
快速上手阿里云RDS MySQL实例创建,轻松管理数据库 在数字化时代,数据已成为企业的核心资产。如何高效、安全地存储和管理这些数据,成为企业在云计算时代亟待解决的问题。阿里云的RDS(关系型数据库服务)应运而生,为用户提供稳定、可靠的云上数据库解决方案。本文将详细介绍如何通过阿里云RDS管理控制台快速创建RDS MySQL实例,让您轻松上手,快速部署数据库。
170 2
|
4月前
|
数据安全/隐私保护 时序数据库
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
128 0
|
28天前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
10 1
|
1月前
|
SQL 关系型数据库 数据库
sql如何新建数据库实例
sql如何新建数据库实例
|
3月前
|
SQL 监控 关系型数据库
解密SQL性能异常事件及阿里云数据库的性能调优实践
作为开发者想必都知道数据库是现代应用的核心组件之一,而且在当今互联网时代之下,SQL查询的性能直接影响系统的整体性能,它的性能对于系统的稳定性和响应速度至关重要。那么本文就来讨论一下SQL性能异常的排查和优化方法,包括我个人印象深刻的SQL性能异常事件,以及分享一下使用阿里云数据库产品/工具进行SQL性能调优的经验和心得体会。
84 1
解密SQL性能异常事件及阿里云数据库的性能调优实践
|
4月前
|
监控 前端开发 应用服务中间件
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
411 0
|
4月前
|
NoSQL Java Redis
Redis【应用 01】Java实现动态切换写入不同Redis数据库的方法实例(动态切换Redis数据库)
Redis【应用 01】Java实现动态切换写入不同Redis数据库的方法实例(动态切换Redis数据库)
80 0
|
4月前
|
Java API 时序数据库
InfluxData【付诸实践 02】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
InfluxData【付诸实践 02】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
63 0