【后端修行之MySQL】MySQL架构及基本名词解释

本文用于记录苦啃《高性能MySQL(第3版)》后,个人认为有价值的笔记,核心内容均围绕标题展开。既做一个学习的记录,同时也做一个沟通交流,欢迎各位大佬互动~

MySQL逻辑架构

分层架构:上层是服务器层的服务和查询执行引擎(核心功能:查询解析、分析、优化、缓存以及内置函数(日期,时间,加密函数和数学函数)),下层是存储引擎(数据的提取和存储)。

服务器通过API与存储引擎进行通信。

连接管理与安全性

连接管理:每个客户端连接都会在服务器进程中拥有一个线程,这个连接中的查询只会再这个线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。

安全性:客户端(应用)连接数据库时,服务器需要对其进行验证(基于用户名,原始主机信息和密码)。 此外,连接成功还会进一步验证客户端是否具有特定的查询权限。

优化与执行

MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化(包括:重写查询、决定表的读取顺序,以及选择合适的索引)。以上过程可以通过关键字提示(hint)优化器,也可以请求优化器解释(explain)优化过程的各个因素。

优化器不关心表使用的执行引擎,但存储引擎对于优化查询是有影响的(例:某种引擎的索引,对特定的查询有优化)。

对于SELECT语句,解析查询前,服务器会检查缓存,看是否可以不再执行解析查询相关操作。

并发控制

        读写锁

读锁,共享锁,互不阻塞,多个客户同一时刻读取同一资源,互不干扰。

写锁,排他锁,相互阻塞,一个写锁会阻塞其他写锁和读锁。

        锁粒度

锁策略,解决锁的开销(锁操作:获得,检查解除,释放)和数据安全性之间的平衡问题。

表锁:锁定整张表,会阻塞其他用户对该表的读写操作。

行级锁:最大成都支持并发处理,但是增加了锁的开销。存储引擎层实现。

事务

事务,一组原子性的SQL查询,一个独立的工作单元。

特性:ACID

Atomicity,原子性。事务是最小的工作单元,所有操作要么全部提交成功,要么全部失败回滚。

Consistency,一致性。数据库总是从一个一致性状态转换到另一个一致性状态。

Isolation,隔离性。事务在未提交之前,对于其他事务是不可兼得。

Durability,持久性。事务一旦提交,所作操作就会被永久保存到数据库。

        隔离级别

READ UNCOMMITTED,未提交读。事务的修改未提交,其他事务也可见。

READ COMMITTED,提交读/不可重复读。事务只能看见已提交事务所做的修改。但两次执行同样的查询,可能会得到不一样的结果。

REPEATABLE READ,可重复读。可以保证两次同样的查询,读取到同样的记录结果。但是无法解决幻读(读取某个范围的记录时,另外的事务对范围内插入新的记录),在此读取时会产生幻行。MySQL默认事务隔离级别

SERIALIZABLE,可串行化。强制事务串行执行,解决幻读的问题。在读取的每一行都加锁,这会导致大量的超时以及锁争用的问题。

        

        死锁

事务以不同顺序锁定资源,互相占用,导致恶行循环的现象。

可以通过死锁检测以及死锁超时机制(InooDB解决死锁的方法,将持有最少行级排他锁的事务进行回滚)

​​​​​​​        

        事务日志

事务日志可以提高事务效率。

使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为持久到硬盘的事务日志。

由于事务日志采用的是追加的方式,在磁盘上是顺序I/O,速度较快。不像数据修改,随机I/O需要在磁盘多个地方移动磁头,效率更高。事务日志持久化后,内存中被修改的数据在后台可以慢慢地刷回磁盘——预写式日志

​​​​​​​​​​​​​​        

        MySQL中的事务

自动提交(AUTOCOMMIT)。

在事务中混用存储引擎。如果混合使用事务型和非事务型表,在需要回滚时,非事务型的表就无法撤销。

​​​​​​​多版本并发控制MVCC

MVCC时行级锁的一个变种,避免了加锁操作,开销更低。

InonoDB的MVCC实现原理:

​​​​​​​MySQL中的存储引擎

        InnoDB存储引擎

支持事务和行级锁

采用MVCC来支持高并发,默认隔离级别:RR可重复读,通过间隙锁策略防止幻读。

基于聚簇索引简历,对主键查询有很高性能

支持热备份

​​​​​​​​​​​​​​        MyISAM存储引擎

不支持事务和行级锁

​​​​​​​​​​​​​​        其他引擎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值