高性能mysql(1)
高性能mysql
-
第一章——Mysql架构与历史
-
三层架构
-
第一层——连接层
- 负责登陆、连接的安全校验认证等
-
第二层——服务器层
-
所有核心功能服务都在这一层(解析、分析、优化、缓存、内置函数等等)
-
并发控制
- 读写锁
- 共享锁(读锁)
- 排他锁(写锁)
- 锁粒度
- 表锁:开销小,锁粒度大,并发低,死锁可能性低
- 行级锁:开销大,锁粒度小,并发高,死锁可能性高
- 读写锁
-
事务(一组原子性的SQL查询,或者说一个独立的工作单元),满足ACID
-
Atomicity(原子性)
- 事务是不可分割的最小工作单元,事务中的操作要么全成功要么全失败
-
Consistenct(一致性)
- 数据库总是从一个一致性的状态转换到另外一个一致性状态
-
Durability(持久性)
- 一旦事务提交,则其所做的修改就会永久保存在数据库中
-
Isolation(隔离性)
-
一般事务提交之前对其他事务不可见
-
隔离级别
隔离级别 脏读可能性 不可重复度可能性 幻读可能性 加锁读 Read Uncommitted(读未提交) 是 是 是 否 Read Committed(读已提交) 否 是 是 否 Repeatable Read(可重复读) 否 否 是 否 Serializable(可串行化) 否 否 否 是 - 脏读:事务可以读取未提交的数据
- 不可重复度:两次执行相同查询结果不同
- 幻读:当某个事务服务某个范围内的记录是,另外一个事务又在该范围内插入了新的记录,之前事务再次读取该范围记录时,会产生幻行
-
死锁(死锁检测、死锁超时机制)
- 检测到死锁返回错误
- 查询时间达到锁等待超时设定时间后放弃锁请求(不太好)
- 将持有最少行级排他锁的事务进行回滚(比较好)
-
事务日志
- 预写式日志
- 修改数据时,存储引擎只修改表的数据的内存拷贝,再把修改行为记录以追加的方式持久到硬盘上的事务日志中。事务日志持久以后,内存数据在后台会慢慢刷回内存
-
-
-
-
多版本并发控制(MVCC)
- 通过保存数据在某个时间点的快照来实现的。可看作是行级锁的一个变种,在很多情况下避免了加锁操作,开销更低。非阻塞读,写操作只锁定必要的行
- 通过在每行记录后面保存两个隐藏列实现,一个保存了行的创建时的系统版本号,一个保存了行的过期(删除)系统版本号
- 只在Committed Read和Repeatable Read隔离级别起作用,下面以InnoDB介绍其工作流程
- 查:只查版本早于当前版本的数据行;行的删除版本要么未定义,要么大于当前事务版本号
- 增:新插入行以当前系统版本号作为行版本号
- 删:删除行以当前系统版本号作为行删除标识
- 改:插入一行新记录以当前系统版本号作为行版本号;同时保存当前系统版本号到原来的行作为行删除标识
-
-
-
第三层——存储引擎层
- 各种存储引擎(社区偏多、商业偏少)介绍、区别和多版本基准测试
-
-
本文来自博客园,作者:orangeScc,转载请注明原文链接:https://www.cnblogs.com/ashScc/p/16003496.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了