【DB吐槽大会】第43期 - PG 倒排索引启动和recheck代价高

简介: 大家好,这里是DB吐槽大会,第43期 - PG 倒排索引启动和recheck代价高

背景


1、产品的问题点

  • PG 倒排索引启动代价较高

2、问题点背后涉及的技术原理

  • gin索引是多值列的索引方法, 多值列内的TOKEN作为索引KEY、对应的多个行号作为value, 构建索引树.
  • 使用gin索引搜索数据时分为3个阶段
  • 1、bitmap index scan, 取得符合条件的所有行号, 获得对应的block id.
  • 2、bitmap heap scan, 根据block id顺序从heap 表搜索数据. (这一步会放大搜索结果, 因为一个block里面哪怕只有1条符合条件的记录, 也需要返回这个block内的所有记录).
  • 3、recheck, 根据查询条件再做一次 recheck , 过滤放大的无效记录.
  • 显然, 第1步bitmap index scan的启动成本较高, 因为不管要不要limit结果或者流式返回, 都需要

3、这个问题将影响哪些行业以及业务场景

  • 使用GIN倒排索引的场景, 例如全文检索、根据数组条件进行的用户圈选、JSON条件筛选

4、会导致什么问题?

  • 启动成本过高 , 即使如下限制, index扫描依旧是全代价.
  • 使用 limit 限制返回结果数
  • 翻页或游标返回时,
  • 不需要返回所有结果时
  • 除了启动成本的问题, 另一个问题是recheck, 会带来较大的cpu开销, 高并发时尤为明显.
  • 使用explain analyze可以看到bitmap index scan阶段的耗时.

5、业务上应该如何避免这个坑

  • 可以采用rum索引代替gin索引

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • 引入了第三方插件, 增加了风险
  • rum 插件的wal日志效率较低, 在它的roadmap中已经表明

7、数据库未来产品迭代如何修复这个坑

  • 希望gin可以同时支持index scan和bitmap scan
  • 当ctid较少时, 同时使用ssd时, 实际上index scan效率可能更高, 可以避免recheck带来的高cpu消耗.
相关文章
|
2月前
|
JSON Rust API
Pydantic v2 入门教程:模型、字段、验证器
本文详解 Pydantic v2(Python 3.10+)核心用法:模型定义、字段约束、自定义验证器(field/model)、嵌套/递归结构、序列化控制及 JSON Schema 生成,所有示例完整可运行,助你构建健壮数据验证与序列化逻辑。
164 1
Pydantic v2 入门教程:模型、字段、验证器
|
12月前
|
人工智能 弹性计算 大数据
和五所高校一起,我们共同打造了一门 AI 课程!
阿里云、超星尔雅协同北京大学、南京大学、复旦大学、上海交通大学、浙江大学五所高校名师,共同推出的 AI 通识公益系列课程「动手学 AI:人工智能通识与实践」将于 9月 1 日面向全国所有高校、所有专业的师生正式开放。
889 5
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
1066 3
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课13 单机版转换为集群版
本文介绍如何将“本地存储实例”转换为“共享存储实例”,依赖于先前搭建的实验环境。主要步骤包括:准备PFS二进制文件、格式化共享盘为pfs文件系统、启动pfsd服务、停库并拷贝数据到pfs内、修改配置文件,最后启动实例。通过这些操作,成功实现了从本地存储到共享存储的转换,并验证了新实例的功能。相关系列文章和视频链接提供了更多背景信息和技术细节。
447 0
|
机器学习/深度学习 人工智能 安全
Stable Diffusion 3.0 :一键开启你的AI绘画之旅
本文介绍了Stable Diffusion 3.0的主要优化,包括采用DiT架构提升多对象生成能力及“流匹配”技术加速采样。同时解决了部署复杂、显卡需求高等问题,可通过阿里云计算巢一键部署,实现即开即用。文章展示了人像、动漫风、科幻风等生成效果,并提供中文菜单设置与插件下载教程。无论是专业设计师还是普通用户,都能轻松开启智能创作新时代。 Flux模型支持即将上线,值得期待。
|
存储 人工智能 搜索推荐
Tablestore OpenMemory MCP : 跨会话、跨模型的智能记忆解决方案
本文介绍了Mem0的原理与应用场景,并基于Mem0构建了Tablestore OpenMemory MCP服务,实现个性化旅行规划助理。Mem0是一种为大型语言模型设计的智能记忆层,通过向量数据库持续学习用户交互信息,实现跨会话的个性化记忆管理。该服务提供多种MCP工具,便于集成到各类AI应用中。最后演示了个性化旅行规划应用,并介绍了服务的运行与配置方式。
1563 0
|
存储 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 1 架构解读
PolarDB 是阿里云研发的云原生分布式数据库,基于 PostgreSQL 开源版本,旨在解决传统数据库在大规模数据和高并发场景下的性能和扩展性问题。其主要特点包括: 1. **存储计算分离架构**:通过将计算与存储分离,实现极致弹性、共享一份数据以降低成本、透明读写分离。 2. **HTAP 架构**:支持混合事务处理和分析处理(HTAP),能够在同一系统中高效执行 OLTP 和 OLAP 查询。 3. **优化的日志复制机制**:采用只复制元数据的方式减少网络传输量,优化页面回放和 DDL 锁回放过程。 4. **并行查询与索引创建**:引入 MPP 分布式执行引擎。
761 8
|
关系型数据库 分布式数据库 PolarDB
PolarDB开源数据库进阶课9 读写分离
本文介绍了如何配置读写分离工具pgpool-II for PolarDB,使应用程序能够透明地实现读写分离。
582 1
|
存储 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 8 数据库生态
PolarDB是一款开源的云原生分布式数据库,源自阿里云商业产品。为降低使用门槛,PolarDB携手伙伴打造了完整的开源生态,涵盖操作系统、芯片、存储、集成管控、监控、审计、开发者工具、数据同步、超融合计算、ISV软件、开源插件、人才培养、社区合作及大型用户合作等领域。通过这些合作伙伴,PolarDB提供了丰富的功能和服务,支持多种硬件和软件环境,满足不同用户的需求。更多信息请访问[PolarDB开源官方网站](https://openpolardb.com/home)。
816 4
|
网络协议 Unix 网络架构
网际控制报文协议ICMP
网际控制报文协议(ICMP)是TCP/IP体系结构中网际层的关键组件,用于提高IP数据报的成功传输率。ICMP主要处理两类报文:差错报告报文与询问报文。前者包括终点不可达、源点抑制、时间超过、参数问题及重定向等五类;后者则涵盖回送请求/回答及时间戳请求/回答。ICMP广泛应用于检测网络连通性的PING工具和追踪数据包路径的traceroute工具中。两者分别利用ICMP的回送请求报文及差错报告报文实现功能。
2038 10