MySQL 分支-AliSQLSQL 的性能优化实战|学习笔记(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习 MySQL 分支-AliSQLSQL 的性能优化实战

开发者学堂课程【MySQL 实战进阶MySQL 分支-AliSQLSQL 的性能优化实战】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/83/detail/1311


MySQL 分支-AliSQLSQL 的性能优化实战


3、高效查询缓存

研发了高效的查询缓存,MySQL 本身也有这个查询缓存。为什么说重新研发了,在8.0基础上做的,MySQL 8.0查询缓存去掉了。

image.png

左边的图没有缓存的时候,一个 SQL 语句进来要经过解析、检查权限、优化器对 SQL 进行分析,得出最好的执行计划,进行执行。执行过程中,可能涉及事务引擎,还可能访问存在磁盘上的数据,链路是非常长的。经过查询缓存命中的时候,这个过程变得非常简单。查询缓存是对结果集的缓存,所以称之为 consistent result cache,跟事务机制结合在一起,从缓存查出来的数据满足事物的隔离级别。在 4C8G 的测试,有100%的提升。测试了三个配置,第一个是查询缓存关闭的情况下,关闭的时候跟最高的比一倍不止。中间橙色的是 MySQL 原来的 cache,原来的 cache 涉及到成就在新的硬件上,起到了相反的作用,这也是8.0把它去掉的原因。但是解决其中最关键的问题涉及一个独到性的机制,缓存的更新维护机制,能够达到100%的性能提升。现在查询缓存可以自己开启,开启的参数都可以在控制台上修改,直接启用。

4、多块读

通过非常深入的代码阅读和分析,发现 MySQL 在处理 ra 的时候,是一个块一个块串行的去读。比如说要查询一张大表或 Automatic 的一张大表,对这张表加索引的时候,一块读完了再读下一块,这个过程是非常浪费时间的。在读第一个块的时候,把后面连续的块也读进来,所以称为多块读。也做了一个测试

image.png

左边的图对一张十个 G 的表采用原来的机制,需要115秒;右边使用多块读的技术,在 AIO 异步关闭的情况下,可以从115秒提升到67秒,当它打开的时候,提升效果会更明显,从115秒提升到43秒。最大的查询 select*from 一张表,查询大量的数据时会非常有效,所有的 DDL 也有效。

 

七、内核-稳定性

在稳定性方面的改进,也分为四个点。

1、快速 DDL

在业务高的时候,DDL 为什么抖动很大?在 MySQL buffer pool 里,数据块是很多表或索引的数据是混合存放在 buffer pool 里面。做 DDL 的时候,要把 buffer pool 整个扫描一遍,扫描的效率是非常低的。有很多操作可以引起 buffer pool 的扫描,所有的 DDL、所有的对表进行重组的命令都会有这个过程,这个过程非常慢。所以在 buffer pool 里加入一个新的导航机制,可以快速的定位到哪些 buffer pool 是操作对象的,扫描效率会大大提升。下图是一个测试场景

image.png

24 GB Buffer PoolBuffer pool 一次是四个,128张表,每张表是200万条数据,这个过程中做 export tables 操作,这个操作会把buffer pool 扫描一遍。如果没有快速 DDL 特征的时候,需要80.51秒;有 DDL 这个特性以后,只需要0.34秒,这个特性也是在 RDS 56/57/80 上全部默认开启,是一个非常流行的全网功能。

2、性能监控插件

image.png

数据库经常遇到一些问题需要分析,这个时候实时性能数据非常重要。一般来说会 MySQL show performers metrics 查看,但是 show performers metrics 执行成本非常高,很难保证每秒钟性能数据的输出,所以把性能数据的收集做在内核里。从内核角度可以直接读取内存位置,然后把数据写到文件中,这样可以做到每秒钟一个数据,不管负载怎样,都会非常准时。

这些数据有两种存储方式,第一种是存在文本文件里,采用三个文件,每个文件到100M切换,可以对过去的性能信息进行回溯。另外还提供了一个内存的表,表中查询的时长是可以定义的,可以直接访问这张表。上图右上角是用graefner 做的曲线,对 selectinsertupdatedelete 等查询语句用曲线画出来。在分析性的问题的时候,可以用同一份数据进行交流,这样会加快问题分析的速度。

3BP 动态伸缩

buffer pool 进行调节的时候扩大没有问题,缩小会有很大问题。为什么要调buffer poolMySQL 使用内存分为两块,一块是数据内存,数据为了加速访问放在buffer cache 里;还有一块是程序,每个会话都会用内存。当硬件数据多的时候,buffer pool 要调小一些;当硬件数据小的时候,buffer pool 调大一些。动态的 buffer pool 机制能够更好地利用到内存,所有我们需要解决 buffer pool 动态缩小的问题。下图是一个测试

image.png

绿色的线是原生的 MySQL,在做 buffer pool缩小的过程中,它的抖动非常厉害,有很多次可能会跌到底。对这个问题进入深入的分析,进入 pool,之后再测试的时候看蓝色的线,虽然也有抖动,但是这个抖动的幅度小很多,最坏的情况跌20%。这个测试是在最忙的时候做的,BP动态伸缩技术加上其他业务相对不太高的时间段做的完全没有影响。

4、页面淘汰优化

MySQL 在内存比较紧张的时候,可能有单页淘汰。当要读一个数据块进入,在内存找不到空的数据页的时候,要淘汰一个数据页,会逐个淘汰,效率非常低。做了一个机制改进,把淘汰单个页的概率降到最低,提升了淘汰页面的效率,没有单页淘汰,最少是采用16页的淘汰,这样性能得到提升。下图中有四条线,两种场景,

image.png

上面两条线是测试 stability,没有打开范围查询的情况。绿色的线是页面优化之后的线,比没有优化之前提升了20%。下面两条线是打开范围查询的情况下,会查询比较多的记录,QPS 低一点,提升幅度在15%20%。数据库数据大于内存,是一种常态,这方面的优化是一个非常大的提升,可以用更低的资源配置得到一个更高的CPU,这非常节约成本的事情。

 

八、内核-安全性

1、安全性方面的改进有三点,有一个点不深入讲解,是对国密算法的支持。数据安全的风险很大,国家对加密算法有要求,有自己的标准,所以增加了对 SM4 算法的支持,在 TDE 功能里面,可以选择用 SM4 算法进行加密。

2、防删表保护

image.png

在阿里云里面有几届数据库被认为删除的事件。把删除表的权限收到某个用户的指定账号,通过管控平台才能进行删除数据,或者要求删除操作只有在本地链接上才能操作,通过不同的级别可以起到不同的安全效果。从保护内容上来说有两类,第一类是数据类,包括 Drop TableTruncate TableDrop PartitionTruncate ParititionExchange PartitionDrop Tablespace ,还有一些对存储过程试图变的保护,选用这个级别的时候,可以禁止删除视图的定义,禁止删除存储过程,禁止删除触发器,甚至可以禁止删除 binlog。丰富多彩的结合可以起到很好的防数据保护的作用,可以确保数据库的运行安全。

3DDL 回收站

image.png

 

在数据库8.0里,有 recycle bin 保留的数据库名字,recycle bin 字面的意思是回收站。在 AliSQL 8.0里,开启回收站功能之后,删除的时候就不是直接把这些表删掉,而是先把这些表移到回收站中。回收站概念非常常见,WINDOWS桌面就有回收站,不用的文件可以迁移到回收站,后续还可以找回。

但是对回收站的权限做了特别的控制,需要特别的权限才能真正获取这个表,一般来说是没有权限的,需要更高的权限,通过这样一个两级的机制,可以有效的防止表被删掉。或是不想开启防删表策略,可以开启回收站,发生错误的删表的时候,可以从回收站快速的找回数据,这是讲的两个安全的功能。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
14天前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
26 2
zabbix agent集成percona监控MySQL的插件实战案例
|
21天前
|
SQL 关系型数据库 MySQL
干货!python与MySQL数据库的交互实战
干货!python与MySQL数据库的交互实战
|
24天前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
28 2
|
28天前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
1月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
1月前
|
存储 关系型数据库 MySQL
"深入探索MySQL临时表:性能优化利器,数据处理的灵活之选"
【8月更文挑战第9天】MySQL临时表专为存储临时数据设计,自动创建与删除,仅在当前会话中存在,有助于性能优化。它分为本地临时表和全局临时表(通过特定逻辑模拟)。创建语法类似于普通表,但加TEMPORARY或TEMP关键字。适用于性能优化、数据预处理和复杂查询,需注意内存占用和事务支持问题。合理使用可大幅提升查询效率。
56 2
|
30天前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
233 0
|
1月前
|
存储 关系型数据库 MySQL
MySQL中的DISTINCT与GROUP BY:效率之争与实战应用
【8月更文挑战第12天】在数据库查询优化中,DISTINCT和GROUP BY常常被用来去重或聚合数据,但它们在实现方式和性能表现上却各有千秋。本文将深入探讨两者在MySQL中的效率差异,结合工作学习中的实际案例,为您呈现一场技术干货分享。
167 0
|
21天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~

热门文章

最新文章