pgvector过滤检索与召回率实战
向量索引建立后,带租户、状态等条件的查询仍可能返回不足,原因往往在于近似检索先生成候选,再执行业务过滤。本文围绕 pgvector 拆解候选损耗、迭代扫描、严格排序与召回率的区别,提供实验数据、执行计划检查及精确检索对照脚本,并比较普通索引、部分索引和分区的适用场景。文章强调,返回够数不等于最近邻完整,候选重排不能找回遗漏记录,权限范围也不能为召回率让路。上线应同时验证结果数量、召回质量、延迟和并发资源成本。
这个话题下有 3 篇手记。
向量索引建立后,带租户、状态等条件的查询仍可能返回不足,原因往往在于近似检索先生成候选,再执行业务过滤。本文围绕 pgvector 拆解候选损耗、迭代扫描、严格排序与召回率的区别,提供实验数据、执行计划检查及精确检索对照脚本,并比较普通索引、部分索引和分区的适用场景。文章强调,返回够数不等于最近邻完整,候选重排不能找回遗漏记录,权限范围也不能为召回率让路。上线应同时验证结果数量、召回质量、延迟和并发资源成本。
PostgreSQL业务表增长不明显,磁盘却可能被持续保留的WAL占满。本文从复制槽、归档失败与检查点机制切入,解释max_wal_size为何不是硬上限,区分restart_lsn与confirmed_flush_lsn,并提供只读诊断SQL。结合WAL生成速率、磁盘净增长和复制槽剩余预算,建立容量与恢复时间评估方法,说明删除WAL、盲目清槽和频繁检查点的风险,形成从定位、止血到验证的排障闭环。
PostgreSQL 18 的性能优化不再局限于加索引或调 SQL,而是从底层重构数据访问与建模方式。其异步 I/O 子系统通过 worker 或 io_uring 并发读取,显著改善大表扫描、Bitmap Heap Scan 和 VACUUM 的吞吐;B-Tree Skip Scan 允许联合索引在缺失最左列时仍能部分利用;原生 UUIDv7 提供时间有序标识,提升索引写入局部性;虚拟生成列将确定性行内计算统一到数据库;增强的 RETURNING OLD/NEW 可一次获取修改前后数据。文章强调,这些能力并非自动加速所有查询,升级前应基于真实负载测试,合理配置 I/O 并发参数,并关注统计信息恢复与生态兼容。