返回题库数据库刷题PostgreSQL 18 选择题 · 第 6 / 8 篇

MVCC、WAL、Vacuum 与统计信息

101 PostgreSQL MVCC 的核心思想是?

难度: 基础

  • A. 更新时保留旧版本,读者按快照选择可见版本,读不阻塞写
  • B. 更新直接覆盖旧行并加全表锁
  • C. 所有读写都排队串行
  • D. 版本链只保存在内存中
查看答案与解析

正确答案A

正确原因: MVCC 让读写并发互不阻塞,通过版本可见性实现隔离。

关键边界: 旧版本需要 VACUUM 回收,长事务会阻碍回收。

错误选项辨析: 覆盖行会破坏快照,串行化失去并发,版本保存在堆文件中。

102 UPDATE 一行后,旧行版本会怎样?

难度: 基础

  • A. 变成死元组(dead tuple),等待 VACUUM 回收
  • B. 立即从磁盘删除
  • C. 移动到另一张表
  • D. 永久保留且占用不变
查看答案与解析

正确答案A

正确原因: 更新产生新版本,旧版本对旧快照仍可见,标记为死元组。

关键边界: 死元组占用空间,由 VACUUM 清理。

错误选项辨析: 不立即删除,不迁移,若不清理会持续膨胀。

103 VACUUM 的主要作用是?

难度: 基础

  • A. 重写整张表并压缩文件
  • B. 回收死元组空间并更新可见性映射,供旧快照外的查询复用
  • C. 删除用户数据
  • D. 重建所有索引
查看答案与解析

正确答案B

正确原因: 常规 VACUUM 原地清理死元组,更新统计与可见性映射。

关键边界: 空间回收给表内部复用,文件不一定变小。

错误选项辨析: 重写表是 VACUUM FULL,VACUUM 不删用户数据、不重建索引。

104 autovacuum 的作用是?

难度: 基础

  • A. 自动删除重复数据
  • B. 后台自动执行 VACUUM 与 ANALYZE,维持表健康
  • C. 自动优化所有 SQL
  • D. 自动备份数据库
查看答案与解析

正确答案B

正确原因: autovacuum 守护进程按阈值自动清理死元组并更新统计。

关键边界: 高更新场景可能需要调整触发参数。

错误选项辨析: 它不删数据、不重写 SQL、不做备份。

105 VACUUM FULL 与普通 VACUUM 的区别是?

难度: 进阶

  • A. 两者完全相同
  • B. VACUUM FULL 更轻量
  • C. VACUUM FULL 重写表并回收磁盘空间,但会锁表
  • D. 普通 VACUUM 会锁表重写
查看答案与解析

正确答案C

正确原因: VACUUM FULL 重建表文件,空间还给操作系统,代价是持锁阻塞。

关键边界: 大表用 VACUUM FULL 前要评估停机窗口。

错误选项辨析: 两者机制不同,VACUUM FULL 更重,普通 VACUUM 不重写文件。

106 事务冻结与 age 的目的是?

难度: 进阶

  • A. 加速普通查询
  • B. 缩小表体积
  • C. 防止事务 ID 回卷(wraparound)导致的数据损坏
  • D. 加密事务日志
查看答案与解析

正确答案C

正确原因: 事务 ID 有限,冻结旧事务并推进 age 避免回卷。

关键边界: 监控 datfrozenxid 与 age,必要时强制 VACUUM。

错误选项辨析: 冻结与查询速度、表体积、加密无关。

107 长事务对 VACUUM 的影响是?

难度: 实战

  • A. 长事务让 VACUUM 更快
  • B. 长事务自动触发 VACUUM FULL
  • C. VACUUM 会中止长事务
  • D. 事务快照使旧版本仍然可见,VACUUM 无法回收这些死元组
查看答案与解析

正确答案D

正确原因: VACUUM 只回收比最老活跃事务更早的版本,长事务拖住清理进度。

关键边界: 长事务还会导致表膨胀与事务 ID 老化。

错误选项辨析: 长事务阻碍清理,不触发重写,VACUUM 不终止事务。

108 WAL(Write-Ahead Logging)的原则是?

难度: 基础

  • A. 先改数据页再记日志
  • B. 日志只记录查询
  • C. 日志写在内存即可
  • D. 先写日志后写数据页,崩溃后可重放恢复
查看答案与解析

正确答案D

正确原因: WAL 保证数据页落后于日志时,崩溃恢复仍能补齐已提交事务。

关键边界: checkpoint 之后才允许安全清理旧日志。

错误选项辨析: 反序无法恢复,WAL 记录修改而非查询,日志必须持久化。

109 checkpoint 的作用是?

难度: 进阶

  • A. 把脏页刷盘并推进重放起点,缩短崩溃恢复时间
  • B. 删除旧的事务日志
  • C. 锁定所有表
  • D. 重建所有索引
查看答案与解析

正确答案A

正确原因: checkpoint 强制刷盘脏页,使恢复只需处理 checkpoint 之后的日志。

关键边界: 频繁 checkpoint 会放大 I/O,需平衡恢复速度与开销。

错误选项辨析: 它不删日志、不锁表、不重建索引。

110 ANALYZE 的作用是?

难度: 基础

  • A. 收集表的统计信息,供优化器估算执行计划
  • B. 清理死元组空间
  • C. 重建索引
  • D. 备份数据
查看答案与解析

正确答案A

正确原因: ANALYZE 更新 pg_statistic,规划器据此估算行数与成本。

关键边界: 数据分布变化大时要手动 ANALYZE,autovacuum 也会自动执行。

错误选项辨析: 清理是 VACUUM,索引重建是 REINDEX,备份是 pg_dump。

111 统计信息过期可能导致?

难度: 进阶

  • A. 数据丢失
  • B. 优化器估算错误,选择低效执行计划
  • C. 表被锁定
  • D. 索引自动删除
查看答案与解析

正确答案B

正确原因: 过旧统计让 rows 估算失真,可能选错连接算法或索引。

关键边界: 定期 ANALYZE 并观察计划变化。

错误选项辨析: 统计过期影响计划,不造成数据丢失或对象变更。

112 seq_page_cost 与 random_page_cost 的作用是?

难度: 进阶

  • A. 设置磁盘容量上限
  • B. 给顺序扫描与随机访问设定成本,影响索引与全表扫描的选择
  • C. 控制连接数量
  • D. 限制单条 SQL 长度
查看答案与解析

正确答案B

正确原因: 规划器用这两项成本估算扫描方式,随机读更贵则偏向顺序扫描。

关键边界: 固态盘可调低 random_page_cost 让索引更受青睐。

错误选项辨析: 它们是成本参数,与容量、连接、SQL 长度无关。

113 shared_buffers 的作用是?

难度: 基础

  • A. 缓存查询结果集
  • B. 存储 WAL 日志
  • C. PostgreSQL 共享内存中的数据页与索引页缓存
  • D. 保存用户密码
查看答案与解析

正确答案C

正确原因: shared_buffers 缓存数据页,减少磁盘访问,配合操作系统缓存工作。

关键边界: 不宜无限增大,需与系统内存与缓存命中率权衡。

错误选项辨析: 它缓存页而非结果集,WAL 与密码另有存储。

114 可见性映射(Visibility Map)的作用是?

难度: 进阶

  • A. 加密数据页
  • B. 记录页的访问次数
  • C. 标记页内元组全部可见,让仅索引扫描免回表
  • D. 替代所有索引
查看答案与解析

正确答案C

正确原因: 可见性映射由 VACUUM 维护,全可见页可被仅索引扫描直接使用。

关键边界: 更新会清除映射位,需要 VACUUM 重新标记。

错误选项辨析: 映射不加密、不计数、不替代索引。

115 HOT(Heap-Only Tuple)更新优化指的是?

难度: 进阶

  • A. 热数据自动放到内存
  • B. 更新必须重建全表
  • C. 所有更新都免写日志
  • D. 索引列未变时新版本留在原页,避免更新二级索引
查看答案与解析

正确答案D

正确原因: HOT 让非索引列更新不产生新索引项,减少写放大。

关键边界: 索引列变更或空间不足时无法 HOT。

错误选项辨析: HOT 是更新优化,与内存热数据、重建表、免日志无关。

116 死元组过多对查询性能的影响是?

难度: 进阶

  • A. 查询自动跳过死元组,零影响
  • B. 死元组让索引失效
  • C. 死元组只影响写入
  • D. 扫描更多页面与行版本,查询变慢并放大 I/O
查看答案与解析

正确答案D

正确原因: 顺序扫描仍要经过含死元组的页面,索引膨胀也拖慢查找。

关键边界: 需监控表膨胀并及时 VACUUM。

错误选项辨析: 死元组明显影响读路径,不破坏索引但使其膨胀。

117 表与索引出现明显膨胀(bloat)时,处理思路是?

难度: 实战

  • A. 先定位膨胀来源,再 VACUUM 或 VACUUM FULL、REINDEX 治理
  • B. 直接删除表重建
  • C. 忽略并等待自动恢复
  • D. 只增加内存即可
查看答案与解析

正确答案A

正确原因: 膨胀治理需区分表膨胀与索引膨胀,选择对应手段。

关键边界: 大表操作要评估锁与窗口,索引可用 CONCURRENTLY 重建。

错误选项辨析: 删表不可接受,膨胀不会自愈,内存不能替代空间回收。

118 高更新表 autovacuum 跟不上的常见调整是?

难度: 实战

  • A. 关闭 autovacuum 提升性能
  • B. 提高 autovacuum 触发频率或降低 scale factor 阈值
  • C. 把表改成视图
  • D. 删除统计信息
查看答案与解析

正确答案B

正确原因: 调整阈值与代价参数让清理更频繁,匹配高更新速率。

关键边界: 过度频繁会增加 I/O,需观察实际清理进度。

错误选项辨析: 关闭 autovacuum 会膨胀,改视图、删统计都是错误方向。

119 监控表级清理与扫描情况,应查看?

难度: 基础

  • A. pg_roles
  • B. information_schema.columns
  • C. pg_stat_user_tables 等统计视图
  • D. pg_settings 中的全部参数
查看答案与解析

正确答案C

正确原因: pg_stat_user_tables 提供扫描、死元组与 last_vacuum 等指标。

关键边界: 结合 pg_stat_activity 分析长事务与锁。

错误选项辨析: 角色、列元数据与配置参数不提供清理统计。

120 表膨胀会导致查询计划怎么变化?

难度: 进阶

  • A. 计划完全不变
  • B. 自动改为使用视图
  • C. 优化器会删除膨胀表
  • D. 估算页数与扫描成本上升,优化器可能放弃索引或增加扫描范围
查看答案与解析

正确答案D

正确原因: 膨胀改变表的大小与统计,成本估算随之变化,计划可能退化。

关键边界: VACUUM 与 ANALYZE 后计划通常会改善。

错误选项辨析: 计划会变化,不涉及视图与删除表。

官方资料

当前分类

PostgreSQL 18 选择题

查看全部分类 →
  1. 04索引结构与访问路径20 题
  2. 05事务、隔离级别、锁与死锁20 题
  3. 06MVCC、WAL、Vacuum 与统计信息20 题
  4. 07执行计划、SQL 优化与性能诊断20 题
  5. 08分区、物化视图与生产运维20 题
ESC

输入关键词开始搜索