MySQL-深入了解RDBMS | 青训营笔记

38 阅读2分钟

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

SQL核心模块

image.png

SQL引擎

解析器(parser)一般分为词法分析、语法分析、语义分析等步骤;词法分析分析各个词的意义;语法分析将词组成句子;语义分析理解含义

Optimizer,优化器,将sql优化成实现代价更低的结构。,比如有基于规则的优化,条件化简,表连接先对小表进行连接,scan优化;基于代价的优化,考虑io,cpu,net,mem等

executor,执行器,经典模型火山模型,每个Operator算子调用Next操作,访问下层Operator,获得下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层。优点是每个算子独立抽象实现,相互之间没有耦合,逻辑结果简单;缺点是每计算一条数据有多次函数调用开销,导致cpu效率不高。向量化模型,每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch。优点:函数调用次数降低为1/N,CPU cache命中率更高,可以利用cpu提供的SIMD机制。编译执行,LLVM动态编译执行技术

存储引擎 - InnoDb

image.png

内存的缓存设计以及磁盘的数据库元信息、真实数据以及事务的一些日志

Buffer Pool

image.png 根据HashMap找到对应的桶,LRU

Page(16kb)

image.png 二分查找

B+ Tree

索引查询

事务引擎

原子性和undo log,undo日志是逻辑日志,记录的是数据的增量变化,除了回滚还保证了mvcc的功能 隔离性和锁,mvcc的意义,读写互不阻塞,降低死锁概率,实现一致性读; 一致性,业务层 持久化,redo log,方案:事务提交前页面写盘,随机IO和写方法大;WAL,redo log 物理日志,记录页面变化,

实践

大流量——Sharding,业务数据进行水平拆分,代理层进行分片路由

流量突增——扩容,扩容DB物理节点数量,binlog,利用影子表进行压测,代理连接池,业务侧预热连接池,代理侧预热

连接池,代理侧支持连接队列;

3az高可用,三机房部署,机房级别容灾,机房级别流量调度,proxy:读写分析,分库分表,限流,流量调度;监控报警:实时监控集群运行状态,提前上报集群风险

ha管理,ha服务监控,配置热更新,屏蔽读节点