缓存表写入延迟 是指返回写入结果阻塞吗

请问下,如果我用客户端向缓存表中更新数据,这里说的数据更新延迟,是指插入结果会延迟返回,还是说插入结果会立即返回成功,但是有可能查到旧的数据, 因为我本地测试 都是立即返回结果的 更新数据也是立即生效。

指数据插入会变慢,数据返回始终是最新的

1 个赞

和你连接的tidb节点有关。如果你读写都是一个tidb节点自然不会感觉有什么问题。如果跨tidb节点了,一个tidb节点写完了,另一个tidb节点读取到内存再给你,是会有一定延迟的。

这个地方指的是延迟返回,不会查到旧数据,查到旧数据就是破坏一致性了。

说说我的理解:
tidb_table_cache_lease这个值就是缓存表的租约时间,理论上你修改一张缓存表,最长可能等待这么长的时间。
举个例子,你有三个tidb节点ABC,一张缓存表t,租约时间为10秒,A 缓存了t刚4秒钟,B缓存了3秒钟,C刚刚缓存,即0秒钟,ABC的t表剩余租约时间分别为6/7/10。这时如果你在任意一个节点去修改t表,是需要ABC三个节点中的t都过了租约时间才可以修改成功的,也就是必须等C的剩余租约时间10秒钟过去,才能修改这张表。
如果刚刚好,这三个节点都是缓存了这个缓存表10秒钟,剩余租约时间全部是0,那你在任意一个节点去修改t表,都是可以立刻修改成功的。。
你可以调大这个值,然后三个节点分别查询这个表之后,选其中一个节点来修改这个缓存表,看下修改需要话费的时间。
不过你修改可能很慢,但是如果修改成功,所有节点肯定看到的是修改后的值,不会出现查询到旧数据的情况。

1 个赞

缓存表的写入延迟通常不是指返回写入结果会阻塞,而是指数据实际生效或对查询可见的时间点可能会有一定延迟,

不完全是。在 TiDB 中,写入延迟指的是客户端等待写入被确认的时间,这个确认通常发生在数据写入事务日志和更新缓存之后,而不需要等到数据完全持久化到存储层。因此,写入操作不会完全阻塞客户端,而是会在部分步骤完成后返回结果。具体的行为可能会因 TiDB 的配置,像一致性级别或缓存策略等,但默认情况下,它更倾向于非阻塞的快速响应。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。