# 1. 写回缓存、设备 flush、FUA 与存储控制器电池保护如何共同决定持久性边界? A FUA 需要额外的 flush 命令 B 写回缓存断电不丢数据 C 写回缓存先确认后落盘(断电丢数据),fsync 映射为 flush/FUA 命令,BBU/超级电容(PLP)使缓存断电也安全;持久性依赖软件命令与设备兑现的交集 ✓ 正确答案 D fsync 与设备缓存无关
# 2. NVMe 的 SQ/CQ 队列对、中断聚合(IRQ coalescing)与轮询模式分别适合哪种业务负载? A 轮询模式省 CPU B 中断聚合把多个完成合并一次中断,适合高吞吐批处理但引入延迟;轮询直接扫 CQ 消除中断延迟,适合高频小请求延迟敏感负载,代价是 CPU 占用 ✓ 正确答案 C 中断聚合降低延迟 D 所有负载都适合轮询
# 3. BTRFS 在 RAID 写入路径上的写时复制与 checksum 校验如何决定 scrub 行为,与传统 mdadm+LVM 相比的运维差异是什么? A BTRFS 以 COW+checksum 支撑 scrub:全盘校验并在有冗余副本时自动重建,能检测静默损坏;mdadm 无内容校验和,阵列管理语义(装配/重建/替换)不同 ✓ 正确答案 B mdadm 也能检测静默损坏 C scrub 只报告不修复 D BTRFS 无写放大问题
# 4. XFS 的 allocation group 与 Btrfs 的 chunk 分配在多核 IO 并发下的扩展性差异如何体现? A Btrfs 无分配锁 B XFS 的分配也走全局锁 C XFS 以 AG(独立空闲树与锁)实现分配并行,多核写扩展性好;Btrfs 经全局 space_info/块组账本分配,早期有锁争用,性能受 COW 写放大耦合影响 ✓ 正确答案 D 两者的分配并发模型相同
# 5. 当 NVMe 设备返回 critical warning(如温度过高)时,Linux 内核如何通过 thermal handle 触发 throttle,throttling 策略可调整吗? A nvme 驱动读 SMART 的 critical_warning 与温度并经 thermal zone/hwmon 上报;控制器固件自带热节流保护,内核可调的是监控、trip 点与系统 cooling 联动 ✓ 正确答案 B 固件节流策略可由内核完全控制 C critical warning 与温度无关 D 内核无法观测 throttle 状态
# 6. ext4 的 journal_checksum 与 metadata_csum 选项在崩溃一致性验证上做了哪些工程权衡? A journal_checksum 校验日志记录防损坏日志重放,metadata_csum 为全部元数据块存 crc32c 检测静默损坏;代价是写路径开销与旧工具兼容性 ✓ 正确答案 B metadata_csum 也保护文件数据 C 两个选项都是 mkfs 后随时可开的 D journal_checksum 覆盖所有元数据
# 7. 在云盘环境下出现"写入返回成功但读取陈旧数据"时,cache mode(writeback/writethrough)、flush 行为与 hypervisor 透传策略如何共同决定? A flush 与 cache mode 无关 B writeback 下写确认即持久 C writeback 下写确认=写入宿主缓存(非持久),fsync 经 flush 透传才落后端;写后读旧多来自缓存未失效、后端多副本延迟或 flush 被吞 ✓ 正确答案 D 云盘写后读必然一致
# 8. WAL 为什么要求日志先于数据页落盘,page LSN 如何避免重放已持久化修改? A 数据页可以先于日志落盘 B WAL 要求 redo 日志先于对应数据页落盘,保证崩溃后修改可重放;恢复时若 redo LSN ≤ page LSN 说明修改已在页上,跳过避免重复应用 ✓ 正确答案 C page LSN 用于加速写入 D 恢复时全部日志无条件重放
# 9. B+树发生页分裂时,latch 与事务锁分别保护什么,如何避免结构修改死锁? A latch 有回滚语义 B latch 与事务锁保护同一对象 C 分裂不需要父页 latch D latch 保护内存页结构的短期一致性,事务锁保护数据行语义;页分裂需原子持有父子页 latch,用 lock coupling(根到叶单向加锁)与 try-latch 避免死锁 ✓ 正确答案
# 10. ARIES 的 redo/undo/analysis 三个阶段为何缺一不可,模糊检查点(fuzzy checkpoint)在恢复时如何支持? A redo 只重放已提交事务 B analysis 确定脏页集合与活动事务(redo 起点),redo 重放已提交修改(不丢),undo 回滚未提交修改(原子性);模糊检查点记录 DPT/ATT 使恢复从最小 recovery LSN 开始 ✓ 正确答案 C 模糊检查点要求所有脏页先落盘 D analysis 可以省略
# 11. ARIES 中逻辑 undo 与物理 undo 分别回滚什么粒度的修改,索引结构修改为何常需逻辑 undo? A 物理 undo 按页+偏移还原(依赖页布局不变),逻辑 undo 按键值语义回滚;页分裂使记录物理位置迁移,故索引结构修改常需逻辑 undo ✓ 正确答案 B 逻辑 undo 也按偏移定位 C 分裂不影响物理 undo D 物理 undo 需要索引查找
# 12. MVCC 中事务 ID、版本链与可见性快照如何共同决定一次读取能看到的行版本? A 版本链只存最新版本 B 行版本记录创建/删除事务 ID,旧版本经回滚指针链到 undo;一致性读按快照(低水位/高水位/活跃集)从新到旧判定首个可见版本 ✓ 正确答案 C 快照读总是读最新版本 D 事务 ID 不参与可见性判定
# 13. PostgreSQL 的 HOT update 与 InnoDB 的 secondary index 延迟写回在更新路径上的差异,对索引膨胀与 vacuum 影响是什么? A PG 的 HOT 在更新非索引列且页有空间时同页建链、索引不更新(免索引写、减少膨胀),靠 vacuum 清理;InnoDB 用 change buffer 延迟合并二级索引写,purge 清理删除版本 ✓ 正确答案 B HOT 也更新索引条目 C change buffer 立即写索引页 D 两库的清理机制相同
# 14. 当事务持有意向锁升级排他锁时,行锁、gap lock 与 next-key lock 如何相互作用导致死锁? A 死锁只发生在表级锁 B gap 锁之间互相排斥 C next-key 锁=记录+前间隙,插入需获 gap 锁;两事务分别持对方所需间隙的 next-key 锁并交叉插入即形成循环等待死锁;RC 无 gap 锁可缩小死锁面 ✓ 正确答案 D 升级意向锁不会等待
# 15. 数据库检查点过于密集为何会增加写放大,过于稀疏又如何拉长崩溃恢复? A 检查点只写日志不写数据 B 检查点频率不影响恢复时间 C 密集检查点频繁全量刷脏页造成重复写回(写放大)与 I/O 争抢;稀疏检查点使崩溃恢复需重放大量日志(RTO 拉长);InnoDB/PG 用自适应或参数化平衡 ✓ 正确答案 D 检查点越密集恢复越快且无代价
# 16. 在只读副本上为何仍需要 undo 日志,MVCC 多版本快照的实现代价如何从 undo 转移? A 副本滞后不影响主库清理 B 只读副本不需要旧版本 C undo 只在主库产生消耗 D 只读副本的快照读也依赖旧版本(复制应用产生的版本链+副本长查询),故仍需 undo;MVCC 代价可向独立 undo 区与存储层(Aurora 日志即数据)转移 ✓ 正确答案
# 17. 为什么 RocksDB 的 compaction 调度对 write stall 至关重要,level compaction 与 universal compaction 在后台吞吐曲线上有何差异? A level compaction 写放大最小 B compaction 与写入无关 C universal 的空间放大更小 D compaction 消化速率决定 write stall(memtable/L0 堆积时阻塞写);level 合并呈脉冲爆发(写放大高空间小),universal 增量合并平滑(写放大低空间放大高) ✓ 正确答案
# 18. 逻辑解码(logical decoding)通过 output plugin 与复制槽把 WAL 转为逻辑变更流,快照与 LSN 如何保证 CDC 的一致性起点? A 逻辑解码直接输出页级修改 B 逻辑解码把 WAL 物理变更解析为行级逻辑变更并经 output plugin 输出;复制槽锚定 LSN 防 WAL 清理,导出快照与变更流起点对齐保证 CDC 无缝隙 ✓ 正确答案 C slot 不保留 WAL D 快照与 LSN 无需对齐
# 19. 向量化执行引擎(vectorized execution)相比 Volcano 逐行迭代在 SIMD 利用与 cache 命中率上的差别如何量化? A 向量化与逐行迭代吞吐相同 B Volcano 逐行迭代有虚调用/分支/行存散布开销,向量化按批+列存使 SIMD(8~16 行/指令)与 cache 顺序访问生效,分析负载吞吐可高 1~2 个数量级 ✓ 正确答案 C SIMD 只影响 IO 不影响 CPU D 行存适合向量化
# 20. 代价模型中 CPU 代价、IO 代价与网络代价的权重随数据倾斜而漂移,PostgreSQL 引入 genetic query optimizer 后做了哪些校正? A 代价漂移来自统计失真(倾斜/相关)、介质差异(random_page_cost)与缓存估计;校正靠参数+扩展统计+analyze;GEQO 只在大连接数时用遗传搜索替代穷举,不修正代价模型 ✓ 正确答案 B GEQO 直接修正代价权重 C random_page_cost 与介质无关 D 扩展统计不能修正列相关
# 21. 热点行高频更新导致事务冲突时,如何在悲观锁、乐观版本和业务分片之间选择? A 乐观版本冲突率高时性能最好 B 强一致串行更新用悲观锁,低冲突偶发更新用乐观版本(重试),可拆分聚合的计数类用分片消热点;按语义、冲突率与重试成本组合选择 ✓ 正确答案 C 分片会加剧单行争用 D 悲观锁没有等待
# 22. prepared statement 的 plan cache 在 plan invalidation 上的策略是什么,搜索路径变化时如何避免使用过期计划? A generic plan 永远最优 B DDL 不影响缓存计划 C search_path 变化后计划必然指向新表 D 计划缓存按依赖对象 OID 在 DDL 时失效,并记录生成时的 search_path/GUC;search_path 变化时执行侧重估或需重新 PREPARE,限定名可消除歧义 ✓ 正确答案
# 23. 连接池耗尽但数据库 CPU 不高时,应如何检查长事务、锁等待、网络阻塞与池内泄漏? A CPU 低时连接池不会耗尽 B 池耗尽而 CPU 低说明连接被占用但不干活:查长事务(pg_stat_activity/innodb_trx)、锁等待(wait_event/data_lock_waits)、网络链路与应用泄漏(线程栈+池统计) ✓ 正确答案 C 锁等待会消耗高 CPU D 长事务不占用连接
# 24. 云数据库的"逻辑复制槽"在长时间未消费 WAL 时为何会导致磁盘膨胀,监控 slot lag 的关键指标有哪些? A slot 不阻止 WAL 回收 B slot 未消费则其 WAL 不被回收(即使 checkpoint 已过),lag 持续=WAL 累积=磁盘膨胀;监控 restart_lsn 差、wal_status、pg_wal 大小与消费端健康 ✓ 正确答案 C wal_status 只有 reserved 一种状态 D 磁盘膨胀与写入速率无关
# 25. 分库分表下的分布式查询优化器如何处理跨库 join、聚合与排序,常见的执行计划下推策略有哪些? A 两阶段聚合不减少传输 B 所有查询都必须全片扫描 C 分片键条件使查询路由到精确分片;聚合用两阶段(局部+全局)、排序用分片有序+归并、同分片键 join 片内完成、异键 join 需广播或重分布 ✓ 正确答案 D 不同分片键的表无法 join
# 26. 在缺少直方图信息的列上,PostgreSQL 的 most-common-values 估计为何依赖 analyze 频率,自动 analyze 的触发条件是什么? A 均匀假设对倾斜数据也准确 B MCV 与 analyze 无关 C 等值估算命中 MCV 才准确,未命中回退均匀假设;统计由 ANALYZE 采样,autovacuum 在变更行数超过阈值(50+10%×行数)时触发 analyze ✓ 正确答案 D autovacuum 只在 vacuum 时 analyze
# 27. 内存数据库(如 Redis、MemSQL)落地持久化时为何仍需定期 fsync,append-only-file 与 copy-on-write 各自的写放大代价? A AOF 恢复比 RDB 快 B write 即持久无需 fsync C 内存库落盘是备份介质,定期 fsync 控制断电丢失窗口;AOF 写放大≈1 但重放慢,RDB 快照全量写+COW 页复制(内存放大)但恢复快 ✓ 正确答案 D COW 快照无额外内存开销
# 28. 排查 NVMe 尾延迟时,如何关联提交队列深度、完成队列中断、热节流与介质错误日志? A 尾延迟由队列深度排队、固件执行、完成中断延迟与介质错误重试构成;用 iostat 深度、/proc/interrupts、nvme smart-log 温度/错误日志按时间窗对齐定位 ✓ 正确答案 B 尾延迟只来自介质错误 C 中断聚合不影响延迟 D 队列深度与延迟无关
# 29. fio 测试中为何必须区分 iodepth、numjobs 与直接 IO 选项,误用 buffered IO 会掩盖哪类尾延迟问题? A 总深度只由 iodepth 决定 B buffered 测试反映真实设备延迟 C direct 与延迟无关 D iodepth 是单 job 在飞请求数、numjobs 是并发 job 数(总深度=乘积)、direct=1 走真实设备路径;buffered 掩盖写回/队列/GC/介质重试等设备尾延迟 ✓ 正确答案
# 30. InnoDB 的 doublewrite buffer 在崩溃恢复中如何防止页断裂(partial page write),开启对性能影响有多大? A torn page 可以由 redo 直接修复 B 断电导致 16KB 页部分写入(torn page)使 redo 无法可靠重放;doublewrite 先整页顺序写专用区、崩溃时校验和比对恢复损坏页,代价是写放大(通常 10~20% 开销) ✓ 正确答案 C doublewrite 不影响写量 D 关闭 doublewrite 无需任何条件
# 31. ext4 ordered、writeback、journal 三种数据模式如何影响崩溃后的数据与元数据? A ordered 保证数据先于元数据提交落盘(崩溃后结构与数据版本对齐),writeback 只保证元数据(数据可能错位),journal 数据也进日志(完全一致但写放大最大) ✓ 正确答案 B writeback 也保证数据版本对齐 C journal 模式写放大最小 D ordered 不写日志
# 32. blk-mq 多队列调度与传统的单队列电梯调度相比,硬件队列、ctx 合并与 IOPS 隔离分别如何工作? A blk-mq 仍是单全局队列 B blk-mq 把 IO 按 CPU 映射到多硬件队列(无全局锁),bio 在 per-cpu 软件队列合并,调度器(none/mq-deadline/bfq)挂 hw queue 层;多队列并行与 bfq/cgroup 提供 IOPS 隔离 ✓ 正确答案 C 合并必须在全局电梯做 D 多队列不改善并发扩展性
# 33. 多路径存储发生链路抖动时,queue_if_no_path 为什么可能把应用永久挂住? A queue_if_no_path 在全部路径失效时让 IO 排队等路径恢复,路径不恢复且无超时则 IO 无限累积、应用永久挂住;需 no_path_retry 限次与 fail_if_no_path 兜底 ✓ 正确答案 B queue_if_no_path 会让 IO 立即返回 EIO C 排队 IO 有内置超时 D 路径恢复不需要 checker
# 34. 除 doublewrite 外,页校验和(page checksum)如何检测 torn write,二者在恢复路径上的分工是什么? A 校验和粒度与扇区相同 B checksum 能直接修复坏页 C doublewrite 能检测介质错误 D 页校验和检测整页损坏(含 torn write),doublewrite 提供完整页副本用于修复;恢复路径为校验发现坏页→副本覆盖→redo 重放,检测面大于修复面 ✓ 正确答案
# 35. LSM 树 compaction 的 leveled 与 tiered 策略在读放大、写放大和空间放大上的三角取舍如何表达? A leveled 的写放大最低 B tiered 的空间放大最低 C leveled 每层指数增长且层内有序:读放大≈层数、写放大随放大因子 T 增、空间紧凑;tiered 同档文件并存:写放大低但读与空间放大高——三者按稀缺资源取舍 ✓ 正确答案 D bloom filter 减少写放大
# 36. 当逻辑日志(logical log)与物理日志(physical log)混用时,CDC、订阅复制与崩溃恢复分别更偏好哪一种? A 物理日志适合对外发布 B 逻辑日志可以直接做崩溃恢复 C 崩溃恢复依赖物理日志(页级重放),CDC 与订阅复制偏好逻辑日志(行级语义、跨版本可消费);主流库以"物理为底(redo/WAL)+逻辑为上(binlog/解码)"混用 ✓ 正确答案 D binlog 用于崩溃恢复
# 37. 基数估计错误如何导致连接顺序和访问路径失误,扩展统计能修正哪些列相关性? A 扩展统计不覆盖多列 group by B 基数估计只影响聚合 C 独立假设对相关列也准确 D 基数错误使 join 顺序与方法、访问路径选错(沿树放大);扩展统计以函数依赖、多列 ndistinct 与多列 MCV 修正独立假设下的相关列偏差 ✓ 正确答案
# 38. LSM-tree 的 memtable、SSTable 与 compaction 如何影响写放大、读放大和空间放大? A SSTable 可以原地更新 B memtable 增加读放大 C compaction 降低写放大 D memtable 把写批量顺序落盘(写放大≈1+合并),SSTable 分层使点查逐层查找(读放大随层数),compaction 重写消除重叠(降读放大、升写与空间放大) ✓ 正确答案
# 39. 执行计划中的 hash join 在数据倾斜时的退化行为与 bitmap-bloom-filter 优化为何有时反而拖慢查询? A bloom 过滤总是有益 B 倾斜使 hash 桶退化(热键桶线性匹配、spill 到磁盘);bloom 过滤的收益是省 IO,小表/内存命中/高匹配率时构建与检查开销反超收益,反而拖慢 ✓ 正确答案 C 倾斜不影响 hash join D spill 只影响顺序读
# 40. RAID 0/1/5/6/10 在容量利用率、可容忍磁盘故障数与随机写代价上如何对比,为什么数据库场景常选 RAID10 而大容量归档场景常选 RAID6? A RAID10 利用率高于 RAID6 B RAID5 随机写代价低于 RAID10 C RAID5/6 随机写需读-改-写(RMW 写放大),RAID10 镜像写仅 2 次写且无 RMW;数据库随机写延迟敏感选 RAID10,归档顺序写容量优先且需双容错选 RAID6 ✓ 正确答案 D RAID6 只能容忍 1 盘故障