RDBMS|青训营笔记

41 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第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是物理日志,记录的是页面的变化。