开发者社区 > PolarDB开源 > PolarDB 分布式版 > 正文

PolarDB有时会读到表中过去已删除的数据,再读就没有了怎么回事,是查询缓存吗?

PolarDB有时会读到表中过去已删除的数据,再读就没有了怎么回事,是查询缓存吗?

展开
收起
三分钟热度的鱼 2024-01-17 20:23:54 68 0
3 条回答
写回答
取消 提交回答
  • PolarDB读取到已删除数据的情况,确实有可能与查询缓存有关。在关系型数据库中,尤其在高并发和分布式环境下,事务处理和数据可见性遵循特定的隔离级别规则。在某些隔离级别下,例如“可重复读”(Repeatable Read)模式下,虽然在一个事务内部不会看到其他事务插入的新数据,但如果一个事务开始之前已有删除的数据,在这个事务内仍可能看到这些已删除的数据。

    另外,查询缓存也可能导致这种情况发生。如果数据库系统如阿里云的PolarDB启用了查询缓存,并且在删除操作执行后,查询请求在缓存更新之前直接从缓存中获取结果,那么就可能出现读取到已删除数据的现象。一旦缓存失效或者更新,则后续的查询请求将从最新的数据库记录中获取数据,所以再次读取时数据就不见了。

    因此,当遇到此类情况时,一方面要确认数据库事务的隔离级别设置是否符合预期,另一方面要关注查询缓存的刷新机制以及是否有异常的缓存行为。对于PolarDB这类分布式数据库而言,还需要考虑到其多节点间的数据一致性保障机制是否正确运作。

    2024-01-25 15:01:25
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    您好,根据您的描述,PolarDB在读取数据时出现了读到已删除数据的情况。这可能是因为您在查询时没有使用正确的隔离级别,导致读取到了其他事务已经提交但未写入磁盘的数据。此外,如果使用了缓存查询,那么也可能会出现读到已删除数据的情况。

    为了解决这个问题,建议您尝试以下方法:

    1. 调整查询的隔离级别。例如,将隔离级别从READ UNCOMMITTED更改为READ COMMITTED或REPEATABLE READ,以确保只读取已经提交的数据。
    2. 关闭查询缓存功能。可以通过修改会话级别的参数query_cache_type来关闭查询缓存功能。例如,将query_cache_type设置为0表示关闭查询缓存功能。
    3. 如果需要恢复已删除的数据,可以考虑使用PolarDB提供的库表恢复功能。该功能可以在不影响原集群数据库正常访问的情况下,将备份数据恢复到指定的库表中。
    2024-01-18 13:34:06
    赞同 展开评论 打赏
  • 如果是对数据一致性有要求,得开会话一致性或者全局一致性。此回答整理自钉群“PolarDB专家面对面 - HTAP(列存索引) ”

    2024-01-17 20:38:11
    赞同 展开评论 打赏

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。

相关电子书

更多
2023云栖大会:PolarDB for AI 立即下载
2023云栖大会:AnalyticDB PostgreSQL 立即下载
2022云栖大会:打造世界级云原生数据库开源社区 立即下载