MySQL 性能调优+自治服务 | 学习笔记

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 快速学习 MySQL 性能调优+自治服务,介绍了 MySQL 性能调优+自治服务系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【云数据库 RDS MySQL 从入门到高阶MySQL 性能调优+自治服务】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/996/detail/15104


MySQL 性能调优+自治服务


内容介绍:

一、市场背景及挑战

二、数据库自治服务( DAS )

三、MySQL 性能调优之负载问题

四、性能负载问题解决方案演示 Demo

五、MySQL 性能调优之 SQL 优化问题

六、SQL 优化问题解决方案演示 Demo

七、数据库的常见问题

八、小结


一、市场背景及挑战

1.背景

云上数据库触手可及,但用好数据库依然充满挑战

Gartner 预测,到2023年全球75%的数据库都会跑在云上

2.行业挑战

(1)业务挑战:如何在大规模场景下管好数据库

①如何减少数据库故障?

②近万台物理机资源,成本如何优化?

③10万级数据库实例性能如何优化?

④30个 DBA 如何支持上万开发人员(>100 BU)?

image.png

 image.png

(2)用户挑战:如何最佳体验地用好数据库

①信息透明:“数据库运行的怎么样?”

②诊断优先:“数据库 RT 为啥又高了?”

③自助服务:“ DBA 有空帮忙看看吗?”

④持续好用:“ SQL 刚优化完怎么又变慢了?”

尽量做到:“真正像水电煤一样的云数据库未来”

①购买后,只需使用

②持续优化、持续保障、持续可用

③无需关注性能问题、故障处理、数据安全、成本优化等

3.趋势判断

(1)人工到产品:业务增长远超 DBA 增长速度倒逼 DBA 服务产品化

(2)经验到智能:大规模复杂场景专家经验瓶颈倒逼智能化探索

(3)被动到主动:云数据库服务质量和用户体验倒通主动服务

 

二、数据库自治服务( DAS )

1.介绍

数据库自治服务(Database Autonomy Service,简称 DAS )是一种基于机器学习和专家经验实现数据库自感知、自修复、自优化、自运维及自安全的云服务,旨在帮助用户消除数据库管理的复杂性及人工操作引发的服务故障,有效保障数据库服务的稳定、安全及高效。

下图是阿里云八年的探索:

image.png

2. DAS 核心产品功能

目前, DAS 在接入环境层面,支持阿里云数据库、阿里云自建数据库、本地自建数据库和其它云厂商数据库,而在接入数据库的引擎类型上, DAS 支持主流的关系型数据库、包括 MYSQL、PostgreSQL、PolarDB、Redis、MongoDB等等。

其中涉及到的产品功能如图,其功能包括但不限于自感知中的基于机器学习等的7x24小时实施异常检测、自修复能力中的自动 SQL 限流(自动 SQL 限流可以快速定位到异常 SQL ,自动触发限流操作,实现五分钟恢复正常)和自动弹性伸缩(实时检测数据库的容量水位,根据业务的真实情况定制策略,在数据库资源达到瓶颈时无需人工干预就可以自动进行扩容,以保证用户业务的平稳性)、自优化中的自动 SQL 优化,(有别于传统的单 SQL 优化检测,该功能会综合考虑负载,更好的进行优化)以及自运维中的智能压测等等,最终目的是解决用户在使用过程中常遇到的问题。如一些用户核心痛点: SQL 问题、负载问题、空间问题、容量评估问题等等。

image.png


三、 MySQL 性能性能调优之负载问题

1.异常7*24实时检测

(1)面对负载问题,第一步要做到的就是及时发现异常, DAS 基于 AI 预测和实时检测以及实时负载特征检测的方式,对数据库进行持续跟踪,相对于传统方式, DAS 能够更加及时的发现数据库的异常。现实生活中常见的比如毛刺、周期、趋势、均值偏、新增等特征, DAS 的异常检测都能快速正确的识别到,并且 DAS 支持多种特征叠加的识别,在识别出异常之后, DAS 会基于全局分析以及后续的异常恢复、优化等等。

(2)相对于传统规则, DAS 有以下优势:

①范围更加广泛。不仅限于监控指标,还包括了 SQL 信息、日志信息、锁信息和运维事件等等

②可以快速检测到异常 SQL ,实施性大大超越传统方式

③具备周期性、趋势、均值偏移等的基于 AI 的异常特征检测技术,有提前预测的能力,并且可以自动识别特征,从而自己适用于各种业务场景。

详情可见下图:

 image.png

image.png

2.自动 SQL 限流(帮助业务快速恢复正常)

如图:

image.png

image.png

解析:在异常检测检测到异常事件之后,会根据实际发生的异常事件,采集出现异常时的活跃会话和全部信息,进行根因分析,定位造成异常的 SQL 。

异常的 SQL 通常分为以下类型:

(1)阻塞型 SQL ,DAS能够通过分析实时会话,所等待和运行的事务。同时 DAS 还能分析和判断被影响的会话的数量和执行时间,如果被影响的会话比较多或者执行时间过长,则该异常无需通过自动限流 SQL 来解决,而是直接除去异常会话。

(2)资源消耗型 SQL 也就是烂 SQL ,在该场景中, SQL 的并发量可能不大,但是会消耗大量的 CBU、IO 或者是网络资源,并且会持续不断的被提交。

(3)流量型 SQL ,当大量的正常 SQL 在数据库中同时运行时,触发数据库的资源瓶颈,甚至导致查询时的响应时间都出现了异常。

如果自动 SQL 限流功能在实际中发现有上述情况的第二种和第三种,也就是资源消耗型 SQL 和 流量型 SQL 出现时,会自动提取这些 SQL 的特征,并在用户授权下对异常 SQL 进行限流,在自动限流过后, DAS 还会进行持续跟踪,若发现自动限流后数据库的负载并未降低,或者降低了但是流量与预估有偏差,则会有自动回滚的操作,并再次启用根因分析功能。

3.自动弹性伸缩

如果通过自动限流的功能仍然不能解决当前负载的问题,就应该考虑是否是因为突增的业务流量过大,从而导致了计算资源的不足,此时 DAS 会进一步的进行自动弹性伸缩的功能,来自适应于负载规格,以灵活的应对业务的变化,算法模型是 DAS 整个自动弹性伸缩服务的核心,它负责对实际的业务负载进行检测和容量规格进行计算,以解决扩容时机、扩容方式和规格选择等问题,目前, DAS 提供定时、基于用户设定预值和基于 AI 智能检测的三种弹性伸缩触发策略,输出数据库实例扩容建议,并在数据库实例性能达到触发条件时,对数据库进行扩容或者回缩的操作。

如图:

image.png

image.png

下图是双十一期间某自治服务的监控室的一个实际案例:

image.png

可以看到,业务流量不断上升,实例的 CPU 使用率不断飙高,并且达到了高负载的状态,此时 DAS 的弹性伸缩算法精确的识别出该实例的异常状态,于是自动的为实例加上了两个节点,实例的 CPU 使用率成功的降到了比较低的水位,当这个状态持续到两个小时之后,用户的业务流量仍持续上升,并且第二次的触发DAS 的弹性伸缩功能, DAS 将实例的规格从4到8 GB 升级到8到16 GB,并平稳的持续了17个小时,帮助用户顺利度过了业务高峰期。


四、性能负载问题解决方案演示 Demo

1. RDS 自治场景演示

RDS 数据库具备“自动 SQL 限流”、“自动 SQL 优化” 功能,高可用版本下更可支持“自动空间扩展”、“自动性能扩展”功能,当达到上述自定义场景时, RDS 自治能力启动。实例活跃会话, CPU等性能指标正常,数据库正常运转。

(1)第一阶段实例自我修复

21时47分,实例出现异常, CPU 开始飙高并逐渐达到100%,活跃会话、慢查询数量急剧飙升。数据库处理能力急剧下跌,业务已处于不可服务状态。如下图:

image.png

21时48分, RDS 检测到了该异常,并自动进行了根因分析,迅速定位到异常 SQL。

21时50分, RDS 启用了自动限流干预。

21时51分,慢查询、活跃会话数量下降, RDS 数据库处理能力恢复,业务恢复正常。

自此, RDS 通过 SQL 自动限流功能完成了第一阶段实例的自我修复,保证了业务的正常运转。

(2)第二阶段实例自适应负载规格

RDS 对 SQL 进行自动优化分析,给出诊断结果与优化建议。如下图:

image.png

慢查询限流后,业务虽然恢复正常,但此时流量仍持续加大,实例承载了原流量数倍压力后, CPU 超过安全范围。

22时05分, RDS 根据 CPU 负载情况,自动完成实例升配,适应新的业务负载流量。

RDS 基于实例负载,完成规格的自适应推荐,实现容量的动态规划。

image.png

自此, RDS 通过自动弹性扩容完成了第二阶段的实例自适应负载规格的变配。


五、MySQL 性能调优之 SQL 优化问题

数据表明,目前约80%的数据库性能问题是可以通过 SQL 优化手段来解决的,SQL 诊断优化是提高数据库性能和稳定性的关键技术之一。

1.单 SQL 优化诊断

单 SQL 优化诊断是优化推荐算法的抉择之路,其本质是创造条件,发现可以提升的点,比如 SQL 改写,创造 SQL 索引等。

而单 SQL 优化诊断也面临许多挑战,首先应该考虑采用哪种优化推荐算法,是选择基于规则的方式还是基于代价模型,其次,针对 What-if 内核缺失能力的数据库,应该如何做,以及如何构建一个覆盖率足够的测试案例库,用于回滚验证等

下图是传统商业化最优索引推荐引擎架构:

image.png

可以看到,在 SQL 导入之后,对其进行分析,生成候选索引,然后通过数据库服务器 What-if 能力获取这些候选索引的代价再进行评估,最后进行索引合并择优,这就是传统数据库中基于代价同步的最优索引推荐流程。

但是这种传统的方式有一定的缺点:首先,在 MySQL 中,What-if 的功能是缺失的;其次,在 MySQL 中并没有完整的统计信息可用。

因此,DAS 需要对上述进行优化,如图:

image.png

在 SQL 引擎和数据库服务器中加上一个内置优化器,通过内置优化器来提供 What-if 能力,在内置优化器中,,阿里会在物理基础上进行代价评估,然后从中选择,与传统数据库优化器的不同点是,加入了候选索引、 SQL 改写等考量,并且优化器是基于统计信息进行代价计算的,因此在统计信息上,采用了自适应采用方法,实现了在指定误差范围内的自适应的数据采集的能力,而且整体的采集过程不会对目标数据库的实例造成太大的压力。

此外,为了保证 SQL 引擎覆盖的足够全面,我们还分析了影响 SQL 优化的关键因素,并通过算法分解成多维的特征,之后借助阿里丰富的业务场景,收集线上的全量 SQL 和全量烂 SQL 数据并通过特征自动标注算法,呈现了海量测试案例数据库,助力以后的分析部门进行复盘。

2.基于 Workload 的全局 SQL 优化

全局 SQL 优化,是以 Workload 负载为优化单位,综合考虑了 Workload 中影响特征,实现了负载整体性能最大化、空间资源消耗最小化的一种能力。

如图:

image.png

DAS 会从全量 SQL 中抽取 Workload 负载情况,通过全局 SQL 优化引擎,在考虑存储 S 以及成本 C 的约束条件下,输出需要创建的新索引,需要改写和需要删除的旧索引,并提供 SQL 改写建议

以下图为例:

image.png

表格里是一些简单的语句和 Workload 特征,包括 INSERT 和 SELECT语句,在每个时间段的执行次数,如果从单 SQL 优化的角度,推荐的是 SQL2到 SQL6,但是如果从 Workload 全局优化的角度,只推荐 SQL2和SQL5。

在上述过程中,整个过程使整体的 RT 下降了14.45%,索引空间节省了50%

3.基于智能压测的闭环流程

优化流程闭环,生成基于智能压测的收益报告

自动优化流程闭环将人工的被动式优化转变为以智能化为基础的主动式优化,下图展现了整个 SQL 闭环优化的几个关键节点:

image.png

首先是对指标和 Workload 进行持续的异常跟踪,从而及时的发现异常点,之后通过全局决策中枢,输出全局优化建议,如果用户开启了自动优化功能,则会在业务低峰期窗口期间内进行优化操作,并且在未来24小时内持续跟踪优化结果,形成收益报告推送给用户;如果用户没有开启自动优化功能,则会将优化建议推送给用户,以征求采纳意见。

自动优化闭环体系希望能从规模性、安全性、精准性和全面性持续提升,以更好的服务云上数据库用户。


六、SQL 优化问题解决方案演示 Demo

如图:

image.png

数据库自治服务 DAS 提供了数据库自感知、自修复、自优化、自运维及自安全的云服务。

下面介绍 DAS 的 SQL Review 和性能参数调优能力

首先是 SQL Review 、SQL 优化及优化效果验证的能力:

image.png

SQL Review 基于全局的 Workload 产出索引优化和 SQL 优化建议,并在对比库上进行效果验证,产出效果对比报告。

第一步,新业务上线或业务发生变更后,新的 SQL 或新的流量进入的数据库,通过性能趋势页面,可以清晰的看到数据库负载发生了变化。

第二步,在 SQL 洞察页面查看此段时间内执行的所有 SQL 数据,系统识别出有大量执行效率不佳的 SQL ,虽没有达到慢 SQL 值,但存在更优索引组合可提升执行效率。

第三步,进入 SQL Review 页面,点击发起诊断,选择待诊断的目标库和诊断时间段,待诊断结束后,查看诊断报告,包含全局诊断建议、 TOP100流量表、相关 SQL 、TOP SQL 等信息。

第四步,在将这些优化建议应用前,可以通过如下方式验证优化效果:点击验证优化效果按钮,选择待验证的时间段,并输入源实例高权限账号密码,完成任务创建,验证任务会自动创建对比实例,并在对比实例上面创建待验证索引,然后回放源实例的业务流量,最后生成性能对比报告,待验证任务结束。

查看对比报告,包含:

1采纳每个诊断建议带来的收益情况

2整体上各个模板的性能变化情况

3每个模板的性能变化对比

如图:

image.png

可以看到,在该演示实例上,采纳 SQL Review 的优化建议后,整体 SQL 的平均 RT 下降67%,,与单 SQL 优化建议相比,索引空间减少27%。


七、数据库的常见问题

1.空间问题

通过 DAS 的空间分析功能,用户可以解决以下问题:

(1)存储容量不足

解决方法:存储自动扩容

(2)表空间碎片

解决方法:表空间碎片自动回收

(3)重复索引

解决方法:重复索引自动删除

(4)无流量表/无流量索引

解决方法:无流量表/无流量索引自动删除

(5)临时表空间异常增长

解决方法:临时表空间异常增长根因定位

2.容量评估问题

(1)典型需求场景

①上云搬站

②新业务上线

③业务大促

④性能瓶颈测试

⑤数据库版本升级

⑥架构升级

(2)问题与挑战

①真实业务流量难获取

②事务顺序难保障

③使用复杂成本高

(3)为了解决这些问题,DAS 的个性化智能压测服务可以提供:

①低负载捕获真实业务流量

②保障事务的顺序

③支持写流量回放压测

④开箱即用

具体流程如图:

image.png

3.安全问题

针对如今面临的数据库数据丢失等安全问题, DAS 能够提供:

(1)实时检测:对各类攻击和威胁进行实时检测,及时发现安全隐患

(2)高危操作识别:通过智能算法、海量模型,智能识别高危操作

(3)异常访问来源识别:自动识别新增或者异常的访问来源

从而有效地保障数据库安全

详情可见下图:

image.png


八、小结

目前, DAS 已平稳运行三年多,覆盖数十万数据库实例,能够做到一分钟发现,五分钟定位,十分钟恢复的,已完成4900万慢 SQL 的自动优化等。详情可见下图:

image.png

当然, DAS 还在不断地构建自我的学习能力,例如异常的自动标注、异常的自动优化等,DAS 会不断发展,不断进行数据库优化。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
关系型数据库 MySQL Apache
mysql5.7 本地计算机上的mysql 服务启动后停止 的问题解决
mysql5.7 本地计算机上的mysql 服务启动后停止 的问题解决
11 0
|
25天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
25 1
|
1月前
|
SQL 监控 关系型数据库
MySQL性能调优:监控和优化
MySQL性能调优:监控和优化
57 1
|
2月前
|
监控 安全 关系型数据库
在规划阿里云RDS跨区迁移资源和服务可用性
在规划阿里云RDS跨区迁移资源和服务可用性
261 4
|
3月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
50 0
|
3月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
49 0
|
3月前
|
关系型数据库 MySQL 网络安全
主机无法访问远程mysql服务
主机无法访问远程mysql服务
48 0
|
1月前
|
弹性计算 关系型数据库 MySQL
阿里云ECS使用docker搭建mysql服务
阿里云ECS使用docker搭建mysql服务
152 1
|
2天前
|
存储 SQL 关系型数据库
不停止MySQL服务增加从库的两种方式
不停止MySQL服务增加从库的两种方式
|
1月前
|
关系型数据库 MySQL 数据库
使用Docker搭建MySQL数据库服务
本文介绍了如何使用Docker搭建MySQL数据库服务。首先,通过`docker pull mysql:5.7`命令拉取MySQL 5.7镜像,然后运行`docker run`命令创建并启动容器。接着,使用`docker exec`进入容器并创建MySQL用户及授权。最后,通过MySQL客户端如Navicat测试连接,验证安装成功。Docker简化了MySQL的部署和管理,确保环境一致性。
37 0