【0259】inval.h/inval.c的理解

1. inval.h/inval.c

inval.h、inval.c是缓存无效消息(invalidation message)调度程序定义。

2. inval.h/inval.c特性

inval.h/inval.c的实现是一个非常微妙的东西,所以需要注意:

  • 当一个元组被更新或删除时,我们的标准可见性规则(standard visibility rules)认为只要我们在同一个命令中,它“仍然有效”,即直到下一个CommandCounterIncrement()或事务提交。(请参阅 access/heap/heapam_visibility.c,注意系统catalogs(system catalogs)通常在可用的最新快照下扫描,而不是在事务快照下扫描。)在命令边界,旧的元组不再有效,新版本(如果有的话)变得有效。因此,我们不能简单地在heap_update()heap_delete()期间从系统缓存中刷新元组。元组在这一点上仍然是好的;更重要的是,即使我们确实刷新了它,它也可能在同一命令中的后续请求中被重新加载到缓存中。因此,正确的做法是保留过期(已更新/已删除)元组的列表,然后在下一个命令边界执行所需的缓存刷新。我们还必须跟踪插入的元组,以便我们可以刷新与新元组匹配的“负”缓存项;再说一遍,在命令结束之前,这绝不能发生。
  • 完成命令后,我们仍然需要记住插入的元组(包括更新元组的新版本),以便在中止事务时从缓存中刷新它们。类似地, 我们最好能够刷新“负”缓存条目&#

你可能感兴趣的:(#,▲,初阶篇,inval,inval,message,backend,delete,insert)