《高性能MYSQL》逻辑结构-读书笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 高性能MYSQL笔记 1. MYSQL逻辑结构 MYSQL逻辑结构有三层,分别为  1. 连接/线程处理:实现连接处理,授权认证,安全等  2. 服务层:该层主要有缓存,解析,处理,优化以及跨存储引擎如存储过程,触发器,视图等  3. 存储引擎:主要负责数据读取和存储。

高性能MYSQL笔记

1. MYSQL逻辑结构

MYSQL逻辑结构有三层,分别为 
1. 连接/线程处理:实现连接处理,授权认证,安全等 
2. 服务层:该层主要有缓存,解析,处理,优化以及跨存储引擎如存储过程,触发器,视图等 
3. 存储引擎:主要负责数据读取和存储。根据服务器层提供的执行计划,进行语句的执行。

2. 并发控制

并发控制是当多个线程或者事务同时操作同一数据时,如何控制才能保证数据一致性。利用锁机制和事务特点保证数据一致性。

可按锁的粒度进行划分,可分为行级锁和表级锁。事务中不同隔离级别会有不同的锁策略。 不同隔离级别加锁策略 
行级锁:InnoDB和XtraDB支持。行级锁是建立在索引上,不是行记录。

事务

ACID:原子性,一致性,隔离性,持久性 
原子性:事务内要么全部成功提交,只要有一个执行失败,则会全部回滚。通过undolog实现原子性。 
一致性:保证事务修改前后整体数据保持一致。例子,用户A通过银行系统转账100元给用户B,这时需要确保用户B增加100元,而用户A需要保证减少了100元。 
隔离性:事务之间的可见性。通过锁机制实现隔离性。隔离级别有未提交读,已提交读,可重复读,序列化读。默认是可重复读。 
持久性:保证事务提交后,修改的数据会永久的保存在数据库中。通过redolog实现持久性。 
两阶段锁策略

一阶段锁策略:当事务开始前,会将所有的锁请求完,若其中一个锁不能阻塞,则所有锁将会等待。请求成功后,直到事务尾部会将所有锁释放。不会产生死锁的问题。因为锁时间相对较长,所以并发度不高。

两阶段锁策略:将事务分为加锁和解锁两个阶段。在加锁阶段,每条语句可以根据数据获取对应的锁,此时可以操作数据,但不能解锁。直到事务commit/rollback时才会解锁。加锁时间较短,所以并发度较高。但是会因为加锁的顺序不同导致产生死锁。 
参考:MYSQL-两阶段加锁协议

死锁:产生的原因是因为事务中加锁顺序不同。处理办法是持有较少行级排他锁进行回滚。

MVCC多版本并发控制:通过每行记录后面保存两个列存储创建和删除时的系统版本号(时间戳)。

3.存储引擎

创建表时,MySQL会在数据库子目录下创建一个同名.frm文件保存表的定义

InnoDB: 处理大量的短期事务, 通过间隙锁锁定查询涉及的行和索引中的间隙进行锁定,防止幻影行的插入, 基于聚簇索引创建表.通过一些机制和工具支持真正的热备份.一般优先考虑InnoDB存储引擎

MyISAM: 包括全文索引,压缩,空间函数,延迟更新索引键等特性,不支持事务和行级锁,崩溃后无法安全恢复.对于只读数据,表小可以忍受修复操作可以使用该引擎. 
如果要使用全文索引,建议用InnoDB加上Sphinx组合替换MyISAM

使用引擎考虑:事务,备份,崩溃恢复,特有特性 
日志型应用: MyISAM 或者Archive,因为开销低插入速度快更为适合 
对于大数据量需要建立数据仓库,Infobright和TokuDB是比较好的解决方案

原文地址 https://blog.csdn.net/Yoga0301/article/details/81837423
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
1月前
|
JSON 关系型数据库 MySQL
MySQL JSON数据存储结构与操作
通过本文的介绍,我们了解了MySQL中JSON数据类型的基本操作、常用JSON函数、以及如何通过索引和优化来提高查询性能。JSON数据类型为存储和操作结构化数据提供了灵活性和便利性,在现代数据库应用中具有广泛的应用前景。希望本文对您在MySQL中使用JSON数据类型有所帮助。
116 0
|
4月前
|
安全 关系型数据库 MySQL
揭秘MySQL海量数据迁移终极秘籍:从逻辑备份到物理复制,解锁大数据迁移的高效与安全之道
【8月更文挑战第2天】MySQL数据量很大的数据库迁移最优方案
797 17
|
5月前
|
SQL 关系型数据库 MySQL
Mysql:如何自定义导出表结构
通过以上方法,你可以灵活地自定义导出MySQL中的表结构,以满足不同的需求和场景。在进行操作的时候要注意权限问题以及路径问题,确保MySQL用户有权限写入指定的文件路径。在执行导出任务之前,还应确保你对数据库及其内容有足够的了解,以避免不必要的数据丢失或损坏。
93 1
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之要将MySQL同步到Doris,并设置整库同步,只变更库名、表名和表结构都不变,该如何设置
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
存储 关系型数据库 MySQL
|
6月前
|
SQL 关系型数据库 MySQL
mysqldiff - Golang 针对 MySQL 数据库表结构的差异 SQL 工具
Golang 针对 MySQL 数据库表结构的差异 SQL 工具。https://github.com/camry/mysqldiff
97 7
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
140 7
|
6月前
|
存储 算法 关系型数据库
【MySQL技术内幕】4.4-InnoDB数据页结构
【MySQL技术内幕】4.4-InnoDB数据页结构
130 1
|
6月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
113 3