【DB吐槽大会】第75期 - PG 不支持索引失效功能

背景


1、产品的问题点

  • PG 不支持索引失效(invalid index)功能

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

  • PG 执行计划会考虑使用索引, 除非这个索引被标记为invalid状态.
  • 当数据发生变化时, invalid状态的索引依旧会被更新.

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

  • 通用

4、会导致什么问题?

  • 当想临时排除某个索引对某些SQL执行计划的影响时, 只能drop index. 如果DROP后还有其他SQL想用到这个索引又不得不加上, 耗时而且浪费资源.
  • 不清楚某个索引是否被用到, 直接DROP的话, 如果索引还要被用到, 再创建索引, 耗时而且浪费资源.

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

  • 直接修改元数据, 实现invalid索引效果. 《PostgreSQL 改元信息 invalid index》
  • 如果只是想清理未使用过的索引, 可以查看 pg_stat_all_indexes、pg_statio_all_indexes 索引统计信息来判断索引是否被使用.

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

  • 改元数据的风险较大

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

  • 建议支持invalid index语法. invalid index 继续保持索引的更新, 随时可以改回valid.



上一篇:【DB吐槽大会】第76期 - PG 不支持共享存储多活架构


下一篇:【DB吐槽大会】第78期 - PG 不支持绕过shared buffer的查询和写入