MySQL是怎样运行的从根儿上理解MySQL(小孩子4919)

书: https://pan.baidu.com/s/1A6ZLSPMbCiZ-L4eRucUvXQ?pwd=kt7i

一、基础架构

  1. “MySQL服务端分为Server层(连接器、分析器、优化器、执行器)和存储引擎层(InnoDB、MyISAM等),插件式架构允许动态切换引擎。”
  2. “一条SQL的执行流程:连接→查询缓存(8.0已移除)→解析→优化→执行→返回结果。”

二、InnoDB存储引擎

  1. “InnoDB的数据以页(16KB)为单位存储,页是磁盘I/O的最小单位,通过B+树索引组织数据。”
  2. “缓冲池(Buffer Pool)是内存中的写缓冲,采用LRU算法管理热数据,减少磁盘访问。”
  3. “redo log(重做日志)保证事务持久性,写日志顺序IO比随机写数据页更快,WAL(Write-Ahead Logging)机制的核心。”

三、索引原理

  1. “B+树索引的叶子节点存储完整数据(聚簇索引)或主键值(二级索引),非叶子节点仅存键值和指针。”
  2. “最左前缀原则:联合索引(a,b,c)生效条件需包含最左列(如a=1 AND b>2),跳跃扫描是例外优化。”
  3. “索引下推(ICP):5.6+版本允许在存储引擎层过滤数据,减少回表次数。”

四、事务与锁

  1. “ACID特性通过undo log(原子性)、redo log(持久性)、锁(隔离性)、MVCC(一致性)实现。”
  2. “MVCC(多版本并发控制)依赖隐藏字段(trx_id、roll_pointer)和ReadView实现快照读,避免读写阻塞。”
  3. “锁类型:行锁(Record Lock)、间隙锁(Gap Lock,解决幻读)、临键锁(Next-Key Lock = Record+Gap)。”

五、性能优化

  1. “EXPLAIN输出解读:type列(ALL→index→range→ref→const为性能升序),rows预估扫描行数。”
  2. “覆盖索引(Covering Index)指查询列全部在索引中,避免回表,如SELECT id FROM table WHERE name=?’。”

六、日志系统

  1. “binlog(逻辑日志)用于主从复制和数据恢复,三种格式:STATEMENT(语句)、ROW(行变更)、MIXED。”
  2. “两阶段提交保证redo log与binlog的一致性:Prepare阶段→写binlog→Commit阶段。”

七、高可用设计

  1. “主从复制原理:主库写binlog→从库I/O线程拉取→SQL线程重放,延迟问题可通过GTID或半同步缓解。”

八、故障排查

  1. “死锁检测:SHOW ENGINE INNODB STATUS查看LATEST DETECTED DEADLOCK,分析事务等待链。”

九、设计规范

  1. “大表ALTER TABLE操作推荐使用pt-online-schema-change工具,避免锁表阻塞。”

十、底层机制

  1. “InnoDB的行记录格式:COMPACT(5.1默认)、DYNAMIC(5.7+,溢出列存储更高效)。”
  2. “自增主键并非连续增长:事务回滚、批量插入等场景可能导致空洞。”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注