如何诊断并调整 PostgreSQL autovacuum 让它跟上高更新频率的大表?
围绕“如何诊断并调整 PostgreSQL autovacuum 让它跟上高更新频率的大表”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须基于 pg_stat_user_tables 的死元组与上次清理时间诊断,并说明 scale_factor、thresh。
PostgreSQL · SQL面试题第 1 页,显示第 1–46 题,共找到 46 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“如何诊断并调整 PostgreSQL autovacuum 让它跟上高更新频率的大表”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须基于 pg_stat_user_tables 的死元组与上次清理时间诊断,并说明 scale_factor、thresh。
围绕“PostgreSQL 的 CHECK 约束对 NULL 值如何判定,什么时候约束不会生效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 CHECK 表达式为 NULL 时视为通过这一规则及 NOT VALID 约束对存量数据的行为。
围绕“PostgreSQL 的 CREATE INDEX CONCURRENTLY 如何避免锁表,失败后会留下什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明两阶段扫描降低锁级别的机制、不能在事务块内执行的限制及失败后 invalid 索引的清理。
围绕“为什么 PostgreSQL 前面通常需要连接池,短连接直连会有什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释每连接一个后端进程的模型带来的内存与建立开销及 max_connections 瓶颈。
围绕“PostgreSQL 中 DEFERRABLE 约束在什么场景下需要,推迟到提交时检查有什么代价”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确环形外键与批量插入乱序场景的用法及延迟检查对性能与触发时机的影响。
围绕“PostgreSQL 排他约束(EXCLUDE)能解决哪些唯一约束无法表达的建模问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须以时间段不重叠预约类场景说明 GiST 与范围类型的配合。
围绕“PostgreSQL 外键的 ON DELETE CASCADE 与 ON DELETE SET NULL 该如何选”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须基于父子数据生命周期归属给出选择标准并提到级联对大表删除的锁与性能影响。
围绕“为什么 PostgreSQL 外键的被引用列自动有索引而引用列没有,什么时候必须手动为引用列建索引”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释父表行被删除或更新时需扫描子表引用列这一机制并给出判断建索引的标准。
围绕“PostgreSQL 热备库上的查询为什么会与 WAL 重放冲突并被取消,如何缓解”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明重放需要清理的行与备库快照冲突的机制,并权衡 hot_standby_feedback 与 max_standby_stream。
围绕“PostgreSQL jsonb 的 @> 包含操作符语义是什么,嵌套数组和对象的匹配规则有哪些边界”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须讲清包含匹配对对象子集、数组元素不要求顺序与重复的判断规则及常见误判。
围绕“PostgreSQL 中如何为 jsonb 的特定查询模式选择 GIN、带 jsonb_path_ops 的 GIN”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按 @> 包含查询、? 键存在查询和等值查询三种模式分别匹配索引类型。
围绕“为什么 PostgreSQL jsonb 不保留键顺序并丢弃重复键,这对依赖原始文档的系统有什么影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确规范化存储语义导致的行为及需要保留原文时应改用 json 或 text 列的取舍。
围绕“PostgreSQL 的 jsonpath 查询语言相比 -> 和 #> 操作符在 jsonb 上多出了哪些能力”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明条件过滤、通配与类正则等表达能力及 @@ 操作符的索引支持情况,不逐一罗列函数签名。
围绕“PostgreSQL 中更新 jsonb 大文档的一个小字段为什么可能很慢,如何缓解”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 jsonb 不可原地更新导致整行重写与 TOAST 影响,并给出拆列、拆表或控制文档大小的对策。
围绕“PostgreSQL 中 json 与 jsonb 两种类型的存储和处理差异是什么,为什么生产上通常选 jsonb”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确文本原样存储与二进制分解存储的差异及其对键顺序、重复键、索引支持和查询性能的影响。
围绕“什么情况下应该用 PostgreSQL jsonb 列而不是拆成关系表加列的建模方式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须从查询模式、约束可表达性、索引能力和 schema 演进四个维度给出决策标准。
围绕“PostgreSQL 逻辑复制与物理流复制分别适用于什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须从复制粒度、跨版本支持、备库可写性和 DDL 传播四个维度对比并给出选型。
围绕“长时间未提交的事务为什么会导致 PostgreSQL 表膨胀且 VACUUM 无法回收”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释快照仍引用旧版本使死元组不可回收的机制,并给出通过 pg_stat_activity 定位与终止长事务的方法。
围绕“用逻辑复制做 PostgreSQL 异构迁移时,切换割接的关键步骤和风险点是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须涵盖初始数据同步、增量追平、序列值校正与写入停机等割接步骤。
围绕“PostgreSQL 的 MVCC 是如何通过元组版本实现读写互不阻塞的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释每行多版本加事务快照判断可见性的机制,并指出它导致死元组需要清理这一后果。
围绕“PostgreSQL 的 NOT VALID 约束如何做到在线给大表加约束而不长时间锁表”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分添加 NOT VALID 约束与 VALIDATE CONSTRAINT 两步各自的锁级别和对新旧数据的不同约束效力。
围绕“如何在 PostgreSQL 上对在线大表执行加列、改列类型等迁移而不长时间锁表”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分带默认值的加列(11 起不重写表)与改列类型触发整表重写的差异,并给出影子列或建新表切换的低停机方案。
围绕“如何用 PostgreSQL 部分唯一索引实现「每个用户只有一条有效记录」这类软删除场景的唯一性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出带 WHERE 条件的唯一索引设计并说明它与全表唯一约束在查询优化上的差异。
围绕“如何用 PostgreSQL 的 DETACH PARTITION CONCURRENTLY 在线归档历史分区数据”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明该操作相对直接 DETACH 的锁优势、需要两阶段提交的外键前提及归档后续步骤。
围绕“PostgreSQL 分区表能否挂载外部表作为分区,这种混合分区适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 FDW 外部表可作分区的可行性及查询性能与约束保证的损失。
围绕“为什么 PostgreSQL 分区表的唯一约束和主键必须包含分区键,这带来哪些设计限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释约束只能在分区内保证唯一这一实现原因,并讨论对全局唯一 ID 设计的影响。
围绕“PostgreSQL 分区裁剪在什么条件下生效,为什么有时查询仍然扫描所有分区”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出查询条件含分区键、enable_partition_pruning 及执行期裁剪与计划期裁剪的区别。
围绕“PostgreSQL 分区数量过多会带来哪些问题,如何确定合理的分区粒度”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确规划时间增长与锁/目录开销,并给出按数据保留期与单分区大小估算粒度的方法。
围绕“PostgreSQL 声明式分区相比旧的表继承加触发器方案有哪些实质改进”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确路由由系统完成、计划期裁剪、分区维护 DDL 三方面的改进。
围绕“PostgreSQL 声明式分区的 RANGE、LIST、HASH 三种方式各自适合什么数据分布”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按时间连续、枚举值和均匀打散三种诉求匹配分区方式并说明默认分区的兜底作用。
围绕“pg_dump 导出的数据在多表并行写入时为什么仍然是一致的快照”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释导出在单个可重复读快照中运行从而保证库级一致性的机制及其长时间运行对死元组的影响。
围绕“PostgreSQL pg_dump 的 plain、custom、directory 格式在恢复灵活性上有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 custom/directory 支持并行恢复与选择性恢复而 plain 直接可执行,以及 pg_restore 的对应关系。
围绕“PgBouncer 的 session、transaction、statement 三种池化模式对应用语义各有什么影”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确事务级池化下 prepared statement、临时表与会话级 SET 失效的原因及适用场景。
围绕“物理备份和逻辑备份分别能恢复什么,如何为 PostgreSQL 制定组合备份策略”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按恢复粒度、跨版本恢复能力与备份体积对比两者,并给出全量加 WAL 归档加周期性逻辑导出的组合思路。
围绕“PostgreSQL 基于基础备份加 WAL 归档的 PITR 如何恢复到任意时间点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须讲清基础备份加连续归档的恢复链路与 recovery_target_time 等目标的设置。
围绕“PostgreSQL 连接池大小应该如何估算,为什么池子越大反而吞吐可能下降”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须基于 CPU 核数与 I/O 等待比例说明活跃后端过多导致争用的原因,并给出从小池加压测调整的方法。
围绕“PostgreSQL 中主键与 UNIQUE NOT NULL 组合约束在语义和实现上有什么实质区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明两者都创建唯一索引的前提下,主键在标识列、逻辑复制 REPLICA IDENTITY 和外键引用默认值上的特殊地位。
围绕“如何监控和诊断 PostgreSQL 备库复制延迟过大的原因”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分发送延迟、写入延迟与重放延迟三个指标,并指出大事务、长查询冲突与硬件瓶颈等常见成因。
围绕“PostgreSQL 复制槽解决什么问题,管理不当为什么会撑爆主库磁盘”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释复制槽防止 WAL 过早回收的机制及失联消费方导致 WAL 无限堆积的风险与监控手段。
围绕“PostgreSQL 流复制中 WAL 是如何从主库传到备库并应用的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 WAL 记录经 walsender/walreceiver 传输并由备库重放的流程及同步点概念。
围绕“PostgreSQL 事务 ID 回卷是什么,为什么接近回卷时数据库会强制只读甚至停库”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 32 位事务 ID 环形比较与冻结机制,以及 datfrozenxid 年龄告警和紧急单用户模式的处置。
围绕“PostgreSQL 唯一约束中多个 NULL 为何不冲突,如何实现对 NULL 也唯一的列”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明默认 NULLS DISTINCT 语义,并给出部分唯一索引或 PostgreSQL 15 的 NULLS NOT DISTIN。
围绕“PostgreSQL 大版本升级有哪些方式,如何在大库上控制停机时间”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比 pg_upgrade(含 --link)、pg_dump 恢复与逻辑复制切换三者的停机窗口与风险。
围绕“PostgreSQL 中 ANALYZE 与 VACUUM 为什么常一起出现,统计信息过期会造成什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明统计信息驱动代价估算导致计划劣化的链路及 autovacuum 与 autoanalyze 的关系。
围绕“PostgreSQL 为什么必须执行 VACUUM,不清理会发生什么后果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确回收死元组空间和防止事务 ID 回卷双重职责及各自失控后的症状。
围绕“PostgreSQL 的 VACUUM 与 VACUUM FULL 在锁和空间回收上的本质区别是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明普通 VACUUM 只标记空间可复用而 FULL 重写整表并持有排他锁,并给出各自适用场景。