InnoDB Buffer Pool 与索引

共 27 题
#

1. Buffer Pool 的 LRU 改进,midpoint insertion、young/old 区?

A 新页先插入 young 与 old 区的分界点,在 old 区停留超过 innodb_old_blocks_time 再被访问才提升到 young 区 ✓ 正确答案
B 新读入的页直接插入到 LRU 链表头部,保证最热访问
C old 区占比由配置固定为 50%,不可调整
D 全表扫描的页会立即被提升到 young 区以加速后续访问
#

2. InnoDB Buffer Pool 的工作机制,缓存数据页与索引页?

A 数据修改直接写磁盘,仅在内存中保留只读副本
B Buffer Pool 只缓存数据页,不缓存索引页
C 页的修改在内存中完成并标记为脏页,通过 redo 日志保证持久性,脏页异步写回磁盘 ✓ 正确答案
D 每次修改都会立即把整页写回磁盘以降低风险
#

3. Redo Log 与 Binlog 的协同(两阶段提交)?

A 先写 binlog,再写 redo log,崩溃时以 binlog 为准
B 先 redo prepare,再写 binlog,最后 redo commit;崩溃时若 binlog 有对应 XID 则提交,否则回滚 ✓ 正确答案
C Redo Log 与 Binlog 互相独立,无需协调
D 两阶段提交中 binlog 先于 redo 写入磁盘
#

4. Redo Log(InnoDB Log)的作用,崩溃恢复、写入路径?

A Redo Log 记录逻辑 SQL 语句,用于主从复制
B 遵循 WAL,先写 redo log 再写数据页;崩溃时重放 redo 恢复已提交事务 ✓ 正确答案
C Redo Log 大小无限,无需 checkpoints 回收
D 事务提交时总是先写数据页再写 redo log
#

5. Undo Log 的作用,MVCC、回滚、purge?

A Undo Log 保存旧版本镜像,支撑事务回滚与 MVCC 版本链,由 purge 线程异步清理不再被引用的旧版本 ✓ 正确答案
B Undo Log 只用于主从复制,不参与回滚
C Undo Log 记录物理页修改,用于崩溃恢复
D Undo Log 在事务提交后立即全部删除,不保留历史版本
#

6. InnoDB Change Buffer 的原理(对非唯一二级索引的增删改先缓存、待页读入时合并,减少随机 IO)是什么?为什么唯一索引无法使用 Change Buffer?

A 它缓存所有索引的增删改操作,包括唯一索引与主键
B 它只缓存非唯一二级索引的增删改,待页读入时合并以减少随机 IO;唯一索引因需实时校验唯一性而无法使用 ✓ 正确答案
C 它把数据页直接写入磁盘,减少内存占用
D 它只用于读取优化,与写操作无关
#

7. 自适应哈希索引(AHI)如何对热点 B-Tree 页自动建立哈希加速等值查找?为什么高并发写入场景常建议关闭(哈希锁/latch 竞争反而降速)?

A AHI 需人工创建,用于加速范围查询
B AHI 存储在磁盘上,不占用内存
C AHI 由 InnoDB 自动为热点页建立的哈希索引,加速等值查找;高并发写入时哈希 latch 竞争可能反降性能,故建议关闭 ✓ 正确答案
D AHI 只适用于唯一索引
#

8. InnoDB 自适应刷脏(根据 redo 生成速度与 checkpoint 年龄调整脏页刷新率)如何避免 redo 写满导致阻塞?与 innodb_io_capacity/innodb_max_dirty_pages_pct 的关系是什么?

A 刷脏速率固定不变,与 redo 生成速度无关
B 自适应刷脏与 redo log 无关,只影响 undo log
C innodb_io_capacity 越大,脏页永远不会被刷盘
D 根据 redo 生成速度与 checkpoint 年龄动态调整刷盘力度,避免 redo 写满阻塞;innodb_io_capacity 是刷盘 IO 上限,innodb_max_dirty_pages_pct 是脏页比例阈值 ✓ 正确答案
#

9. InnoDB 的聚簇索引(Clustered Index),数据按主键顺序存储?

A 每张表可以有多个聚簇索引,分别存储不同列的数据
B 聚簇索引的叶子节点直接存储整行数据,数据按主键逻辑顺序排列,每表只能有一个 ✓ 正确答案
C 聚簇索引只存主键列,需回表才能取整行
D 没有主键的表无法使用聚簇索引
#

10. 二级索引(Secondary Index)的查找,先查主键再回表?

A 二级索引叶子节点存整行数据,无需回表
B 先查二级索引得到主键,再回聚簇索引取整行,这个过程叫回表;覆盖索引可避免回表 ✓ 正确答案
C 二级索引查找一次即可,与主键无关
D 回表只在非唯一二级索引查询时发生
#

11. 覆盖索引(Covering Index)在 InnoDB 的实现?

A 二级索引包含查询所需全部列(含主键列)时即覆盖索引,可避免回表,EXPLAIN 显示 Using index ✓ 正确答案
B 覆盖索引只能用于唯一索引
C 覆盖索引是聚簇索引的一种,存储整行数据
D 覆盖索引会降低查询性能,因需读取更多列
#

12. MySQL 8.0 的原子 DDL(Atomic DDL),DDL 操作的回滚支持?

A 借助 redo/undo 与数据字典 InnoDB 化,使 DDL 要么全部成功要么全部回滚,避免部分完成的中间状态 ✓ 正确答案
B 原子 DDL 仅适用于 MyISAM 表
C 原子 DDL 与普通 DML 无关,不记录任何日志
D 原子 DDL 只支持 CREATE TABLE,不支持 ALTER/DROP
#

13. GTID 的并行复制,writeset-based、LOGICAL_CLOCK?

A LOGICAL_CLOCK 依据提交时间近似划分并行组,WRITESET 依据写集合是否冲突,WRITESET 并行度更高且需 ROW 格式 ✓ 正确答案
B LOGICAL_CLOCK 依据事务修改的行集合是否冲突判断并行,WRITESET 依据提交时间
C 两种方式都基于数据库名称划分并行
D WRITESET 模式无需 binlog 即可运行
#

14. GTID(Global Transaction Identifier),全局事务标识?

A GTID 只用于日志归档,不影响复制
B GTID 格式是"binlog 文件名 + 偏移量"
C GTID 由 server_uuid 与事务序号组成,全局唯一,可自动确定复制位置,简化主从切换与从库搭建 ✓ 正确答案
D GTID 在每个从库上独立生成,不随 binlog 传播
#

15. Group Replication(MGR),基于 Paxos 的强同步复制?

A MGR 只支持 MyISAM 引擎
B MGR 基于 Paxos 共识,写事务需组内多数派确认后才提交,实现强同步复制,支持单主与多主模式 ✓ 正确答案
C MGR 是异步复制,可能丢失已提交事务
D MGR 无需网络通信,节点之间完全独立
#

16. Buffer Pool 大小规划(数据量、热点集、命中率)与多实例(instance)分片

A Buffer Pool 大小应尽量小以节省内存,命中率无关紧要
B 命中率越低说明 Buffer Pool 越大越好,与热点集无关
C 依据热点集与命中率规划大小(常为物理内存 50%-80%);多实例分片为每个实例独立 LRU 与锁,分散并发竞争 ✓ 正确答案
D 实例数量越多,每个实例的 LRU 链表越共享,锁竞争越大
#

17. MySQL Binlog 的格式,STATEMENT、ROW、MIXED 的取舍?

A ROW 记录行级镜像,一致性强但日志量大,生产环境多推荐 ROW 以保证一致性与闪回能力 ✓ 正确答案
B STATEMENT 记录行级变更,日志大但精确
C MIXED 始终使用 ROW 格式
D STATEMENT 完全一致,无任何不确定性
#

18. MySQL 复制的一致性,异步/半同步/组复制在数据一致性上的差异,主从延迟导致的读写不一致如何检测与缓解?

A 异步复制主库等待从库确认后才提交,一致性最强
B 三种复制的一致性完全一致
C 异步复制一致性最弱、半同步降低丢失窗口、组复制基于多数派确认提供强一致;主从延迟时强一致读可强制走主库 ✓ 正确答案
D 半同步复制比组复制一致性更强
#

19. sys schema 的应用,sys.diagnostics、sys.io_global_by_file_by_latency?

A sys schema 是独立于 Performance Schema 的新监控数据源
B sys schema 只能查看 binlog 内容
C sys schema 基于 Performance Schema 数据封装成易用视图/存储过程,如 sys.diagnostics 收集诊断、sys.io_global_by_file_by_latency 按文件统计 IO 延迟 ✓ 正确答案
D sys schema 需要手动创建才能使用
#

20. Buffer Pool 的预读(Read-Ahead)机制?

A 当检测到区中页面被顺序访问时,提前把相邻页批量读入 Buffer Pool,减少随机 IO 次数,提升顺序扫描性能 ✓ 正确答案
B 预读会显著降低顺序扫描性能
C 预读结果不放入 Buffer Pool,直接返回给客户端
D 预读只用于随机访问,不适用于顺序读
#

21. Online DDL 的工作原理,ALGORITHM=INPLACE、LOCK=NONE?

A 所有 DDL 都支持 ALGORITHM=INPLACE 和 LOCK=NONE
B ALGORITHM=COPY 表示原地修改,不重建表
C LOCK=NONE 表示禁止任何读写
D ALGORITHM=INPLACE 多数操作不重建表,LOCK=NONE 允许 DDL 期间并发读写,靠增量日志捕获并发 DML ✓ 正确答案
#

22. Online DDL 的执行阶段,准备、执行、提交?

A 只有执行阶段有锁,准备与提交阶段无锁
B 三个阶段分别是准备、执行、提交,执行阶段最长,提交阶段需短暂独占锁更新元数据 ✓ 正确答案
C 三个阶段都使用 COPY 算法
D 提交阶段可以长时间与 DML 并发
#

23. Online DDL 与 pt-online-schema-change 的取舍?

A pt-osc 会长时间锁住原表
B 原生 Online DDL 永远优于 pt-osc,无需评估
C 两者原理完全相同,没有区别
D pt-osc 通过镜像表 + 增量同步 + 表名切换实现在线变更,适合 COPY 类操作与低版本;原生 Online DDL 适合新版本且支持 INPLACE 的操作 ✓ 正确答案
#

24. Performance Schema 的开销控制?

A 关闭 instrument 会破坏数据字典
B 通过 instrument 与 consumer 的双层开关、采样率及历史表容量限制来控制采集开销 ✓ 正确答案
C 只能通过重启 MySQL 控制开销
D Performance Schema 没有任何开销,无需控制
#

25. Performance Schema 的架构,instrument、consumer、table?

A instrument 决定是否消费数据
B table 负责采集,instrument 负责存储
C consumer 是代码中的埋点
D instrument 采集事件,consumer 决定是否消费,table 保存采集结果,三者构成采集流水线 ✓ 正确答案
#

26. InnoDB 数据页与行格式(COMPACT/DYNAMIC)对存储与索引的影响

A 所有行格式都把所有字段完整存储在行内
B 行格式不影响存储空间与索引性能
C DYNAMIC 对长字段(TEXT/BLOB)完全溢出存储,行内只留指针,适合大字段表;COMPACT 行内保留 768 字节前缀(超出部分溢出存储) ✓ 正确答案
D COMPACT 是 MySQL 8.0 的唯一默认格式
#

27. Buffer Pool 命中率下降时的排查,从容量、SQL 模式与预热角度分析?

A Buffer Pool 命中率永远不变,无需排查
B 命中率下降只与磁盘故障有关
C 命中率下降只能通过增大内存解决
D 应从容量(Buffer Pool 过小)、SQL 模式(全表扫描等冷读)、预热(冷启动未缓存)三个角度排查 ✓ 正确答案