这是我参与「第五届青训营」伴学笔记创作活动的第7天
ACID(事务)
定义
是由一组SQL语句组成的一个程序执行单元,需要满足ACID特性。
ACID
- 原子性(Atomicity):事务是一个不可在分割的工作单元,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
- 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
- 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
高并发: 高并发(High Concurrency)是指通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
高性能: 高性能是指程序处理速度非常快,所占内存少、CPU 占用率低。高性能的指标经常和高并发的指标紧密相关,想要提高性能,那么就要提高系统高并发能力,两者互相捆绑在一起.
高可靠/可用: 高可用性(High Reliability/Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性(一直都能用)。
RDBMS
SQL引擎
Parser解析器
一般分为词法分析、语法分析、语义分析等步骤
主要是将SQL语句解析为机器可以识别的语言,并且检查SQL语句的合法性
Optimizer优化器
分析目前的执行方案,选择一种执行成本最小的方案进行执行
- 基于规则的优化(RBO),如下:
条件简化
表连接优化
Scan优化
- 基于代价的优化(CBO)
一种查询有多种执行方案,CBO会选择其中代价最低的方案执行
Executor执行器
- 火山模型:逐层调用,逐层返回
优点:每个算子独立抽象实现,相互不耦合,逻辑结构简单
缺点:每计算一条数据有多次函数调用开销,CPU利用率不高
-
向量化 批量返回
-
编译执行
将所有操作封装到一个函数里,函数调用的代价大幅度降低。
事务引擎
- Atomicity原子性 与 Undo log
原子性主要靠Undo log来保证,若事务执行中出现异常,利用Undo log将数据库回退到之前的状态
Undo log是逻辑日志,记录的是数据的增量变化。利用Undo log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制,解决读写冲突和一致性读的问题。
- Isolation 与 锁
隔离性:各个事务之间相互独立,不会被互相干扰。
- Durability 与 Redo Log
持久性主要靠Redo log来保证,当数据库在写入数据之前出现宕机,重启mysql后会根据Redo Log进行恢复
Redo log是物理日志,记录的是页面的变化。