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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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
相关文章
|
20天前
|
存储 缓存 负载均衡
mysql的性能优化
在数据库设计中,应选择合适的存储引擎(如MyISAM或InnoDB)、字段类型(如char、varchar、tinyint),并遵循范式(1NF、2NF、3NF)。功能上,可以通过索引优化、缓存和分库分表来提升性能。架构上,采用主从复制、读写分离和负载均衡可进一步提高系统稳定性和扩展性。
36 9
|
2月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
62 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
28天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
158 1
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
63 5
|
2月前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
92 1
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
67 1
|
29天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
67 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL性能优化实践指南
【10月更文挑战第16天】MySQL性能优化实践指南
74 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL性能优化指南
【10月更文挑战第16天】MySQL性能优化指南
58 0
|
19天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1