【day18】MySQL - 深入理解RDBMS | 青训营笔记

92 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 18 天

课程1-RDBMS 基本情况介绍

RDBMS:关系型数据库

事务:由一组SQL语句组成的一个程序执行单元(Unit),满足ACID特性

ACID:

a.原子性(A)

b.一致性(C)

c.隔离性(I)

d.持久性(D)

网状数据库->层次模型->关系模型

课程2-RDBMS 关键技术分析

SQL引擎

Parser:词法分析、语法分析、语义分析

Opimizer:RBO【基于规则的优化】、CBO【基于代价的优化】

Executor:

  1. 火山模型;优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单;缺点:没计算一条数据有多次函数调用开销导致CPU效率不高。
  2. 向量化:优点:函数调用次数降低为1/N;CPU cacche命中率更高;可以利用CPU提供的SIMD
  3. 编译执行:将所有逻辑代码写到一个代码中,使用LLVM动态编译执行技术。

存储引擎-InnoDB

BufferPool

B+树做索引【可以从叶子结点进行范围查询】

事务引擎

Automatic与Undo Log:逻辑日志,记录的是数据的增量变化。利用Undo Log可以进行事务回滚

isolation与锁:有隔离级别;MVCC含义:读写互不阻塞,降低死锁概率,实现一致性读

Durability与Redo Log:保障事务结束后,对数据的修改的永久保存;

方案1:事务提交前页面写盘,存在随机IO,写放大的问题

方案2:WAL【Write-ahead-logging】;redo log是物理日志,记录页面的变化,保证事务持久化;如果数据写入磁盘前发生故障,重启MYSQL之后会根据redo log重做

课程3-RDBMS 企业实践案例
  1. 解决大流量:sharding

问题背景:单机点写容易成为瓶颈;单机数据容量上限

解决方案:业务数据进行水平拆分【数据按hash进行分布式存储】;单代理层分片路由【对用户来说看起来是单点服务】

实施效果:数据库写入性能的线性扩展;数据库容量线性扩展

  1. 流量突增:扩容

问题背景:活动流量上涨;集群性能不满足要求

解决方案:扩容DB物理结点数量;利用影子表进行压测

实施效果:数据库集群提供更高的吞吐;保证集群可以承担预期流量

  1. 流量突增:代理连接池

问题背景:突增流量导致大量建立连接;大量建立连接导致负载变大;延时上升

解决方案:业务侧预热连接池;代理测预热连接池;代理池支持连接队列

实施效果:避免DB被突增的流量打死;避免代理和DB被大量建连打死

  1. 稳定性;可靠性:3AZ高可用

三机房部署:在不同城市建立独立的机房;机房级容灾;机房级别流量调度

Proxy:通过代理分布请求;读写分离;分库分表;限流,流量调度

监控报警:实时监控集群运行状态;提前上报集群风险

  1. 稳定性;可靠性:HA【高可用】管理

问题背景:db所在机器异常;db结点异常宕机

解决方案:ha服务监管,切换宕机结点;代理支持热配置加载;代理自动屏蔽宕机读结点